Подскажите чайнику, пожалуйста =)

Тема в разделе "Arduino & Shields", создана пользователем mich2lych, 14 окт 2015.

  1. mich2lych

    mich2lych Нерд

    Издевались над "маячком", напоролись на проблему. Программа проходит один цикл и не повторяется.
    Суть в чём. Два светодиода (красный и зелёный - для определённости, но это неважно) горят строго попеременно. Если один горит, второй не горит. Причём яркость их изменяется (привязана к значению счётчика), и чем дольше горит светодиод, тем он тусклее. И пока яркость одного нарастает, яркость второго падает. Общая длина одного прохода - примерно постоянна. Текст скетча:

    Код (C++):
    #define RED_PIN 9
    #define GRN_PIN 10

    void setup() {
      // put your setup code here, to run once:
    pinMode(RED_PIN, OUTPUT);
    pinMode(GRN_PIN, OUTPUT);
    }

    void loop() {
      // Цикл по i от 0 до 255 с единичным шагом
    for(int i = 0; 255; i++)
    {analogWrite(RED_PIN, i); // первый полупроход цикла - красный горит
    analogWrite(GRN_PIN, 0); // а зелёный - не горит
    delay((255 - i ) * 2); // уменьшающаяся задержка
    analogWrite(RED_PIN, 0); // второй полупроход - наоборот
    analogWrite(GRN_PIN, (255 - i));
    delay(i * 2); // растущая задержка; если сложить оба полупрохода, получим 512 мс.
    }
    }
    Луп не происходит. Программа не повторяется.
    Может кто-нибудь исправить ошибку, а лучше - объяснить, почему она возникла?
    Заранее спасибо.
     
    Последнее редактирование: 14 окт 2015
  2. Megakoteyka

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

    Код (C++):
    for(int i = 0; 255; i++)
    Выражение между двумя точками с запятой, т.е. "255" всегда не равно нулю, т.е. всегда истинно.
    Код (C++):
    for(int i = 0; i < 255; i++)
    Нужно просто быть внимательнее.

    Слева от кнопочки "цитата" есть кнопочка "код", вы лучше ее нажимайте, когда хотите исходник на форум засунуть. А если в Arduino IDE нажимать Ctrl+T, то будет совсем красиво.
     
    mich2lych нравится это.
  3. mich2lych

    mich2lych Нерд

    Спасибо большое, дело не во внимательности, а в том, что я чайник =)
     
  4. Megakoteyka

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

    Запись
    for(XXX; YYY; ZZZ) {...}
    следует читать так: выполнять тело цикла до тех пор, пока истинно выражение YYY. Перед циклом выполнить XXX, а после каждого прохода тела цикла выполнить YYY.
    Выражения в данном случае могут быть практически любыми - можно и функции вызывать, и сложные формулы писать.

    Постарайтесь подобным образом расписать логику выполнения всех конструкций языка и наступит просветление.
     
  5. mich2lych

    mich2lych Нерд

    в конце ZZZ должно быть =) Как видите, совет "быть внимательнее" я воспринял =) Ещё раз спасибо.
     
    Megakoteyka нравится это.