Arduino Mega LED не светится должным образом
Я написал это для своего Arduino Mega 2560:
int LED[14] = { 28,29,30,31,32,33,34,35,36,37,38,39,40,41 } ;
...
... (some other code like setup(), etc. Note:pinmode output for this 14 leds wich pins is defined in
... array named LED[]
...
void intro(){
for(int j=1; j<100; j++ ){
for(int r=1; r<15; r++ ){ digitalWrite(LED[r],HIGH); delay(100); }
delay(100);
for(int r=1; r<15; r++ ){digitalWrite(LED[r],LOW); delay(100);}
delay(100);
}
Serial.print("Pattern started");
delay(1000);
}
Поэтому, когда я запускаю этот скрипт, я ожидаю, что каждый светодиод загорится в последовательности и будет гореть до тех пор, пока второй цикл не выключит его, но я вижу, что при включении каждого светодиода, при включении 9-го светодиода, первый 8 светодиодов выключаются по необъяснимым причинам, а светодиоды с 9 по 14 загораются один за другим, продолжая гореть. Этого я и ожидал, но почему первые 8 светодиодов отключаются до того, как заканчивается цикл и начинается второй цикл?
@ArduinoSergio, 👍0
Обсуждение2 ответа
ваши операторы for с r=1 должны быть изменены на r=0;r<14. Массивы всегда начинаются с первого элемента, равного 0, поэтому у вас от 0 до 13.
и как это вызывает описанное поведение кода?, @Juraj
Несмотря на то, что ваша петля неверна, ошибка кодирования вряд ли вызовет описанное вами поведение.
Пожалуйста, убедитесь, что токоограничивающий резистор включен последовательно с каждым светодиодом. Поскольку у вас 14 светодиодов, вам понадобится 14 токоограничивающих резисторов. Для этой цели должны подойти резисторы на 470 Ом (или аналогичные).
Согласно другим комментариям, массивы С++ начинаются с 0, а не с 1. Последний элемент равен размеру массива минус 1. В вашем случае 14 - 1 = 13. Таким образом, цикл может продолжаться до тех пор, пока индекс < 14 (или <= 13)
Таким образом, ваши циклы должны выглядеть так:
for(int r=0; r<14; r++ ) {
digitalWrite(LED[r],HIGH);
delay(100);
}
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
возможно, вы перегружаете контакты данных, @jsotola
для (int r = 0; r < 14; r++)
. первый индекс равен нулю, а размер массива равен 14, @Juraj