Доброго всем. Я новичок в этом деле пока что мигаю светодиодом . В общем с примерами по типу Blink ту практически разобрались . Но вопрос встал с бегущим огоньком. Тут вопросов нет прогоняем его туда и обратно . Захотелось мне это все дело разделить .Что бы светодиоды загорались из центра и к центру . Долго искал пример с трудом нашел. И вот тут возник скажем вопрос . Потому что на ESP8266 светодиоды горит только половина . И от центра , и к центру . А вторая половина нет . Я этот пример собрал в эмуляторе на ардуино и там все в порядке. Я понимаю что это моя ошибка только где и как . Потому что на ардуино это работает на ESP8266 только на половину . Код (C++): int led[] {2,4,5,22,23,21}; // пины подключения светодиодов int pin_led =sizeof(led)/sizeof(int); // длинна массиваа void setup() { for (int i = 0; i < pin_led; i++) // цикл pinMode(i, OUTPUT); // пины как выходы } void loop() { int half = pin_led/2; // делим пополам for (int j = 0; j < half; j++) { int k = pin_led-j-1; digitalWrite(j, HIGH); //зажигание следующего светодиода digitalWrite(k, HIGH); //зажигание следующего светодиода delay(300); //задержка 300мсек digitalWrite(k, LOW); //гасим все светодиоды digitalWrite(j, LOW); //гасим все светодиоды } }
Таких пинов нет . Это я с эмулятора на ESP32 свой код взял . Но суть думаю таже . Просто опытным путем выяснил что пины в массиве надо перечислять в порядке подключения светодиодов. И дело в том что пополам то делит но работает тока одна половина . Просто бегущий работает https://wokwi.com/projects/337919766573351507
Если ты, друже, будешь с такими ошибками такой фигней лезть на форум - ничему не научишься. Измени код так, и смотри его в эмуляторе. И попробуй сам понять в чем дело. Это простая логика. Код (C++): int led[] {2,4,5,22,23,21}; // пины подключения светодиодов int pin_led =sizeof(led)/sizeof(int); // длинна массиваа void setup() { Serial.begin(115200); for (int i = 0; i < pin_led; i++) // цикл pinMode(i, OUTPUT); // пины как выходы } void loop() { int half = pin_led/2; // делим пополам for (int j = 0; j < half; j++) { int k = pin_led-j-1; Serial.println("==================="); Serial.print("j is "); Serial.println(j); digitalWrite(j, HIGH); //зажигание следующего светодиода Serial.print("k is "); Serial.println(k); digitalWrite(k, HIGH); //зажигание следующего светодиода delay(1000); //задержка 1сек Serial.print("j is "); Serial.println(j); digitalWrite(k, LOW); //гасим все светодиоды Serial.print("k is "); Serial.println(k); digitalWrite(j, LOW); //гасим все светодиоды delay(10000); //задержка 10сек } } Установи задержку в 5 или 10 секунд, если в одну мало.
А на ардуино есть? Там ИМХО всего 19 ? И потом Вы писали про esp8266 И еще вопрос—а какой пин должен загореться если 5 делить на 2? Или 23 или 21? Почему именно они? Других нет?
Ну, смотри, горемыка. Так все мигает: А в ардуино работало, видимо, потому что массив был от 1 до 6 или что-то типа. Плюс инициация пинов - там тоже ошибка.
Всем спасибо . Что достали из замкнутого круга . Я не особо то по форумам . По скольку до этого как то находил ответы и решались вопросы . Поэтому наверное и объяснить не могу толком . Просто после очередной пайки и перепайки своего гитарного усилка , и очередной автомагнитолы . Решил что в хобби надо сделать шаг вперед . И этот шаг заставил зарегистрироваться на форуме и спросить . Ладно всем спасибо – добра в ваш дом .
Таки не понял что сей код делает. И где в Ардуино пины 21,22,23? Загрузил в настоящую Ардуину ибо не люблю резиновых женщин симуляторов ибо они всегда симулируют. Вот что выдало в порт. Три порта работают а три нет. Все как и писал ТС
Этожеж esp32. В ее и грузить надо. А дальше - см. фото что я показал. 1. Товарищ ТС инициализирует не элементы массива ног, а цифери, что частично совпадают с ногами, частично - нет 2. А потом дёргает цифры, а не ноги массива. Потому половина у него мявкает (что случайно совпала и случайно прошла инициализацию), половина - нет. Вообще такие совпадения могут зело удивлять новобранца.