ПОМОГИТЕ ПОЖАЛУЙСТА ИСПРАВИТЬ КОД!

Тема в разделе "Микроконтроллеры AVR", создана пользователем magmel, 16 апр 2015.

  1. magmel

    magmel Нерд

    Задача такая:

    когда темно, то горят все 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);

    }
    }
    }
     
  2. Unixon

    Unixon Оракул Модератор

    Это что еще за функция внутри функции? Так низзя делать.
     
  3. magmel

    magmel Нерд

    а как можно???
     
  4. magmel

    magmel Нерд

    я совсем не знаю, как можно, а как нет!(
    и не понимаю, как в else сделать loop!(
     
  5. Unixon

    Unixon Оракул Модератор

    А что хотели сделать то?
     
  6. magmel

    magmel Нерд

    if ( когда темно),
    то горят все LED,

    else (когда светло),
    то void loop, в котором два LED включаются и выключаются, потом следующие два также и следующие два также и потом все заново
     
  7. Unixon

    Unixon Оракул Модератор

    Просто уберите "void loop() {" после else и соответствующую закрывающую скобку "}".
     
  8. magmel

    magmel Нерд

    ура! больше никаких ошибок!
    но вот будет ли он это действие теперь повторять?
    вот это:
    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);

    ? или он один раз так сделает и все?
     
  9. Unixon

    Unixon Оракул Модератор

    loop() - это функция.
    void - это [специальный] тип возвращаемого значения, означает что функция ничего не возвращает, в языке Pascal такие функции называются процедурами (procedure). В языке C (C++) процедур нет, но есть функции с типом возвращаемого значения void.

    Вот если бы функция loop() была объявлена как int loop(), то она могла бы вернуть значение типа int с помощью оператора return;
     
  10. Unixon

    Unixon Оракул Модератор

    Для повтора используйте операторы цикла for или while или do ... while.
     
  11. magmel

    magmel Нерд

    а как эти операторы (for/while ) совместить c тем кодом, который у меня есть?
    можете, пожалуйста, вставить эти операторы в мой код и в комментарии прислать исправленную версию? буду вам ОЧЕНЬ благодарна!!
     
  12. Unixon

    Unixon Оракул Модератор

    Сколько раз это должно повторяться?
     
  13. magmel

    magmel Нерд

    до тех пор, пока не станет темно

    то есть:
    когда темно, все лампочки одновременно просто горят
    а когда светло, то 2лампочки загорелись и потухли, потом две следующие загорелись и потухли, и еще две загорелись и потухли и потом заново первые две лампочки загорелись и тд
     
  14. Unixon

    Unixon Оракул Модератор

    Тогда просто ничего не нужно добавлять.
     
  15. magmel

    magmel Нерд

    то есть оно само будет повторяться, пока не станет темно? большое спасибо!
     
  16. Tomasina

    Tomasina Сушитель лампочек Модератор

    Да. Все, что находится внутри loop, будет повторяться бесконечно. Т.е. и проверка освещённости ти и включение LED.