Могу ли я сделать что-то подобное, чтобы упростить код для arduino?

Могу ли я упростить код в Arduino, чтобы он не приводил к ошибкам? Пример:

Int led =13;
Blink = digitalWrite(led, HiGH);   
             delay(1000);
             digitalWrite(led, LOW);
             delay(1000);

void setup(){
pinMode(led, OUTPUT);
}

void loop(){
Blink
}

, 👍0

Обсуждение

Пожалуйста, вставьте код напрямую вместо публикации изображения. Никто не будет тратить свое время на ввод вашего кода., @Kwasmich

Предыдущая версия была лучше, просто выберите код после вставки и нажмите ctrl-k, чтобы сделать отступ, чтобы получить правильный «макет стиля кода»., @Michel Keijzers

Обратите внимание, что пока loop() не делает ничего, кроме blink(), определение blink() как отдельной функции не упрощается., @Edgar Bonet


4 ответа


5

Действительно есть ошибки.

Во-первых, вы не можете присвоить тело функции переменной.

Поэтому вам нужно переписать функцию 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


-1

И это должно быть byte, а не int, чтобы сэкономить память:

static const int led = 13;

High должен быть HIGH, все прописные.

,

Для константы не имеет значения использование памяти, если вы используете byte, int, long или даже long long., @Majenko


1

Ваш код

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()
}

Отличный ответ Майкла (проголосовавший!) показывает, какие изменения необходимо внести в код, чтобы он заработал. Вышеизложенное более подробно объясняет, ПОЧЕМУ вам нужно внести эти изменения.

,

1

Конечно, в 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