@Brenli

Не происходит выключение светодиода на 6 пине. Что не так в моем скетче?

При каждом нажатии кнопки зажигается светодиод на соответствующем пине.
Как только счетчик led_counter достигает значение 9, его значение устанавливается = 4 и при кахдом нажатии кнопки
включенные светодиоды поочередно выключаются, но этого не происходит на пине 6.
Инверсия состояния светодиода реализована digitalWrite(led_counter, !digitalRead(led_counter)); , но почему то значение digitalRead(led_counter) на 6 пине при включенном светодиоде равно = 0 и при инверсии он остается включенным.
Вопрос к знатокам. Что не так?

boolean but1     = 0;
boolean led_flag = 0;
boolean flag     = 0;
unsigned long last_press;

byte led_counter = 4;

void setup() {
   pinMode(A5,INPUT_PULLUP);
   pinMode(4,OUTPUT);
   pinMode(5,OUTPUT);
   pinMode(6,OUTPUT);
   pinMode(7,OUTPUT);
   pinMode(8,OUTPUT);
   pinMode(9,OUTPUT);


   digitalWrite(4,0);
   digitalWrite(5,0);
   digitalWrite(6,0);
   digitalWrite(7,0);
   digitalWrite(8,0);
   digitalWrite(9,0);
   
   Serial.begin(9600);
}

void loop() {
  boolean but1 = !digitalRead(A5);
  if (but1==1 && flag==0 && millis()-last_press > 50){
    flag = !flag;
    Serial.println("Button pressed");
    last_press = millis();
  }

  if (but1==0 && flag==1){
    flag = !flag;
    //Serial.println("Button released"+ String(led_counter));
    led_flag = !led_flag;
    digitalWrite(led_counter, !digitalRead(led_counter));
    led_counter++;
    if(led_counter>9) led_counter = 4;
  }
}
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 2
@deliro
Ты пытаешься прочитать значение пина в OUTPUT моде.
Ответ написан
nava2002
@nava2002
Инженер
digitalWrite(led_counter, !digitalRead(led_counter));

Это конструкция несколько спорная.
Я бы так сделал:

led = !led ;
digitalWrite ( led_counter, led );

И на каждом проходе состояние будет меняться на противоположное.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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