i'm making an rc car with bluetooth and a distance sensor, but i don't think the bluetooth is the issue here. it just stops working. like, it'd be in the middle of printing my distance or something and then just stop. Anyone got any idea as to why? maybe it ran out of memory?
code:
//bluetooth
#include <SoftwareSerial.h>
const byte rx = 2;
const byte tx = 3;
int array[9];
int order = 0;
SoftwareSerial mySerial(rx, tx);
//car
int in1 = 4;
int in2 = 5;
int in3 = 6;
int in4 = 7;
int reverse_right = 8;
int reverse_left = 9;
int pinker_right = 10;
int pinker_left = 11;
int head_left = 12;
int head_right = 13;
//distance
int echo = A0;
int trig = A1;
float duration, distance;
unsigned long clock = 0;
int backingUp = 0;
void LedOff(){
for(int i = 8; i < 14; i++){
digitalWrite(i, LOW);
}
}
void setup(){
//bluetooth setup
mySerial.begin(9600);
Serial.begin(9600);
pinMode(rx, INPUT);
pinMode(tx, OUTPUT);
//car setup
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(reverse_right, OUTPUT);
pinMode(reverse_left, OUTPUT);
pinMode(pinker_right, OUTPUT);
pinMode(pinker_left, OUTPUT);
pinMode(head_left, OUTPUT);
pinMode(head_right, OUTPUT);
//distance setup
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
void loop()
{
if(millis() - clock >= 200 && mySerial.available() == 0){
clock = millis();
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH, 50000);
distance = (duration*.0343)/2;
Serial.println(distance);
if(distance <= 12 && backingUp == 0){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
digitalWrite(reverse_right, HIGH);
digitalWrite(reverse_left, HIGH);
backingUp = 1;
}
if(distance > 12 && backingUp == 1){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
LedOff();
backingUp = 0;
}
}
if(mySerial.available() > 0){
//fill array with messages
array[order]=mySerial.read();
order++;
//print array and execute command based on message
if(order == 8){
order = 0;
for(int i = 0; i <= 8; i++){
Serial.print(array[i]);
}
Serial.println("");
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH, 50000);
distance = (duration*.0343)/2;
Serial.println(distance);
delay(100);
if(array[6]==1 && distance >=12){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
digitalWrite(head_left, HIGH);
digitalWrite(head_right, HIGH);
Serial.println("forward!");
} else if(array[6]==2){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
digitalWrite(reverse_right, HIGH);
digitalWrite(reverse_left, HIGH);
Serial.println("backward!");
} else if(array[6]==8){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
Serial.println("right!");
digitalWrite(pinker_right, HIGH);
} else if(array[6]==4){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.println("left!");
digitalWrite(pinker_left, HIGH);
} else{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
LedOff();
}
}
}
}