Задача такая: когда темно, то горят все LED, но когда светло, то void loop (в котором два LED включаются и выключаются, потом следующие два также и следующие два также и потом все заново). но вот ERROR COMPILING: p050_night_light_mine.ino:In function 'void loop()': p050_night_light_mine.ino:52:16: error: a function-definition is not allowed here before '{' token Error compiling. Я понимаю, что что-то где-то пропустила, но не могу понять что и где! #define LED_PIN1 1 #define LED_PIN2 2 #define LED_PIN3 3 #define LED_PIN4 4 #define LED_PIN5 5 #define LED_PIN6 6 #define LDR_PIN A0 #define POT_PIN A1 void setup() { pinMode(LED_PIN1, OUTPUT); pinMode(LED_PIN2, OUTPUT); pinMode(LED_PIN3, OUTPUT); pinMode(LED_PIN4, OUTPUT); pinMode(LED_PIN5, OUTPUT); pinMode(LED_PIN6, OUTPUT); } void loop() { // считываем уровень освещённости. Кстати, объявлять // переменную и присваивать ей значение можно разом int lightness = analogRead(LDR_PIN); // считываем значение с потенциометра, которым мы регулируем // пороговое значение между условными темнотой и светом int threshold = analogRead(POT_PIN); // объявляем логическую переменную и назначаем ей значение // «темно ли сейчас». Логические переменные, в отличие от // целочисленных, могут содержать лишь одно из двух значений: // истину (англ. true) или ложь (англ. false). Такие значения // ещё называют булевыми (англ. boolean). boolean tooDark = (lightness < threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN1, HIGH); digitalWrite(LED_PIN2, HIGH); digitalWrite(LED_PIN3, HIGH); digitalWrite(LED_PIN4, HIGH); digitalWrite(LED_PIN5, HIGH); digitalWrite(LED_PIN6, HIGH); } else { void loop() { digitalWrite(1, HIGH); digitalWrite(2, HIGH); delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); delay(1000); digitalWrite(3, HIGH); digitalWrite(4, HIGH); delay(1000); digitalWrite(3, LOW); digitalWrite(4, LOW); delay(1000); digitalWrite(5, HIGH); digitalWrite(6, HIGH); delay(1000); digitalWrite(5, LOW); digitalWrite(6, LOW); } } }
if ( когда темно), то горят все LED, else (когда светло), то void loop, в котором два LED включаются и выключаются, потом следующие два также и следующие два также и потом все заново
ура! больше никаких ошибок! но вот будет ли он это действие теперь повторять? вот это: digitalWrite(1, HIGH); digitalWrite(2, HIGH); delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); delay(1000); digitalWrite(3, HIGH); digitalWrite(4, HIGH); delay(1000); digitalWrite(3, LOW); digitalWrite(4, LOW); delay(1000); digitalWrite(5, HIGH); digitalWrite(6, HIGH); delay(1000); digitalWrite(5, LOW); digitalWrite(6, LOW); ? или он один раз так сделает и все?
loop() - это функция. void - это [специальный] тип возвращаемого значения, означает что функция ничего не возвращает, в языке Pascal такие функции называются процедурами (procedure). В языке C (C++) процедур нет, но есть функции с типом возвращаемого значения void. Вот если бы функция loop() была объявлена как int loop(), то она могла бы вернуть значение типа int с помощью оператора return;
а как эти операторы (for/while ) совместить c тем кодом, который у меня есть? можете, пожалуйста, вставить эти операторы в мой код и в комментарии прислать исправленную версию? буду вам ОЧЕНЬ благодарна!!
до тех пор, пока не станет темно то есть: когда темно, все лампочки одновременно просто горят а когда светло, то 2лампочки загорелись и потухли, потом две следующие загорелись и потухли, и еще две загорелись и потухли и потом заново первые две лампочки загорелись и тд
Да. Все, что находится внутри loop, будет повторяться бесконечно. Т.е. и проверка освещённости ти и включение LED.