#include <Stepper.h>
#include <Servo.h>
Stepper stepper(48, 24, 23, 22, 25);
Servo fuelservo;
Servo turboservo;
int rpm;
int i;
int leds;
int Speed;
int fuel;
int fuelled;
int Turbo;
int gear;
int previous_potion = 0;
int rotate;
char kind_of_data;
void setup(){
Serial.begin(9600);
stepper.setSpeed(300);
fuelservo.attach(2);
turboservo.attach(3);
pinMode(3, OUTPUT);
pinMode(8, OUTPUT);
//****************************** Set LCD ******************************
Serial.print(0xFE, BYTE);
Serial.print("B");
Serial.print(9); //
Serial.print(0xFE, BYTE);
Serial.print("Z");
Serial.print(0xFE, BYTE);
Serial.print("L");
Serial.print("01");
Serial.print("01");
Serial.print("Speed :");
Serial.print(0xFE, BYTE);
Serial.print("L");
Serial.print("02");
Serial.print("01");
Serial.print("Gear :");
}
void loop()
{
//****************************** READ DATA FROM SERIAL ******************************
while(Serial.available() > 0)
{
kind_of_data = Serial.read();
if (kind_of_data == 'R' ) Read_Rpm();
if (kind_of_data == 'S' ) Read_Speed();
//if (kind_of_data == 'F' ) Read_Fuel();
//if (kind_of_data == 'T' ) Read_Turbo();
if (kind_of_data == 'G' ) Read_Gear();
}
//****************************** READ DATA FROM SERIAL END ******************************
}
void Read_Rpm(){
delay(2);
int Rpm100 = Serial.read()- '0';
delay(2);
int Rpm10 = Serial.read()- '0';
delay(2);
int Rpm1 = Serial.read()- '0';
int rpm = 100Rpm100 + 10Rpm10 + Rpm1;
rpm = map(rpm,127,255,0,45);
if (rpm >=42) digitalWrite(3,HIGH);
rotate = rpm - previous_potion;
stepper.step(rotate);
previous_potion = rpm;
if (rpm <42) digitalWrite(3,LOW);
for(i=38; i<=leds ; i++)digitalWrite(i,LOW);
for(leds=38; leds<=(rpm+7); leds++)digitalWrite(leds,HIGH);
}
void Read_Speed(){
delay(2);
int Speed100 = Serial.read()- '0';
delay(2);
int Speed10 = Serial.read()- '0';
delay(2);
int Speed1 = Serial.read()- '0';
Speed = 100Speed100 + 10Speed10 + Speed1;
Speed = map(Speed,127,255,0,200);
tone(12, map(Speed,0,200,0,950));
Serial.print(0xFE, BYTE);
Serial.print("L");
Serial.print("01");
Serial.print("09");
Serial.print(Speed);
Serial.print(" ");
}
void Read_Fuel(){
delay(2);
int Fuel100 = Serial.read()- '0';
delay(2);
int Fuel10 = Serial.read()- '0';
delay(2);
int Fuel1 = Serial.read()- '0';
fuel = 100Fuel100 + 10Fuel10 + Fuel1;
fuelled = map(fuel,127,255,0,100);
fuel = map(fuel,127,255,60,130);
fuelservo.write(fuel);
if (fuelled <= 4)digitalWrite(51,HIGH);
if (fuelled > 4)digitalWrite(51,LOW);
}
void Read_Turbo(){
delay(2);
int turbo100 = Serial.read()- '0';
delay(2);
int turbo10 = Serial.read()- '0';
delay(2);
int turbo1 = Serial.read()- '0';
Turbo = 100turbo100 + 10turbo10 + turbo1;
Turbo = map(Turbo,127,255,10,100);
turboservo.write(Turbo);
}
void Read_Gear(){
delay(2);
int Gear100 = Serial.read()- '0';
delay(2);
int Gear10 = Serial.read()- '0';
delay(2);
int Gear1 = Serial.read()- '0';
gear = 100* Gear100 + 10*Gear10 + Gear1;
gear = map(gear,127,255,0,8);
Serial.print(0xFE, BYTE);
Serial.print("L");
Serial.print("02");
Serial.print("09");
if ( (gear != 0) && (gear != 1) ) Serial.print(gear-1);
if ( gear == 0 ) Serial.print("R");
if ( gear == 1 ) Serial.print("N");
digitalWrite(30,LOW);
digitalWrite(31,LOW);
digitalWrite(37,LOW);
digitalWrite(35,LOW);
digitalWrite(34,LOW);
digitalWrite(33,LOW);
digitalWrite(32,LOW);
if ( gear == 0 ){
digitalWrite(35,HIGH);
digitalWrite(37,HIGH);
}
if ( gear == 1 ){
digitalWrite(30,HIGH);
digitalWrite(35,HIGH);
digitalWrite(37,HIGH);
}
if ( gear == 2 ){
digitalWrite(30,HIGH);
digitalWrite(31,HIGH);
}
if ( gear == 3 ){
digitalWrite(33,HIGH);
digitalWrite(31,HIGH);
digitalWrite(37,HIGH);
digitalWrite(35,HIGH);
digitalWrite(34,HIGH);
}
if ( gear == 4 ){
digitalWrite(30,HIGH);
digitalWrite(31,HIGH);
digitalWrite(37,HIGH);
digitalWrite(33,HIGH);
digitalWrite(34,HIGH);
}
if ( gear == 5 ){
digitalWrite(32,HIGH);
digitalWrite(37,HIGH);
digitalWrite(30,HIGH);
digitalWrite(31,HIGH);
}
if ( gear == 6 ){
digitalWrite(33,HIGH);
digitalWrite(32,HIGH);
digitalWrite(37,HIGH);
digitalWrite(30,HIGH);
digitalWrite(34,HIGH);
}
if ( gear == 7 ){
digitalWrite(35,HIGH);
digitalWrite(30,HIGH);
digitalWrite(34,HIGH);
digitalWrite(32,HIGH);
digitalWrite(37,HIGH);
digitalWrite(33,HIGH);
}
}