Hey!
I seem to be having a problem with the compiler. Or not. Hopefully you guys can help me.
I'm trying to read a value from a Ping ultrasonic sensor when serial is available and if the value is over 120 - print 'd' to serial and turn on a relay. At this point, the Arduino should wait to read 'f' from the serial port and turn off the relay.
When I compile and upload the code, it appears to wait for me to type 'f' first, then run the start of the code...
Here's my code:
int incomingByte = 0; // for incoming serial data
const int pingPin = 9; // Ping sensor pin.
int relay = 3; // Relay pin.
void setup()
{
Serial.begin(9600);
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
}
void loop()
{
if (Serial.available() > 0) {
long duration, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
cm = microsecondsToCentimeters(duration); //Conversion for Ping
delay(50);
if (cm <= 120){
Serial.print("d");
digitalWrite(relay, LOW);
incomingByte = Serial.read();
if (incomingByte == 111){ // Off (o)
digitalWrite(relay, HIGH);
} else if (incomingByte == 102){ //On (f)
digitalWrite(relay, LOW);
}
}
}
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}
Also, how can I make it so that when I send 'o' through serial, it'll run what's in the "off" if statement without checking the Ping?
Thanks for your help if you can! I really appreciate it!!!