Arduino ile ETS2 için araba göstergesi yapmaya çalışıyorum. Bir kaynak buldum tüm bağlantılar doğru kodlar aynı ama çalışmıyor.
Acaba klon kullandığım için olabilir mi?
Kod kısmı aşağıdaki gibi.
#include <Servo.h>
#include <LiquidCrystal.h>
const int SPEEDO_PIN = A0;
const int RPM_PIN = A1;
const int FUEL_PIN = A2;
const int TEMP_PIN = A3;
const int BRAKEAIR_PIN = A4;
const int CRUSE_PIN = A5;
const int LEFT_INDICATOR = 6;
const int RIGHT_INDICATOR = 7;
const int PARKING_LIGHT = 8;
const int PARKING_BREAK = 9;
const int LOW_BEAM = 10;
const int HIGH_BEAM = 13;
String FREN_ISISI;
String YAG_BASINC;
String YAG_ISISI;
String VOLTAJ;
String VITES;
String MESAJ;
String CRUSE;
String ARACHIZ;
String VITESIKAZ;
String FREN_ISISI_OLD;
String YAG_BASINC_OLD;
String YAG_ISISI_OLD;
String VOLTAJ_OLD;
String VITES_OLD;
String MESAJ_OLD;
String CRUSE_OLD;
String ARACHIZ_OLD;
String VITESIKAZ_OLD;
int motor_int = 0;
int eletirik_int = 0;
int gosterim = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//LiquidCrystal (RS, E, D4, D5, D6, D7)
// defines servo names
Servo speedo;
Servo rpm;
Servo fuel;
Servo cruise;
Servo temp;
Servo brakeair;
Servo braketemp;
Servo yagbasinc;
Servo yagisisi;
Servo voltaj;
byte customChar[8] = {
0b00000,
0b00000,
0b01010,
0b11111,
0b10001,
0b10001,
0b11111,
0b00000
};
byte yag1Char[8] = {
0b00000,
0b00011,
0b11111,
0b10111,
0b10111,
0b11110,
0b00000,
0b00000
};
byte yag2Char[8] = {
0b00000,
0b11000,
0b11110,
0b11001,
0b10000,
0b00001,
0b00000,
0b00000
};
byte brake1Char[8] = {
0b00000,
0b00001,
0b01011,
0b10111,
0b10111,
0b01011,
0b00001,
0b00000
};
byte brake2Char[8] = {
0b00000,
0b10000,
0b11010,
0b11101,
0b11101,
0b11010,
0b10000,
0b00000
};
byte vitesChar[8] = {
0b00000,
0b10101,
0b10101,
0b11111,
0b11111,
0b10100,
0b10100,
0b00000
};
byte okChar[8] = {
0b00100,
0b01110,
0b10101,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100
};
#define PACKET_SYNC 0xFF
#define PACKET_VER 2
#define SERVO_DIR_NORMAL false
#define SERVO_DIR_INVERT true
int serial_byte;
void setup()
{
Serial.begin(115200);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("> GUVEN KARTAL <");
lcd.setCursor(0, 1);
lcd.print("ETS2 DASH PROJEC");
speedo.attach(SPEEDO_PIN);
speedo.write(180);
rpm.attach(RPM_PIN);
rpm.write(180);
fuel.attach(FUEL_PIN);
fuel.write(40);
cruise.attach(CRUSE_PIN);
cruise.write(180);
temp.attach(TEMP_PIN);
temp.write(40);
brakeair.attach(BRAKEAIR_PIN);
brakeair.write(40);
braketemp.write(40);
yagbasinc.write(40);
yagisisi.write(40);
voltaj.write(40);
pinMode(LEFT_INDICATOR, OUTPUT);
pinMode(RIGHT_INDICATOR, OUTPUT);
pinMode(PARKING_BREAK, OUTPUT);
pinMode(LOW_BEAM, OUTPUT);
pinMode(HIGH_BEAM, OUTPUT);
pinMode(PARKING_LIGHT, OUTPUT);
digitalWrite(LEFT_INDICATOR, 0);
digitalWrite(RIGHT_INDICATOR, 0);
digitalWrite(PARKING_BREAK, 0);
digitalWrite(LOW_BEAM, 0);
digitalWrite(HIGH_BEAM, 0);
digitalWrite(PARKING_LIGHT, 0);
delay(500);
speedo.write(0);
rpm.write(0);
fuel.write(0);
temp.write(0);
cruise.write(0);
brakeair.write(0);
digitalWrite(LEFT_INDICATOR, 1);
digitalWrite(RIGHT_INDICATOR, 1);
digitalWrite(PARKING_BREAK, 1);
digitalWrite(LOW_BEAM, 1);
digitalWrite(HIGH_BEAM, 1);
digitalWrite(PARKING_LIGHT, 1);
delay(1500);
for (int i = 0; i <= 180; i++) {
speedo.write(i);
//rpm.write(i);
delay(5);
}
for (int i = 0; i <= 100; i++) {
//fuel.write(i);
temp.write(i);
//cruise.write(i);
//brakeair.write(i);
delay(5);
}
for (int i = 0; i <= 100; i++) {
fuel.write(i);
//temp.write(i);
//cruise.write(i);
//brakeair.write(i);
delay(5);
}
for (int i = 0; i <= 180; i++) {
//speedo.write(i);
rpm.write(i);
delay(5);
}
speedo.attach(SPEEDO_PIN);
speedo.write(180);
rpm.attach(RPM_PIN);
rpm.write(180);
fuel.attach(FUEL_PIN);
fuel.write(100);
cruise.attach(CRUSE_PIN);
cruise.write(180);
temp.attach(TEMP_PIN);
temp.write(100);
brakeair.attach(BRAKEAIR_PIN);
brakeair.write(100);
braketemp.write(100);
yagbasinc.write(100);
yagisisi.write(100);
voltaj.write(100);
digitalWrite(LEFT_INDICATOR, 0);
digitalWrite(RIGHT_INDICATOR, 0);
digitalWrite(PARKING_BREAK, 0);
digitalWrite(LOW_BEAM, 0);
digitalWrite(HIGH_BEAM, 0);
digitalWrite(PARKING_LIGHT, 0);
delay(1000);
lcd.createChar(0, customChar);
lcd.createChar(1, yag1Char);
lcd.createChar(2, yag2Char);
lcd.createChar(3, brake1Char);
lcd.createChar(4, brake2Char);
lcd.createChar(5, vitesChar);
lcd.createChar(6, okChar);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(12,0);
lcd.write((uint8_t)0);
lcd.setCursor(14,0);
lcd.print("48");
lcd.setCursor(0,0);
lcd.write((uint8_t)1);
lcd.setCursor(1,0);
lcd.write((uint8_t)2);
lcd.setCursor(3,0);
lcd.print("20/80");
lcd.setCursor(0,1);
lcd.write((uint8_t)3);
lcd.setCursor(1,1);
lcd.write((uint8_t)4);
lcd.setCursor(3,1);
lcd.print("92");
lcd.setCursor(12,1);
lcd.write((uint8_t)5);
lcd.setCursor(14,1);
lcd.write(uint8_t(6));
lcd.setCursor(15,1);
lcd.print("N");
}
void read_serial_byte_set_servo(Servo& servo, bool invert)
{
serial_byte = Serial.read();
serial_byte = (serial_byte < 0) ? 0 : ((serial_byte > 180) ? 180 : serial_byte);
if (invert)
servo.write(180 - serial_byte);
else
servo.write(serial_byte);
}
void read_serial_byte_set_servo_fuel(Servo& servo, bool invert)
{
serial_byte = Serial.read();
serial_byte = (serial_byte < 0) ? 0 : ((serial_byte > 180) ? 180 : serial_byte);
if (invert)
servo.write(100 - serial_byte); //set lower than the tach and speedo to limit movement.
else
servo.write(serial_byte);
}
void read_serial_byte_set_servo_cruise(Servo& servo, bool invert)
{
serial_byte = Serial.read();
serial_byte = (serial_byte < 0) ? 0 : ((serial_byte > 180) ? 180 : serial_byte);
if (invert)
servo.write(100 - serial_byte); //set lower than the tach and speedo to limit movement.
else
servo.write(serial_byte);
}
void read_serial_byte_set_servo_temp(Servo& servo, bool invert)
{
serial_byte = Serial.read();
serial_byte = (serial_byte < 0) ? 0 : ((serial_byte > 180) ? 180 : serial_byte);
if (invert)
servo.write(100 - serial_byte); //set lower than the tach and speedo to limit movement.
else
servo.write(serial_byte);
}
void read_serial_byte_set_servo_brakeair(Servo& servo, bool invert)
{
serial_byte = Serial.read();
serial_byte = (serial_byte < 0) ? 0 : ((serial_byte > 180) ? 180 : serial_byte);
if (invert)
servo.write(100 - serial_byte); //set lower than the tach and speedo to limit movement.
else
servo.write(serial_byte);
}
void skip_serial_byte()
{
(void)Serial.read();
}
void digitalWriteFromBit(int port, int value, int shift)
{
digitalWrite(port, (value >> shift) & 0x01);
}
void digitalWriteFromMotor(int value, int shift)
{
if((value >> shift) & 0x01)
{
motor_int = 1;
}
else
{
motor_int = 0;
}
}
void digitalWriteFromElektrik(int value, int shift)
{
if((value >> shift) & 0x01)
{
eletirik_int = 1;
}
else
{
eletirik_int = 0;
}
}
void digitalWriteFromLCD(int value, int shift, String message)
{
if((value >> shift) & 0x01)
{
MESAJ = message;
}
else
{
MESAJ = "";
}
}
void loop()
{
if (Serial.available() < 16)
return;
serial_byte = Serial.read();
if (serial_byte != PACKET_SYNC)
return;
serial_byte = Serial.read();
if (serial_byte != PACKET_VER)
{
// lcd.clear();
// lcd.print("PROTOCOL VERSION ERROR");
return;
}
read_serial_byte_set_servo(speedo, SERVO_DIR_INVERT); // Speed
read_serial_byte_set_servo(rpm, SERVO_DIR_INVERT); // RPM
read_serial_byte_set_servo_fuel(brakeair, SERVO_DIR_INVERT); // Brake air pressure
read_serial_byte_set_servo(braketemp, SERVO_DIR_INVERT); // Brake temperature
read_serial_byte_set_servo_fuel(fuel, SERVO_DIR_INVERT); // Fuel ratio
read_serial_byte_set_servo_fuel(yagbasinc, SERVO_DIR_INVERT); // Oil pressure
read_serial_byte_set_servo(yagisisi, SERVO_DIR_INVERT); // Oil temperature
read_serial_byte_set_servo_temp(temp, SERVO_DIR_INVERT); // Water temperature
read_serial_byte_set_servo(voltaj, SERVO_DIR_INVERT); // Battery voltage
read_serial_byte_set_servo_cruise(cruise, SERVO_DIR_INVERT); // cruise speed, set to trip a light
if (rpm.read() < 180 && rpm.read() > 90)
{
VITESIKAZ = "";
}
else
{
VITESIKAZ = "A";
}
if (cruise.read() < 180)
{
if(cruise.read() == 172) {CRUSE = "30";}
if(cruise.read() == 171) {CRUSE = "35";}
if(cruise.read() == 169) {CRUSE = "40";}
if(cruise.read() == 168) {CRUSE = "45";}
if(cruise.read() == 167) {CRUSE = "50";}
if(cruise.read() == 165) {CRUSE = "55";}
if(cruise.read() == 164) {CRUSE = "60";}
if(cruise.read() == 162) {CRUSE = "65";}
if(cruise.read() == 161) {CRUSE = "70";}
if(cruise.read() == 160) {CRUSE = "75";}
if(cruise.read() == 158) {CRUSE = "80";}
if(cruise.read() == 157) {CRUSE = "85";}
if(cruise.read() == 155) {CRUSE = "90";}
if(cruise.read() == 154) {CRUSE = "95";}
if(cruise.read() == 153) {CRUSE = "100";}
if(cruise.read() == 151) {CRUSE = "105";}
if(cruise.read() == 150) {CRUSE = "110";}
if(cruise.read() == 149) {CRUSE = "115";}
if(cruise.read() == 147) {CRUSE = "120";}
if(cruise.read() == 146) {CRUSE = "125";}
if(cruise.read() == 144) {CRUSE = "130";}
if(cruise.read() == 143) {CRUSE = "135";}
if(cruise.read() == 142) {CRUSE = "140";}
if(cruise.read() == 140) {CRUSE = "145";}
if(cruise.read() == 139) {CRUSE = "150";}
if(cruise.read() == 137) {CRUSE = "155";}
if(cruise.read() == 136) {CRUSE = "160";}
if(cruise.read() == 135) {CRUSE = "165";}
if(cruise.read() == 133) {CRUSE = "170";}
if(cruise.read() == 132) {CRUSE = "175";}
if(cruise.read() == 130) {CRUSE = "180";}
if(cruise.read() == 129) {CRUSE = "185";}
if(cruise.read() == 128) {CRUSE = "190";}
if(cruise.read() == 127) {CRUSE = "195";}
if(cruise.read() == 126) {CRUSE = "200";}
}
else
{
CRUSE = "";
}
if (braketemp.read() < 180)
{
FREN_ISISI = 180 - braketemp.read();
}
if (yagbasinc.read() < 180)
{
YAG_BASINC = 180 - yagbasinc.read();
}
if (yagisisi.read() < 180)
{
YAG_ISISI = 180 - yagisisi.read();
}
if (voltaj.read() < 180)
{
VOLTAJ = voltaj.read();
}
if (speedo.read() < 180)
{
ARACHIZ = round((180 - speedo.read()) * 1.1);
}
// Truck lights byte
serial_byte = Serial.read();
digitalWriteFromBit(PARKING_LIGHT, serial_byte, 6);
digitalWriteFromBit(LEFT_INDICATOR, serial_byte, 5);
digitalWriteFromBit(RIGHT_INDICATOR, serial_byte, 4);
digitalWriteFromBit(LOW_BEAM, serial_byte, 3);
digitalWriteFromBit(HIGH_BEAM, serial_byte, 2);
// Warning lights bytes
MESAJ = "";
serial_byte = Serial.read();
digitalWriteFromBit(PARKING_BREAK, serial_byte, 7);
digitalWriteFromLCD(serial_byte, 0,"MOTOR COK SICAK");
digitalWriteFromLCD(serial_byte, 1,"YAG BASNC AZALDI");
digitalWriteFromLCD(serial_byte, 2,"AKU VOLTAJ DUSUK");
digitalWriteFromLCD(serial_byte, 3," ! YAKIT AZ ! ");
digitalWriteFromLCD(serial_byte, 4," DİKKAT HAVA AZ ");
digitalWriteFromLCD(serial_byte, 5,"FREN HAVA DUSUK");
digitalWriteFromLCD(serial_byte, 6," MOTOR FRENI ! ");
digitalWriteFromLCD(serial_byte, 7,"EL FRENI CEKILI");
// Enabled flags
serial_byte = Serial.read();
digitalWriteFromMotor(serial_byte,0);
digitalWriteFromElektrik(serial_byte,1);
if(motor_int == 1 && gosterim == 0)//motor çalışıyor ise
{
lcd.setCursor(0, 0);
lcd.print(" HOS GELDINIZ ");
lcd.setCursor(0, 1);
lcd.print("MOTOR CALISIYOR");
delay(3000);
gosterim += 1;
}
if(eletirik_int == 1 && gosterim <= 1)//elektirik açıkise
{
lcd.setCursor(0, 0);
lcd.print(" <> ");
lcd.setCursor(0, 1);
lcd.print(" ");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" <<>> ");
lcd.setCursor(0, 1);
lcd.print(" <> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" <<<>>> ");
lcd.setCursor(0, 1);
lcd.print(" <<>> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" <<<<>>>> ");
lcd.setCursor(0, 1);
lcd.print(" <<<>>> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" <<<< >>>> ");
lcd.setCursor(0, 1);
lcd.print(" <<<<>>>> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" <<<< >>>> ");
lcd.setCursor(0, 1);
lcd.print(" <<<< >>>> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" <<<< >>>> ");
lcd.setCursor(0, 1);
lcd.print(" <<<< >>>> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print("<<<< >>>>");
lcd.setCursor(0, 1);
lcd.print(" <<<< >>>> ");
delay(200);
lcd.setCursor(0, 0);
lcd.print("<<< >>>");
lcd.setCursor(0, 1);
lcd.print("<<<< >>>>");
delay(200);
lcd.setCursor(0, 0);
lcd.print("<< >>");
lcd.setCursor(0, 1);
lcd.print("<<< >>>");
delay(200);
lcd.setCursor(0, 0);
lcd.print("< >");
lcd.setCursor(0, 1);
lcd.print("<< >>");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("< >");
delay(200);
lcd.setCursor(0, 0);
lcd.print("----------------");
lcd.setCursor(0, 1);
lcd.print("----------------");
delay(200);
lcd.setCursor(0, 0);
lcd.print(" HOS GELDINIZ ");
lcd.setCursor(0, 1);
lcd.print("! KEMERINI TAK !");
lcd.setCursor(0, 0);
lcd.print(" HOS GELDINIZ ");
lcd.setCursor(0, 1);
lcd.print(" ELEKTIRIK ACIK ");
delay(3000);
gosterim += 1;
}
// Text length
int text_len = Serial.read();
// Followed by text
if (0 < text_len && text_len < 127)
{
for (int i = 0; i < text_len; ++i)
{
while (Serial.available() == 0) // Wait for data if slow
{
delay(2);
}
serial_byte = Serial.read();
if (serial_byte == 'a')
{
VITES = "1";
}
else if (serial_byte == 'b')
{
VITES = "2";
}
else if (serial_byte == 'c')
{
VITES = "3";
}
else if (serial_byte == 'd')
{
VITES = "4";
}
else if (serial_byte == 'e')
{
VITES = "5";
}
else if (serial_byte == 'f')
{
VITES = "6";
}
else if (serial_byte == 'g')
{
VITES = "7";
}
else if (serial_byte == 'h')
{
VITES = "8";
}
else if (serial_byte == 'i')
{
VITES = "9";
}
else if (serial_byte == 'j')
{
VITES = "10";
}
else if (serial_byte == 'k')
{
VITES = "11";
}
else if (serial_byte == 'l')
{
VITES = "12";
}
else if (serial_byte == 'm')
{
VITES = "13";
}
else if (serial_byte == 'n')
{
VITES = "14";
}
else if (serial_byte == 'o')
{
VITES = "15";
}
else if (serial_byte == 'p')
{
VITES = "16";
}
else if (serial_byte == 'q')
{
VITES = "17";
}
else if (serial_byte == 'r')
{
VITES = "18";
}
else if (serial_byte == 's')
{
VITES = "R1";
}
else if (serial_byte == 't')
{
VITES = "R2";
}
else if (serial_byte == 'u')
{
VITES = "R3";
}
else if (serial_byte == 'v')
{
VITES = "R4";
}
else if (serial_byte == 'w')
{
VITES = "N";
}
}
}
if(FREN_ISISI_OLD != FREN_ISISI || YAG_BASINC_OLD != YAG_BASINC || YAG_ISISI_OLD != YAG_ISISI || VOLTAJ_OLD != VOLTAJ || VITES_OLD != VITES || MESAJ_OLD != MESAJ || CRUSE_OLD != CRUSE || ARACHIZ_OLD != ARACHIZ || VITESIKAZ_OLD != VITESIKAZ)
{
lcd.clear();
if(MESAJ == "")
{
if (CRUSE != "")
{
lcd.setCursor(0, 0);
lcd.print("HIZ SABITLEYICI");
lcd.setCursor(0, 1);
lcd.print("Sec:" + CRUSE + " Hiz" + ARACHIZ);
if(VITESIKAZ == "A")
{
lcd.setCursor(14,1);
lcd.write(byte(5));
}
lcd.setCursor(15,1);
lcd.print(VITES);
}
else
{
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(12,0);
lcd.write((uint8_t)0);
lcd.setCursor(14,0);
lcd.print(VOLTAJ);
lcd.setCursor(0,0);
lcd.write((uint8_t)1);
lcd.setCursor(1,0);
lcd.write((uint8_t)2);
lcd.setCursor(3,0);
lcd.print(YAG_BASINC + "/" + YAG_ISISI);
lcd.setCursor(0,1);
lcd.write((uint8_t)3);
lcd.setCursor(1,1);
lcd.write((uint8_t)4);
lcd.setCursor(3,1);
lcd.print(FREN_ISISI);
lcd.setCursor(12,1);
lcd.write((uint8_t)5);
if(VITESIKAZ == "A")
{
lcd.setCursor(14,1);
lcd.write(uint8_t(6));
}
lcd.setCursor(15,1);
lcd.print(VITES);
}
}
else
{
lcd.setCursor(0, 0);
lcd.print("! ONEMLI UYARI !");
lcd.setCursor(0, 1);
lcd.print(MESAJ);
}
FREN_ISISI_OLD = FREN_ISISI;
YAG_BASINC_OLD = YAG_BASINC;
YAG_ISISI_OLD = YAG_ISISI;
VOLTAJ_OLD = VOLTAJ;
VITES_OLD = VITES;
MESAJ_OLD = MESAJ;
CRUSE_OLD = CRUSE;
ARACHIZ_OLD = ARACHIZ;
VITESIKAZ_OLD = VITESIKAZ;
}
}