Hello everyone,
Me and two friends are working on a little project. We want to modify an RC Car so that it can be controlled by a smartphone (with Bluetooth). We are almost entering the final stage of our project, which is connecting the Arduino board to the RC Car.
However, first we've got to make sure the Arduino knows what to do with the data the application sends. We're using a couple of LEDs to do/test that (see image). Everything works, except for the hazard warning lights. For some reason, we can't figure out how to make the front- and backlights blink repeatedly when receiving the right signal.
The smartphone app sends a 'K' when the user presses the hazard warning lights button (on), and a 'k' when the user presses it again (off). What happens, though, is that when I press the hazard warning lights button, they turn on, but as soon as I press the 'drive forward' button, they turn off again.
What we want the case 'K' to do, is to loop the blink code over and over again, until it receives a 'k' to turn it off again.
Thanks in advance!
int ledf = 9; // Drive forward
int ledb = 6; // Drive backward
int ledl = 13; // Turn left
int ledr = 2; // Turn right
int ledfront = 11; // The frontlights
int ledback = 4; // The backlights
//int ledunder = 6; // Underglow
char incomingByte = '0'; // Data the application sends
void setup() {
pinMode(ledf, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(ledl, OUTPUT);
pinMode(ledr, OUTPUT);
pinMode(ledfront, OUTPUT);
pinMode(ledback, OUTPUT);
//pinMode(ledunder, OUTPUT);
pinMode(12, OUTPUT); // GND ledfront
pinMode(10, OUTPUT); //GND ledf
pinMode(7, OUTPUT); // GND ledb
pinMode(5, OUTPUT); // GND ledback
pinMode(3, OUTPUT); // GND ledr
Serial.begin(9600); // baud rate
}
void loop() {
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
digitalWrite(3, LOW);
if (Serial.available() > 0) {
incomingByte = Serial.read(); // read the incoming data
switch (incomingByte) {
case 'a':
digitalWrite(ledf, LOW); // Forward off
digitalWrite(ledb, LOW);
break;
case 'A':
analogWrite(ledf, 45); // Forward low power
digitalWrite(ledb, LOW);
break;
case 'B':
analogWrite(ledf, 150); // Forward medium power
digitalWrite(ledb, LOW);
break;
case 'C':
analogWrite(ledf, 255); // Forward high power
digitalWrite(ledb, LOW);
break;
case 'd':
digitalWrite(ledb, LOW); // Backward off
digitalWrite(ledr, LOW);
break;
case 'D':
analogWrite(ledb, 45); // Backward low power
digitalWrite(ledf, LOW);
break;
case 'E':
analogWrite(ledb, 150); // Backward medium power
digitalWrite(ledf, LOW);
break;
case 'F':
analogWrite(ledb, 255); // Backward high power
digitalWrite(ledf, LOW);
break;
case 'G':
digitalWrite(ledl, HIGH); // Left on
digitalWrite(ledr, LOW);
break;
case 'g':
digitalWrite(ledl, LOW); // Left off
digitalWrite(ledr, LOW);
break;
case 'H':
digitalWrite(ledr, HIGH); // Right on
digitalWrite(ledl, LOW);
break;
case 'h':
digitalWrite(ledr, LOW); // Right off
digitalWrite(ledl, LOW);
break;
case 'I':
digitalWrite(ledfront, HIGH); // Frontlights on
break;
case 'i':
digitalWrite(ledfront, LOW); // Frontlights off
break;
case 'J':
digitalWrite(ledback, HIGH); // Backlights on
break;
case 'j':
digitalWrite(ledback, LOW); // Backlights off
break;
case 'K':
do {
digitalWrite(ledfront, HIGH);
digitalWrite(ledback, HIGH);
delay(500);
digitalWrite(ledfront, LOW);
digitalWrite(ledback, LOW);
delay(500);
}while(incomingByte != 'k');
break;
case 'k':
digitalWrite(ledfront, LOW);
digitalWrite(ledback, LOW);
break;
/*case 'L':
digitalWrite(ledunder, HIGH);
break;
case 'l':
digitalWrite(ledunder, LOW);
break;*/
}
}
}
For more images: Imgur: The magic of the Internet