collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Ligar leds por porta serie no arduino  (Lida 2986 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline iMartins87

  • Mini Robot
  • *
  • Mensagens: 39
Ligar leds por porta serie no arduino
« em: 26 de Fevereiro de 2011, 14:18 »
Olá pessoal,

Hoje voltei a pegar no arduino, e comecei por fazer um pequeno programa em WPF C# que comunica com o arduino pela porta serie.
A aplicação contem dois botões e consoante os click nos botões envia a valores para o Arduino.

Com um só botão e com o seguinte código no arduino, tudo funciona bem.

Citar
const int ledPin = 13;
int luzon = 0;

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

void loop(){
  
if (Serial.available())
{
if(Serial.read()==48) //0
{luzon = 0;}
else
{luzon=1;}
}

if(luzon == 0)
{digitalWrite(ledPin, LOW);}
else
{digitalWrite(ledPin, HIGH);}
 
}


Mas, de forma a aumentar o numero de led's fiz este codigo que não consegue ligar nenhum dos led's.

Citar
const int ledPin = 13;
const int ledPin2 = 12;
int luzon = 0;
int luzon2 = 0;
 
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(9600);
}

void loop(){

if (Serial.available())
{
if(Serial.read()==48) //0
{ luzon = 0; }
else if (Serial.read()==49) //1
{ luzon = 1; }
else if (Serial.read()==50) //2
{ luzon2 = 0; }
else if (Serial.read()==51) //3
{ luzon2 = 1; }
else
{ luzon = 0; luzon2 = 0;}
}

if(luzon == 0)
digitalWrite(ledPin, LOW); }
else if (luzon == 1)
digitalWrite(ledPin, HIGH); }
else if (luzon2 == 0)
digitalWrite(ledPin2, LOW); }
else if (luzon2 == 1)
digitalWrite(ledPin2, HIGH); }
else
digitalWrite(ledPin, LOW);
  digitalWrite(ledPin2, LOW);}
  
}


Alguém me pode ajudar e explicar o que estou a fazer mal?

Cumprimentos

Offline GnGz

  • Mini Robot
  • *
  • Mensagens: 665
Re: Ligar leds por porta serie no arduino
« Responder #1 em: 26 de Fevereiro de 2011, 15:22 »
No primeiro exemplo sem enviares qualquer numero menos 0 ele fica em high e se enviares 0 ele não fica a low...

Para o segundo vê isto:
Citar
const int ledPin = 13;
const int ledPin2 = 12;
int luzon = 0;

 
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(9600);
}

void loop(){

if (Serial.available() > 0)// Alteração n1
{
luzon = Serial.read();
}

if(luzon == '0')
{ digitalWrite(ledPin, LOW); }
else if (luzon == '1')
{ digitalWrite(ledPin, HIGH); }
else if (luzon == '2')
{ digitalWrite(ledPin2, LOW); }
else if (luzon == '3')
{ digitalWrite(ledPin2, HIGH); }

  // Limpei codigo!
}


E se quiseres receber o estado dos portos por serial:
Citar
const int ledPin = 13;
const int ledPin2 = 12;
int luzon = 0;

 
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(9600);
}

void loop(){

if (Serial.available() > 0)// Alteração n1
{
luzon = Serial.read();
}

if(luzon == '0')
digitalWrite(ledPin, LOW);
Serial.println("Pino 13 a Low");}
else if (luzon == '1')
digitalWrite(ledPin, HIGH);
Serial.println("Pino 13 a High");}
else if (luzon == '2')
digitalWrite(ledPin2, LOW);
Serial.println("Pino 12 a Low");}
else if (luzon == '3')
digitalWrite(ledPin2, HIGH);
Serial.println("Pino 12 a High");}

  // Limpei codigo!
}


« Última modificação: 26 de Fevereiro de 2011, 15:32 por GnGz »

Offline iMartins87

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar leds por porta serie no arduino
« Responder #2 em: 26 de Fevereiro de 2011, 16:39 »
Obrigado pelo esclarecimento.
Já esta a funcionar correctamente.

Cumprimentos

Offline GnGz

  • Mini Robot
  • *
  • Mensagens: 665
Re: Ligar leds por porta serie no arduino
« Responder #3 em: 26 de Fevereiro de 2011, 16:41 »
De nada , mais duvidas não hesites?

:)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Ligar leds por porta serie no arduino
« Responder #4 em: 27 de Fevereiro de 2011, 00:47 »
Obrigado pelo esclarecimento.
Já esta a funcionar correctamente.

E percebeste exactamente pq é que não funcionava?

Offline iMartins87

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar leds por porta serie no arduino
« Responder #5 em: 27 de Fevereiro de 2011, 02:12 »
E percebeste exactamente pq é que não funcionava?

Eu penso que sim, em primeiro lugar eu deveria atribuir o valor lido na porta serie a uma variável, e o erro mais grave no meu codigo era a cadeia de "else if" com variáveis diferentes, ou seja, eu tinha isto:

Citar
if(luzon == 0)
{ digitalWrite(ledPin, LOW); }
else if (luzon == 1)
{ digitalWrite(ledPin, HIGH); }
else if (luzon2 == 0)
{ digitalWrite(ledPin2, LOW); }
else if (luzon2 == 1)
{ digitalWrite(ledPin2, HIGH); }
else
{ digitalWrite(ledPin, LOW);
  digitalWrite(ledPin2, LOW);}


e neste caso ele nunca iria passar do primeiro "else if" porque aquela variável só podia ter dois valores, 0 ou 1, e isso são uma das duas primeiras condições.

Para o código que eu tinha ficar correcto teria de ser corrigido e ficar da seguinte forma:

Citar
const int ledPin = 13;
const int ledPin2 = 12;
int luzon = 0;
int luzon2 = 0;
int valor_serial_read;
 
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(9600);
}

void loop(){

if (Serial.available())
{
valor_serial_read = Serial.read();

if(valor_serial_read ==48) //0
{ luzon = 0; }
else if (valor_serial_read ==49) //1
{ luzon = 1; }
else if (valor_serial_read ==50) //2
{ luzon2 = 0; }
else if (valor_serial_read ==51) //3
{ luzon2 = 1; }
}

if(luzon == 0)
{ digitalWrite(ledPin, LOW); }
else if (luzon == 1)
{ digitalWrite(ledPin, HIGH); }

if (luzon2 == 0)
{ digitalWrite(ledPin2, LOW); }
else if (luzon2 == 1)
{ digitalWrite(ledPin2, HIGH); }
 
}


Mas o código que o GnGz fez está bem mais simples.
Corrigiam me se disse alguma coisa mal, quererá dizer que não fiquei a perceber o erro!

Cumprimentos