@Shapck

После сброса не загорается первый светодиод, почему?

Здравствуйте! Подключено 8 светодиодов, каждый загорается через 1 секунду. При нажатии на кнопку они гасятся и загораются заново, все кроме первого, почему?
код:
int led[] = {3,4,5,6,7,8,9,10};
int c=0;

void on(int pin){
digitalWrite(pin, HIGH);
}
void off(int pin){
digitalWrite(pin, LOW);
}
void setup(){
pinMode(2, INPUT);
attachInterrupt(0, button, RISING);
for(c=0; c<sizeof(led); c++){
pinMode(led[c], OUTPUT);
}
  
}
void loop(){
for(c=0; c<sizeof(led); c++){
on(led[c]);
delay(1000);
}
  
}
void button(){
for(c=0; c<sizeof(led); c++){
off(led[c]);
}
c=0; 
}
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
DuMOHsmol
@DuMOHsmol
void loop(){
for(c=0; c<sizeof(led); c++){
on(led[c]);
delay(1000);
}


Дело вот в этом участке кода. Когда вызывается прерывание, главный цикл loop останавливается, а затем продолжается с того момента, где он остановился. С очень большой вероятностью цикл будет прерван в моменте delay(1000), соответственно, переменная "c" станет нулем именно в этом участке. А затем, после выполнения задержки, сразу сработает увеличение на единицу и получится, что первый светодиод не будет зажжён.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы