Мой светодиод быстро мигает при перезагрузке и мгновенно перестает мигать.

Итак, я пытался создать программу для проверки правильности работы контактов, но все, что она делает, это заставляет мой светодиод быстро мигать при перезагрузке. смысл программы в том, что все мои пины подключены к одному и тому же светодиоду, поэтому моргайте каждым из них один раз и отправляйте в серийник номер мигающего пина. но светодиод просто не мигает и программа зависает при запуске pwmoutputtest.


boolean byteinarray(byte array[], byte pbit){
  for(int i=0; i<6; i++){
    if(array[i]==pbit){
      return true;
    }
  }
  return false;
}

void outputtest(){
  for(byte i=2;i<13;i++) {
    pinMode(i, OUTPUT);
  }

  for(byte i=2;i<14;i++){
    if (byteinarray(pwm, i)==false){
      Serial.println(i);
      digitalWrite(i, HIGH);
      delay(1000);
      digitalWrite(i, LOW);
      delay(1000);
    }
  }
}

void analogoutputtest(){
  for(byte i=0;i<5;i++) {
    pinMode("A"+i, OUTPUT);
  }

  for(int i=A0;i<A5;i++){
    Serial.println(i);
    digitalWrite(i, HIGH);
    delay(1000);
    digitalWrite(i, LOW);
    delay(1000);
  } 
}


void pwmoutputtest (){
  for(int i=0; i<6; i++) {
    pinMode(pwm[i], OUTPUT);
  }

  for(int i=0; i<6; i++) {
    Serial.println(pwm[i]);
    for(int j=0; i<200; i++){
      analogWrite(pwm[i], j);
      delay(5);
    }
    analogWrite(pwm[i], 0);
  }
}



void setup() {
  Serial.begin(9600);
}

void loop() {
  outputtest();
  pwmoutputtest();
}```

, 👍1


1 ответ


1

Вы соединили все контакты вместе. Затем вы одновременно устанавливаете один контакт ВЫСОКИЙ (5 В), в то время как все остальные НИЗКИЕ (0 В, или земля).

По сути, вы создаете короткую позицию каждый раз, когда устанавливаете вывод ВЫСОКИЙ. Ток не будет течь через светодиод на землю (что могло бы зажечь светодиод), но ток течет через контакты, которые имеют НИЗКИЙ уровень, на землю. А поскольку вы не упомянули какие-либо токоограничивающие резисторы, вы сильно нагружаете аппаратные средства вывода контактов. Если вы сделаете это слишком часто, в какой-то момент аппаратное обеспечение вывода выйдет из строя, что сделает вывод непригодным для цифрового ввода-вывода.

Вместо того, чтобы поддерживать НИЗКИЙ уровень других контактов, вам необходимо поддерживать на них высокий импеданс, что означает настройку их как ВХОД. Это будет такая функция (не проверялась):

void outputtest(){
  for(byte i=2;i<13;i++) {
    pinMode(i, INPUT);
  }

  for(byte i=2;i<14;i++){
    if (byteinarray(pwm, i)==false){
      Serial.println(i);
      pinMode(i, OUTPUT);
      digitalWrite(i, HIGH);
      delay(1000);
      digitalWrite(i, LOW);
      pinMode(i, INPUT);
      delay(1000);
    }
  }
}
,

тысм, надеюсь, я ничего не сломал, @Lucas

@Lucas Если вы считаете, что это ответило на ваш вопрос, вы можете принять мой ответ, чтобы отметить свой вопрос как решенный., @chrisl