Подскажите пожалуйста по коду

Тема в разделе "Arduino & Shields", создана пользователем SerRay, 20 фев 2014.

  1. SerRay

    SerRay Нерд

    Ребят, подскажите пожалуйста. Есть код (его суть - зажигать и гасить по очереди светодиоды, расположенные на поочередных пинах):
    Код (Text):

    int led1 = 22;
    int led2 = 23;
    int led3 = 24;
    int led4 = 25;
    int led5 = 26;
    int led6 = 27;
    int led7 = 28;
    int led8 = 29;
    int led9 = 30;
    int led10 = 31;
    void setup() {
    //задаем пины как выходы
      pinMode (22, OUTPUT);
      pinMode (23, OUTPUT);
      pinMode (24, OUTPUT);
      pinMode (25, OUTPUT);
      pinMode (26, OUTPUT);
      pinMode (27, OUTPUT);
      pinMode (28, OUTPUT);
      pinMode (29, OUTPUT);
      pinMode (30, OUTPUT);
      pinMode (31, OUTPUT);
    //выключаем пины
      digitalWrite (22, LOW);
      digitalWrite (23, LOW);
      digitalWrite (24, LOW);
      digitalWrite (25, LOW);
      digitalWrite (26, LOW);
      digitalWrite (27, LOW);
      digitalWrite (28, LOW);
      digitalWrite (29, LOW);
      digitalWrite (30, LOW);
      digitalWrite (31, LOW);
    }

    void loop() {
      // поочередно зажигаем и гасим светодиоды
      for (int i =
             digitalWrite (22, HIGH);
           delay (50);
           digitalWrite (22, LOW);
           digitalWrite (23, HIGH);
           delay (50);
           digitalWrite (23, LOW);
           digitalWrite (24, HIGH);
           delay (50);
           digitalWrite (24, LOW);
           digitalWrite (25, HIGH);
           delay (50);
           digitalWrite (25, LOW);
           digitalWrite (26, HIGH);
           delay (50);
           digitalWrite (26, LOW);
           digitalWrite (27, HIGH);
           delay (50);
           digitalWrite (27, LOW);
           digitalWrite (28, HIGH);
           delay (50);
           digitalWrite (28, LOW);
           digitalWrite (29, HIGH);
           delay (50);
           digitalWrite (29, LOW);
           digitalWrite (30, HIGH);
           delay (50);
           digitalWrite (30, LOW);
           digitalWrite (31, HIGH);
           delay (50);
           digitalWrite (31, LOW);
           digitalWrite (30, HIGH);
           delay (50);
           digitalWrite (30, LOW);
           digitalWrite (29, HIGH);
           delay (50);
           digitalWrite (29, LOW);
           digitalWrite (28, HIGH);
           delay (50);
           digitalWrite (28, LOW);
           digitalWrite (27, HIGH);
           delay (50);
           digitalWrite (27, LOW);
           digitalWrite (26, HIGH);
           delay (50);
           digitalWrite (26, LOW);
           digitalWrite (25, HIGH);
           delay (50);
           digitalWrite (25, LOW);
           digitalWrite (24, HIGH);
           delay (50);
           digitalWrite (24, LOW);
           digitalWrite (23, HIGH);
           delay (50);
           digitalWrite (23, LOW);
           digitalWrite (22, HIGH);
           delay (50);
           digitalWrite (22, LOW);
    }

     
    Как его упростить при помощи "for (int i=22; i<32; ++i)" - функции перебирающей пины автоматически, а не перебирать их вручную.
     
  2. Unixon

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

    Массивами пробовали пользоваться?
     
  3. SerRay

    SerRay Нерд

    Вот я и не пойму, как впилить в этот код массив. Подскажите пожалуйста.
     
  4. acos

    acos Официальный гик Администратор

    Первое, что пришло в голову:
    Код (Text):
    digitalWrite (22, HIGH);
    for (int i=23; i<32; ++i) {
          digitalWrite (i-1, LOW);
          digitalWrite (i, HIGH);
          delay (50);
    }
    for (int i=31; i>22; --i) {
            digitalWrite (i, LOW);
          digitalWrite (i-1, HIGH);
          delay (50);
    }
    digitalWrite (22, LOW);
    Включать голову — сегодня уже лень)
    Реально, что-то устал. Тяжёлый был день(
     
    SerRay нравится это.
  5. NR55RU

    NR55RU Гик

    Код не является универсальным, не стал мудрить.
    Постарался сделать достаточно коротко и понятно.

    Код (Text):
    const int firstLedPin = 22;
    const int ledsCount = 10;
    int ledPin[10];

    void setup()
    {
        int i;
        for ( i = 0; i < ledsCount; i++ )
        {
            ledPin[i] = firstLedPin + i;
            pinMode ( ledPin[i], OUTPUT );
            digitalWrite ( ledPin[i], LOW );
        }
    }

    void loop()
    {
        int i;
        // Нарастание
        for( i = 0; i < ledsCount; i++ )
        { blink ( ledPin[i] ); }
        // Спад
        for( i = ledsCount - 2; i >= 0; i-- )
        { blink ( ledPin[i] ); }
    }

    void blink(int pin)
    {
        digitalWrite ( pin, HIGH );
        delay ( 50 );
        digitalWrite ( pin, LOW );
    }
     
    acos, SerRay и Megakoteyka нравится это.
  6. SerRay

    SerRay Нерд

    Спасибо большое, ребят!
     
  7. acos

    acos Официальный гик Администратор

    Лаконичненько)