LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: kerwac em 29 de Novembro de 2014, 18:43
-
Estou a fazer um programa em java em que tenho que acender um led verde ou led vermelho. Ao clicar num programa no botão verde ou vermelho o led acende.
Não consigo fazer o código para os dois leds. Para um já consegui fazer, alguém me ajuda a finalizar o código para os dois?
Obrigado
Para um led:
int ledPin = 4; //atribui o pino 4 a variável ledPin
int dado; //variável que receberá os dados da porta serial
void setup(){
Serial.begin(9600);//frequência da porta serial
pinMode(ledPin,OUTPUT); //define o pino o ledPin como saída
}
void loop(){
if(Serial.available() > 0){ //verifica se existe comunicação com a porta serial
dado = Serial.read();//lê os dados da porta serial
switch(dado){
case 1:
digitalWrite(ledPin,HIGH); //liga o pino ledPin
break;
case 2:
digitalWrite(ledPin,LOW); //desliga o pino ledPin
break;
}
}
}
-
É arduino, logo é C++, e não Java..
Depois, quando escreves 1 num terminal o que é enviado é a representação do caracter 1 em ASCII, que no caso do caractér 1 é o valor 0x31 ( ou decimal 49).
Se queres usar case 1 e case 2 tens de subtrair 48 ao valor recebido, ou simplesmente assim subtraindo o valor do caracter ascii 0 para ficares com uma gama de valores de 0 a 9 e não de 48 a 57.
dado = Serial.read() - '0';//lê os dados da porta serial
-
Peço desculpa se não me fiz entender...
O programa que já fiz está feito em java e está a comunicar com o arduino.
O código que eu fiz para o arduino funciona com um led só. Neste caso eu queria ter 2 leds e no programa em java ter 2 botões independentes para ligar cada um deles. Para um led já funciona.
Mas não estou a conseguir fazer o código para os dois leds em c++, mas em java já tenho o código feito .
-
Não entendo como é que pode haver duvidas, é só replicar o código que já tens.
Se sabes usar um led, tambem sabes usar dois, declaras mais uma variavel para o pino do outro led e usas mais dois cases.
-
O senso..... pois eu tb imaginei ser fácil... consegues dar me uma ajuda?
int ledPin = 4; //atribui o pino 4 a variável ledPin
int ledPin = 3;
int dado; //variável que receberá os dados da porta serial
void setup(){
Serial.begin(9600);//frequência da porta serial
pinMode(ledPin,OUTPUT); //define o pino o ledPin como saída
}
void loop(){
if(Serial.available() > 0){ //verifica se existe comunicação com a porta serial
dado = Serial.read();//lê os dados da porta serial
switch(dado){
case 1:
digitalWrite(ledPin4,HIGH); //liga o pino ledPin
break;
case 2:
digitalWrite(ledPin4,LOW); //desliga o pino ledPin
break;
case 3:
digitalWrite(ledPin3,HIGH); //liga o pino ledPin
break;
case 4:
digitalWrite(ledPin3,LOW); //desliga o pino ledPin
break;
}
}
}
-
É o que eu fiz mas dá erro.... dai o meu pedido de ajuda senso
-
Podias ser um bocadito mais explicito nos teus posts...
Dá erro, mas está nublado e a bola de cristal tambem dá erro.
Mas que erro é que dá?
Não compila?
Não funciona?
Aparecem unicórnios?
Mais conteudo, mais informação!
-
Senso já está. Penso que assim está correcto certo?
int ledPin4 = 4; //atribui o pino 4 a variável ledPin
int ledPin3 = 3;
int dado; //variável que receberá os dados da porta serial
void setup(){
Serial.begin(9600);//frequência da porta serial
pinMode(ledPin4,OUTPUT); //define o pino o ledPin como saída
pinMode(ledPin3,OUTPUT);
}
void loop(){
if(Serial.available() > 0){ //verifica se existe comunicação com a porta serial
dado = Serial.read();//lê os dados da porta serial
switch(dado){
case 1:
digitalWrite(ledPin4,HIGH); //liga o pino ledPin
break;
case 2:
digitalWrite(ledPin4,LOW); //desliga o pino ledPin
break;
case 3:
digitalWrite(ledPin3,HIGH); //liga o pino ledPin
break;
case 4:
digitalWrite(ledPin3,LOW); //desliga o pino ledPin
break;
}
}
}
Obrigado
-
Pronto isto nao vai servir de nada mas como deste conta se declares duas variaveis com o mesmo nome e lhes deres valores diferentes dá asneira bem como se tens duas saidas tens que declarar dois outputs ;)