Olaa estou iniciando no arduino e com isso algumas dificuldades.

Estou com essa programação para acionar um led e após um delay ele desligar e so acionar novamento após o comando, acontece que o led acende mas não apaga. Alguem poderia corrigir o que esta errado?

int led = 13;
int armazena;

void setup (){
Serial.begin(9600);
pinMode ( led,OUTPUT);
}
void loop (){
if (Serial.available ()){;
armazena=Serial.read();
Serial.print(armazena);
}
if (armazena == 49){
digitalWrite (led,HIGH);
delay (2000);
digitalWrite (led,LOW);
}
}

Exibições: 365

Responder esta

Respostas a este tópico

cara na verdade ele ta APAGANDO SIM so que o tempo é tão curto que vc n percebe ai da impressão dele ta ligado direto.

O pro ai é o loop da grangrena do arduino (rsssss)

como ele sempre vai ta com um valor (49) ai ele sempre ta entrando no IF de novo, bom é por ai...

   if(armazena == 49){
      digitalWrite (led, HIGH);
      delay (2000);
      digitalWrite (led, LOW);
      armazena = 0;
    }

Obrigado Amigo.

deu certo.

Abraços

Boa noite.... di uma olhadinha no seu codigo e acredito ter achado o problema, quando a envia ou recebe dados via serial vc precisa ter em conta que tipo de dado vc deseja enviar ou recever, no seu caso entendi que vc quer enviar um valor decimal (49) para ligar a tua saida no port 13, mais vc armazena esse valor como numero enteiro, e ahi o problema... te envio o codigo onde transformo o valor decimal em enteiro, espero que te seja de ajuda....

int led = 13;
int armazena=0;
int aux=0;
int cont=0;

void setup ()
{
    Serial.begin(9600);
    pinMode (led,OUTPUT);

    digitalWrite(led, LOW);
}

void loop ()
{
    if (Serial.available()>0)
    {
        armazena = Serial.read();
        cont++;
        if (cont==1)  // obtem a casa decimal das dezenas
          {
            aux = (aux+(armazena-48))*10;
            armazena=0;
          }
        if (cont==2) // obtem a unidade
          {
            armazena = (aux+(armazena-48)); //pq? 48----> ascii(48)= 0 decimal
            cont=0;aux=0;
            Serial.println(armazena);
          }
    }
    if (armazena == 49)
    {
        digitalWrite (led,HIGH);
        delay (2000);
        digitalWrite (led,LOW);
        armazena=0;
    }
}

/*

Outro caso que pode dar certo seria: empilhar 2 bits dentro de uma String e comparar o dado armazenado do tipo String com "49" entre aspas, te envio outro codigo a seguir, espero ter te ajudado

*/

String armazena = "";
int led = 13;

void setup ()
{
    Serial.begin(9600);
    pinMode (led,OUTPUT);
    digitalWrite(13,LOW);
}

void loop ()
{
    while(Serial.available())
    {
      char c = Serial.read();
      armazena += c;
    }
    if (armazena == "49")
    {
       digitalWrite (led,HIGH);
       delay (2000);
       digitalWrite (led,LOW);
    }
    if (armazena.length()>=2)
    {
        Serial.println(armazena);
        armazena="";
    }
}

Na verdade ele n quer ENVIAR 49, o numero 49 seria correspondente ao teclado numerico 1 "UM", Ele so quer apertar uma tecla saber que ela foi acionada e rodar o programa...

Abraço.

Obrigado fernando o que o Renyer comentou procede, mas sua ajuda foi bem válida.

Obrigado

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço