1
resposta

erro em laço for em projeto semaforo no arduino, alguem me ajuda ? :(

estava procurando outras maneiras de fazer um codigo de semaforo, para exercitar, fiz esse, mas na hora que passo para o arduino, o vermelho nao acende, alguem sabe pq ? ja testei o led, e a porta, e estao funcionando normalmente, o problema é no codigo, so n sei qual

int leds[3] = {2,3,4};  // 2=vermelho/ 3= verde/ 4= amarelo
int numeroled;

void setup() {
 int x;
 for(x=0 ; x<=2 ; x = x+1){
 pinMode(leds[x], OUTPUT);
}
}
void loop() {
  for( numeroled = 0; numeroled <= 2; numeroled = numeroled++){
    if(numeroled = 0){                      // vermelho
      digitalWrite(leds[numeroled],HIGH);
      delay(4000);
      digitalWrite(leds[numeroled],LOW);
    }
    if(numeroled = 1){                      // verde
      digitalWrite(leds[numeroled], HIGH);
      delay(4000);
      digitalWrite(leds[numeroled],LOW);
    }
     if(numeroled = 2){                     //amarelo
      digitalWrite(leds[numeroled], HIGH);
      delay(1000);
      digitalWrite(leds[numeroled],LOW);
  }
 }
} 
1 resposta

Oii Ozias, como você está? Espero que esteja bem ^-^

Sinto muito pela demora em obter um retorno.

Analisei o seu código e isso está ocorrendo por dois motivos:

  • Para compararmos um valor devemos utilizar dois sinais de igual. Na condição do if para checar qual led deverá ser aceso, há apenas um sinal de igual (apenas um sinal de igual significa atribuição, ou seja, fazer com que a variável receba um valor). Então, ao invés de escrever da seguinte forma:
if(numeroled = 0)

É necessário alterar para:

if(numeroled == 0)
  • Na sintaxe do laço for, quando incrementamos a variável utilizando a sintaxe "++", não é necessário fazer a atribuição. Onde temos:
numeroled = numeroled++

Precisamos alterar para:

numeroled++

A sintaxe de atribuição no terceiro parâmetro do laço for ocorre apenas se incrementamos "mais um" na variável. Por exemplo:

numeroled = numeroled+1

Vou deixar abaixo um esboço do circuito físico, caso seja necessário fazer alguma checagem:

image

Por fim, o código completo com as correções:

int leds[3] = {2,3,4};  // 2=vermelho/ 3= verde/ 4= amarelo
int numeroled;

void setup() {
 int x;
 for(x=0 ; x<=2 ; x = x+1){
     pinMode(leds[x], OUTPUT);
 }
}


void loop() {
  for( numeroled = 0; numeroled <= 2; numeroled++){
    if(numeroled == 0){                      // vermelho
      digitalWrite(leds[numeroled],HIGH);
      delay(1000);
      digitalWrite(leds[numeroled],LOW);
    }
    if(numeroled == 1){                      // verde
      digitalWrite(leds[numeroled], HIGH);
      delay(1000);
      digitalWrite(leds[numeroled],LOW);
    }
     if(numeroled == 2){                     //amarelo
      digitalWrite(leds[numeroled], HIGH);
      delay(1000);
      digitalWrite(leds[numeroled],LOW);
    }
  }
} 

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!