Могу ли я сделать что-то подобное, чтобы упростить код для arduino?
Могу ли я упростить код в Arduino, чтобы он не приводил к ошибкам? Пример:
Int led =13;
Blink = digitalWrite(led, HiGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
void setup(){
pinMode(led, OUTPUT);
}
void loop(){
Blink
}
@Subaash Nair, 👍0
Обсуждение4 ответа
Действительно есть ошибки.
Во-первых, вы не можете присвоить тело функции переменной.
Поэтому вам нужно переписать функцию Blink:
void blink()
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Также для вызова функции, даже без параметров, вы должны использовать ( и ):
void loop()
{
blink();
}
Также вам нужно использовать правильные заглавные буквы или нет:
int led = 13;
Вы можете сделать его постоянным, поскольку он не меняется:
static const int led = 13;
Все вместе вы получаете:
static const int led = 13;
void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
blink();
}
void blink()
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Я предлагаю вам прочитать книгу о C или C++, чтобы привыкнуть к синтаксису.
Кроме того, обратите внимание, что int записывается как int, а не Int. Регистр имеет значение.
Огромное спасибо. Это был хороший опыт для меня., @Subaash Nair
Пожалуйста, если это поможет вам, пожалуйста, проголосуйте, и если это решит вашу проблему, примите ответ (нажав кнопку рядом с ответом). Получайте удовольствие от Arduino., @Michel Keijzers
И это должно быть byte, а не int, чтобы сэкономить память:
static const int led = 13;
High должен быть HIGH, все прописные.
Для константы не имеет значения использование памяти, если вы используете byte
, int
, long
или даже long long
., @Majenko
Ваш код
Blink = digitalWrite(led, HiGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
Пытается определить функцию Blink
, которую вы можете вызвать позже. Вы не делаете этого с присваиванием (=
)
Вы хотите определить функцию. Я бы предложил назвать его blink()
, а не Blink
. (все в нижнем регистре.
Функции имеют круглые скобки после имени, куда вы указываете параметры, если ваша функция имеет какие-либо параметры. Если нет, вам все еще нужны скобки. Основной синтаксис определения функции:
return_type function_name(param_type param_name)
Если ваша функция не возвращает значение, используйте тип void
, что означает "нет типа".
Поэтому для функции foo
, которая не принимает никаких параметров и не возвращает никакого значения, вы должны использовать:
void foo () {
//Код для функции foo()
}
Отличный ответ Майкла (проголосовавший!) показывает, какие изменения необходимо внести в код, чтобы он заработал. Вышеизложенное более подробно объясняет, ПОЧЕМУ вам нужно внести эти изменения.
Конечно, в C++ есть хорошие вещи.
Для развлечения изучите рабочий скетч Arduino на основе кода из вопроса:
int led =13;
auto Blink = []() { digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
};
void setup(){
pinMode(led, OUTPUT);
}
void loop(){
Blink();
}
Примечание: используйте обычные функции в своих скетчах и сохраняйте лямбда-выражения для особых случаев.
Лямбды намного, WAAAAY превосходят текущие возможности OP. Вы оказываете им медвежью услугу, даже упоминая их на этом этапе обучения., @Duncan C
- Как я могу прервать задержку() при нажатии кнопки?
- Программирование Arduino Uno R3 для срабатывания реле каждые 24 часа
- Servo_Pointer' was not declared in this scope
- Преобразование int или float в массив байтов в ардуино
- Операторы If/Else на Arduino не выполняются
- Проблемы с Serial.read()
- Использование значения MAX30100 SpO2 для включения светодиода
- Серводвигатель не будет работать для определенного кода
Пожалуйста, вставьте код напрямую вместо публикации изображения. Никто не будет тратить свое время на ввод вашего кода., @Kwasmich
Предыдущая версия была лучше, просто выберите код после вставки и нажмите ctrl-k, чтобы сделать отступ, чтобы получить правильный «макет стиля кода»., @Michel Keijzers
Обратите внимание, что пока
loop()
не делает ничего, кромеblink()
, определениеblink()
как отдельной функции не упрощается., @Edgar Bonet