LusoRobótica - Robótica em Português
Robótica => Iniciantes => Tópico iniciado por: TheDeadLives em 16 de Agosto de 2011, 15:52
-
Boas a todos, começei a desenvolver um projecto (ainda não está acabado) de um carro controlado por arduino com farois e piscas, o meu 2º projecto.
Tenho desenvolvido o código, só fiz ainda um bocado, não muito, mas tenho encontrado uns problemas, que não consegui resolver porque ainda sou muito novato nisto do arduino:
Para os piscas continuarem a piscar durante tempo ilimitado com delays o código teria que ser infinito:
int Piscafrentedireito = 13;
int Piscafrenteesquerdo = 12;
int Piscatraseirodireito = 11;
int Piscatraseiroesquerdo = 10;
int incomingByte;
void setup() {
pinMode(Piscafrentedireito, OUTPUT);
pinMode(Piscafrenteesquerdo, OUTPUT);
pinMode(Piscatraseirodireito, OUTPUT);
pinMode(Piscatraseiroesquerdo, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == 'q') {
digitalWrite(Piscafrentedireito, HIGH);
digitalWrite(Piscatraseirodireito, HIGH);
}
if (incomingByte == 'w') {
digitalWrite(Piscafrentedireito, LOW);
digitalWrite(Piscatraseirodireito, LOW);
}
if (incomingByte == 't') {
digitalWrite(Piscafrentedireito, LOW);
digitalWrite(Piscatraseirodireito, LOW);
digitalWrite(Piscatraseiroesquerdo, LOW);
digitalWrite(Piscafrenteesquerdo, LOW);
}
if (incomingByte == 'e') {
digitalWrite(Piscatraseiroesquerdo, HIGH);
digitalWrite(Piscafrenteesquerdo, HIGH);
delay(500);
digitalWrite(Piscatraseiroesquerdo, LOW);
digitalWrite(Piscafrenteesquerdo, LOW);
delay(500);
digitalWrite(Piscatraseiroesquerdo, HIGH);
digitalWrite(Piscafrenteesquerdo, HIGH); //só um exemplo para não ficar infinito
}
if (incomingByte == 'r') {
digitalWrite(Piscafrenteesquerdo, LOW);
digitalWrite(Piscatraseiroesquerdo, LOW);
}
}
}
Tentei várias formas que me ocorreram, mas fracassei em todas.
Se me pudessem ajudar ficaria muito agradecidol.
-
Aconselho-te a veres as funções while() e do..while() no reference do arduino..servem exactamente para essas situações de fazer uma acção repetidamente..eu acho que seria melhor fazeres um função que lê-se da porta série, por exemplo,
int readS()
{
int incomingByte;
if(Serial.available()>0)
{
incomingByte = Serial.read();
}
return incomingByte;
}
, para testares nas condições do while ou do do..while() pq com if's fica complicado depois saires do ciclo infinito..
-
Para os piscas o melhor é veres o exemplo blinky without delay, que te permite ter acções temporizadas sem recorrer a delays.
-
Para os piscas o melhor é veres o exemplo blinky without delay, que te permite ter acções temporizadas sem recorrer a delays.
Pois, mas é que se eu utilizar isso, não consigo fazer com o incomingByte, não é verdade? Eu já tentei e não consegui introduzir para quando carregar 'e' ele fazer isso, começa logo a fazer
-
Consegues sim, é tudo uma questão de programação, é só adicionar um if.
-
e adiciono-o aonde? Poderia por no programa que mostrei atrás e mostrar-me sff??
Agradecido