#include <SoftwareSerial.h>
SoftwareSerial RCCAR(10, 6); //Tx, Rx
//SoftwareSerial RCCAR(1, 0); //Tx, Rx
int latchPin = 11; // (11) ST_CP [RCK] on 74HC595
int clockPin = 9; // (9) SH_CP [SCK] on 74HC595
int dataPin = 12; // (12) DS [S1] on 74HC595
int SirenSound = 13;
int Headlamp = 2;
int StartSound = 8;
int vSpeed =0;
int Motor1a =0;
int Motor1b =0;
int Motor2a =0;
int Motor2b =0;
int enA = 3; // Motor A
int IN1 = 2; // Motor A
int IN2 = 4; // Motor A
int IN3 = 7; // Motor B
int IN4 = 8; // Motor B
int enB = 5; // Motor B
int tDelay = 150;
char menuOption;
//char menuOption = 0;
char ch;
byte leds = 0;
int SirenLight = 0;
int SirenSoundval = 0;
int i=400, f=0; // Variable SirenLight
int Headlampval = 0;
void setup()
{
Serial.begin(9600);
while (!Serial);
Serial.println("start commands");
RCCAR.begin(38400);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(Headlamp, OUTPUT);
pinMode(SirenSound, OUTPUT);
pinMode(StartSound, OUTPUT);
pinMode(enA, OUTPUT); // Motor
pinMode(IN1, OUTPUT); // Motor
pinMode(IN2, OUTPUT); // Motor
pinMode(IN3, OUTPUT); // Motor
pinMode(IN4, OUTPUT); // Motor
pinMode(enB, OUTPUT); // Motor
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void loop()
{
if(Serial.available()>0)
{
menuOption = Serial.read();
ch = menuOption;
Serial.println(menuOption);
}
if(RCCAR.available()>0)
{
delay(10); //Delay added to make thing stable
menuOption = RCCAR.read(); //Conduct a serial read
ch = menuOption;
Serial.println(menuOption);
}
if(menuOption=='b'){ digitalWrite(StartSound, HIGH);}
if(menuOption=='d'){ Headlampval = 1;} // Headlampval 1 - ON
if(menuOption=='e'){ Headlampval = 0;} // Headlampval 1 - OFF
if(Headlampval == 1){ bitSet(leds, 0); updateShiftRegister();} // Headlampval 1 - ON
if(menuOption=='f'){ SirenSoundval=1;} // SirenSound On
if(menuOption=='g'){ noTone(SirenSound);SirenSoundval=0;} // SirenSound OFF
if(menuOption=='k'){ SirenLight=1;} // SirenLight 1
if(menuOption=='l'){ SirenLight=2;} // SirenLight 2
if(menuOption=='m'){ SirenLight=3;} // SirenLight 3
if(menuOption=='n'){ SirenLight=4;} // SirenLight 4
if(menuOption=='o'){ SirenLight=0;} // SirenLight OFF
if(menuOption=='i'){ SpeedMax();} // SpeedMax
if(menuOption=='j'){ SpeedMin();} // SpeedMin
if(menuOption=='x'){ // SpeedUp
vSpeed=vSpeed + 10;
if (vSpeed < 70 ) {vSpeed=70;}
if (vSpeed > 255) {vSpeed=255;} // vmax 255
}
if(menuOption=='y'){ // SpeedDown
if (vSpeed < 70) {vSpeed=0;} // vmin 70
vSpeed=vSpeed - 10;
}
if(menuOption=='p'){ Up();} // Up
if(menuOption=='q'){ UpLeft();} // UpLeft
if(menuOption=='r'){ UpRight();} // UpRight
if(menuOption=='s'){ Left();} // Left
if(menuOption=='t'){ Right();} // Right
if(menuOption=='u'){ DownLeft();} // DownLeft
if(menuOption=='v'){ Down();} // Down
if(menuOption=='w'){ DownRight();} // DownRight
/* digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
// analogWrite(enA, vSpeed);
// analogWrite(enB, vSpeed);
Serial.print("vSpeed ");
Serial.print(vSpeed);
Serial.print("\t");
Serial.print("1a ");
Serial.print(Motor1a);
Serial.print("\t");
Serial.print("1b ");
Serial.print(Motor1b);
Serial.print("\t");
Serial.print("2a ");
Serial.print(Motor2a);
Serial.print("\t");
Serial.print("2b ");
Serial.print(Motor2b);
Serial.println();
*/
// ----------------- SIREN LIGHTS --------------------------------------------------
if (SirenLight==0) // SirenLight OFF
{
leds = 0;
updateShiftRegister();
noTone(SirenSound);SirenSoundval=0;
}
if (SirenLight==1) // SirenLight 1
{
bitSet(leds, 4);
updateShiftRegister();
if(f==0){
if (SirenSoundval==1) {tone(SirenSound, i);}
bitSet(leds,1);
bitSet(leds, 2);
bitSet(leds, 3);
updateShiftRegister();
leds = 0;
delayMicroseconds(500);
i+=2;
}
if(f==1){
if (SirenSoundval==1 ) {tone(SirenSound, i);}
bitSet(leds, 5);
bitSet(leds, 6);
bitSet(leds, 7);
updateShiftRegister();
leds = 0;
delayMicroseconds(500);
i-=2;
}
if(i==1000)
f = 1;
if(i==400)
f = 0;
}
else if (SirenLight==2) // SirenLight 2
{
if(f==0){
if (SirenSoundval==1) {tone(SirenSound, i);}
if(i>=400 && i<= 443) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>444 && i<= 486) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>486 && i<= 529) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7); updateShiftRegister();}
if(i>529 && i<= 572) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>572 && i<= 615) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>615 && i<= 658) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5);updateShiftRegister();}
if(i>658 && i<= 701) { bitSet(leds,4); updateShiftRegister();}
if(i>701 && i<= 744) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>744 && i<= 787) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>787 && i<= 830) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>830 && i<= 873) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7); updateShiftRegister();}
if(i>873 && i<= 916) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>916 && i<= 958) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>958 && i<= 1000) { bitSet(leds,4); updateShiftRegister();}
Serial.println(i);
leds = 0;
delay(7);
i+=2;
}
if(f==1){
if (SirenSoundval==1) {tone(SirenSound, i);}
if(i>959 && i<= 1000) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>916 && i<= 959) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>873 && i<= 916) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7); updateShiftRegister();}
if(i>830 && i<= 873) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7); updateShiftRegister();}
if(i>787 && i<= 830) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>744 && i<= 787) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5);updateShiftRegister();}
if(i>701 && i<= 744) { bitSet(leds,4); updateShiftRegister();}
if(i>658 && i<= 701) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>615 && i<= 658) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>572 && i<= 615) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7); updateShiftRegister();}
if(i>529 && i<= 572) { bitSet(leds,4);bitSet(leds,1); bitSet(leds,7); updateShiftRegister();}
if(i>486 && i<= 529) { bitSet(leds,4);bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>444 && i<= 486) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>=400 && i<= 443) { bitSet(leds,4); updateShiftRegister();}
Serial.println(i);
leds = 0;
delay(7);
i-=2;
}
if(i==1000)
f = 1;
if(i==400)
f = 0;
}
else if (SirenLight==3) // SirenLight 3
{
if(f==0){
if (SirenSoundval==1) {tone(SirenSound, i);}
bitSet(leds,1);
bitSet(leds, 3);
bitSet(leds, 5);
bitSet(leds, 7);
updateShiftRegister();
leds = 0;
delayMicroseconds(500);
i+=2;
}
if(f==1){
if (SirenSoundval==1) {tone(SirenSound, i);}
bitSet(leds, 4);
bitSet(leds, 2);
bitSet(leds, 6);
updateShiftRegister();
leds = 0;
delayMicroseconds(500);
i-=2;
}
if(i==1000)
f = 1;
if(i==400)
f = 0;
}
else if (SirenLight==4) // SirenLight 4
{
if(f==0){
if (SirenSoundval==1) {tone(SirenSound, i);}
if(i>=400 && i<= 443) { bitSet(leds,4); updateShiftRegister();}
if(i>444 && i<= 486) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>486 && i<= 529) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>529 && i<= 572) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>572 && i<= 615) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>615 && i<= 658) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>658 && i<= 701) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>701 && i<= 744) { bitSet(leds,4); updateShiftRegister();}
if(i>744 && i<= 787) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>787 && i<= 830) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>830 && i<= 873) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>873 && i<= 916) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>916 && i<= 959) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>959 && i<= 1000) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
leds = 0;
delay(7);
i+=2;
}
if(f==1){
if (SirenSoundval==1) {tone(SirenSound, i);}
if(i>958 && i<= 1000) { bitSet(leds,4); updateShiftRegister();}
if(i>916 && i<= 958) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>873 && i<= 916) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>830 && i<= 873) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>787 && i<= 830) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>744 && i<= 787) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>701 && i<= 744) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>658 && i<= 701) { bitSet(leds,4); updateShiftRegister();}
if(i>615 && i<= 658) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
if(i>572 && i<= 615) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>529 && i<= 572) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>486 && i<= 529) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); bitSet(leds,1); bitSet(leds,7);updateShiftRegister();}
if(i>444 && i<= 486) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); bitSet(leds,2); bitSet(leds,6); updateShiftRegister();}
if(i>=400 && i<= 443) { bitSet(leds,4);bitSet(leds,3); bitSet(leds,5); updateShiftRegister();}
leds = 0;
delay(7);
i-=2;
}
if(i==1000)
f = 1;
if(i==400)
f = 0;
}
}
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
void SpeedMax() { // SpeedMax
vSpeed = 255;
}
void SpeedMin() { // SpeedMin
vSpeed = 0;
analogWrite(IN1, vSpeed);
analogWrite(IN2, vSpeed);
analogWrite(IN3, vSpeed);
analogWrite(IN4, vSpeed);
}
void Up() { // Up
Motor1a = HIGH;
Motor1b = LOW;
Motor2a = HIGH;
Motor2b = LOW;
}
void UpLeft() {} // UpLeft
void UpRight() {} // UpRight
void Left() { // Left
Motor1a = HIGH;
Motor1b = LOW;
Motor2a = LOW;
Motor2b = HIGH;
}
void Right() { // Right
Motor1a = LOW;
Motor1b = HIGH;
Motor2a = HIGH;
Motor2b = LOW;
}
void DownLeft() {} // DownLeft
void Down() { // Down
Motor1a = LOW;
Motor1b = HIGH;
Motor2a = LOW;
Motor2b = HIGH;
}
void DownRight() {} // DownRight