É a coisa mais simples de fazer no arduino, mas não estou conseguindo fazer os leds piscarem no meio desses códigos:

#define led1 5
#define led2 6
#define led3 7

char leitura;

void setup() {
Serial.begin (9600);
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);

Serial.println ("Digite algo");


}

void loop() {
if (Serial.available ()>0) {
leitura=Serial.read();
Serial.print ("Tecla digitada :");
Serial.println (leitura);
if (leitura=='L'|| leitura=='l'){
digitalWrite(led1, HIGH);}

if (leitura=='H'|| leitura=='h'){
digitalWrite(led2, HIGH);}
if (leitura=='Q'|| leitura=='q'){
digitalWrite(led3, HIGH);}

if (leitura=='X'|| leitura=='x'){ // <------------------ Aqui
digitalWrite(led3, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led3, LOW);
digitalWrite(led2, LOW);
digitalWrite(led1, LOW);
delay(1000);
}
if (leitura=='F'|| leitura=='f'){
digitalWrite(led3,LOW);
digitalWrite(led2,LOW);
digitalWrite(led1,LOW);}
}
}

Quero acender cada led individualmente, mas quando apertar o "X", todos os 3 pisquem. Eu coloquei um delay ali de 1 segundo, então ele liga, passa um segundo, desliga e não acontece mais nada. Queria que ficasse piscando até eu desligá-lo.

O programa na verdade é bem maior e eu estava usando o switch case, pensei que não continuava por causa do "break" mas mudei agora pro if e não dá certo.

Sou iniciante nisso.
Obg desde já.

Exibições: 1476

Responder esta

Respostas a este tópico

Mari,

https://www.youtube.com/watch?v=e3UOgfn5-_k&feature=youtu.be

Acho que é só deletar uma parte do código. Tente com isso:

#define led1 5
#define led2 6
#define led3 7

 char leitura;

 void setup() {
 Serial.begin (9600);
 pinMode (led1, OUTPUT);
 pinMode (led2, OUTPUT);
 pinMode (led3, OUTPUT);

 Serial.println ("Digite algo");


 }

 void loop() {
 if (Serial.available ()>0) {
 leitura=Serial.read();
 Serial.print ("Tecla digitada :");
 Serial.println (leitura);
 if (leitura=='L'|| leitura=='l'){
 digitalWrite(led1, HIGH);}

 if (leitura=='H'|| leitura=='h'){
 digitalWrite(led2, HIGH);}
 if (leitura=='Q'|| leitura=='q'){
 digitalWrite(led3, HIGH);}

 if (leitura=='X'|| leitura=='x'){ // <------------------ Aqui
 digitalWrite(led3, HIGH);
 digitalWrite(led2, HIGH);
 digitalWrite(led1, HIGH);
 delay(1000);

 }
 if (leitura=='F'|| leitura=='f'){
 digitalWrite(led3,LOW);
 digitalWrite(led2,LOW);
 digitalWrite(led1,LOW);}
 }
 }

Olá Carlos, 

Os 3 leds teriam que ficar piscando sem precisar apertar o F para desligar. 

As letras L, H e Q acendem eles individualmente, o F desliga todos (ainda vou colocar letras para desligar cada um), e o X deixam eles oscilando sozinho, infinitamente, até serem desligados pelo F. 

Mari desculpa, acho que entendi mal, você quer que os leds pisquem, é isso?

Abs.

Exato. 

Tou tentando aqui e não consigo. 

Mari, sua lógica falha no seguinte aspecto: os leds só são comandados tanto para acendimento quanto para desligamento mediante um comando digitado. Do jeito que vc fez, vc precisará ficar digitando contantemente as teclas, pois a cada loop, a variável "leitura" é zerada e ficará  aguardando um novo pressionamento de tecla. É por isso que não funciona. Repare que as condicionais  IF  que vc construiu usam a variável "leitura". Não pode! 

Vc precisará manter guardada numa variável a última tecla pressionada e construir um novo grupo de condicionais IF para executar as ações desejadas de acordo com aquilo que foi pressionado

// Mari analisando sua pergunta cheguei a seguinte conclusão:

// nesse caso abaixo você tanto ativa quanto desativa o piscar com a letra 'X' ou 'x'

// Para tirar dúvidas olha esse exemplo: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

#define led1 5
#define led2 6
#define led3 7

char leitura;
boolean pisca = false;

long intervalo = 1000;
long millisAnterior = 0;

void setup() {
  Serial.begin (9600);
  pinMode (led1, OUTPUT);
  pinMode (led2, OUTPUT);
  pinMode (led3, OUTPUT);

  Serial.println ("Digite algo");

}

void loop() {

  unsigned long millisAtual = millis();

  if (Serial.available ()>0) {
    leitura=Serial.read();
    Serial.print ("Tecla digitada :");
    Serial.println (leitura);
    if (leitura=='L'|| leitura=='l'){
      digitalWrite(led1, HIGH);
    }

    if (leitura=='H'|| leitura=='h'){
      digitalWrite(led2, HIGH);
    }
    if (leitura=='Q'|| leitura=='q'){
      digitalWrite(led3, HIGH);
    }

    if (leitura=='X'|| leitura=='x'){ // <------------------ Aqui
      // verifica em que estado a váriavel booleana está
      if(pisca) {

        // se estiver ativada então vai desativar o piscar e desligar todos
        pisca = false;
        digitalWrite(led3,LOW);
        digitalWrite(led2,LOW);
        digitalWrite(led1,LOW);
      
      } else {

        // se estiver desativada vai iniciar a sequencia de piscar os leds sem atrasar seu código
        pisca = true;
      }
      
    }
    if (leitura=='F'|| leitura=='f'){

      pisca = false;  // aqui tbm  rsrs
      digitalWrite(led3,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led1,LOW);
    }
  }



  if(millisAtual - millisAnterior > intervalo) {

    millisAnterior = millisAtual;  


    if(pisca) {
      
      digitalWrite(led1, !digitalRead(led1));
      digitalWrite(led2, !digitalRead(led2));
      digitalWrite(led3, !digitalRead(led3));
    }

  }
}

Deu certo!!!

Muito Obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço