Stap 3: CODE voor het uploaden van de ARDUINO
Hieronder is de code die ik voor dit gebruikte!
Ik kreeg de meeste van deze uit.
omvatten de bibliotheek-code:
#include
Verklaren van seriële lezen variabelen int CmdCount = 1; byte inData; char inChar; BuildINString koord = ""; DisplayString koord = ""; lange DisplayValue; SentMessage koord = ""; int ByteCount = 0; lange A; int B; int WorkingVal; WorkingString koord = ""; int RefreshCounter = 0; Wanneer de lezing moet vernieuwen int RefreshCounterMax = 50; Passen deze vernieuwingsfrequentie int RESETMenuName = 0;
MenuAnalogVal int x; Verklaren van knoppen int MenuID = 0; int UpDownMenu = 0;
initialiseren van de bibliotheek met de nummers van de pennen van de interface LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
VOID Setup {/ / de LCD's aantal kolommen en rijen instellen: lcd.begin (16, 2); / / Print een boodschap aan de lcd.setCursor LCD. (0, 0); ««(Schoen); //Simulate Bootup proces hoeft niet te worden hier dit alleen maakt het kijken koel Retry: lcd.setCursor (0, 0); LCD.Print ("verbinden... "); lcd.setCursor (0, 1); LCD.Print(""); Serial.begin(38400); delay(500); Verzend een testbericht te zien als de ELM327 Chip SentMessage reageert = "ATI"; Serial.println("ATI");delay(500); ReadData(); Als (BuildINString.substring(0,1)=="elm327") {lcd.setCursor (0, 0); lcd.print ("welkom... "); lcd.setCursor (0, 1); LCD.Print ("verbinding OK"); delay(1500); DisplayString = "Lezing Data..."; }
delay(1500); }
void loop {RefreshCounter ++;
x = analogRead (0); Serial.println(x); lcd.setCursor(10,1); Als (x > 800 en x < 820){lcd.print ("selecteren");} Als (x > 620 en x < 630) {als (MenuID > 0) {MenuID--;} DisplayString = "lezing Data...";delay(250);} Linker als (x > 400 en x < 415) {als (UpDownMenu < 3) {UpDownMenu ++;} delay(250); RESETMenuName = 0;} DOWN als (x > 190 en x < 215) {als (UpDownMenu > 0) {UpDownMenu--;} delay(250); RESETMenuName = 0;} Als (x >-10 en x < 10) {als (MenuID < 13) {MenuID ++;} DisplayString = "lezing Data...";delay(250);} Rechts
Als (UpDownMenu == 0) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("Engine Readings"); lcd.setCursor (0, 1);lcd.print(""); delay(2000); RESETMenuName = 1;} Als (MenuID==0){lcd.setCursor (0, 0);lcd.print ('01 koelvloeistof Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage =" 01 05 "; Serial.println ("01 05");delay(50); ReadData() ;}} Als (MenuID==1){lcd.setCursor (0, 0);lcd.print ('02 IAT Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage ="01 0F"; Serial.println ("01 0F");delay(50); ReadData() ;}} Als (MenuID==2){lcd.setCursor (0, 0);lcd.print ('03 Ambient Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage =" 01 46 "; Serial.println ("01 46");delay(50); ReadData() ;}} Als (MenuID==3){lcd.setCursor (0, 0);lcd.print ("04 Throttle %"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 11"; Serial.println ("01 11");delay(50); ReadData() ;}} Als (MenuID==4){lcd.setCursor (0, 0);lcd.print ("05 kat 1 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 3 c"; Serial.println ("01 3C");delay(50); ReadData() ;}} Als (MenuID==5){lcd.setCursor (0, 0);lcd.print ("06 CAT 2 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 3D"; Serial.println ("01 3D");delay(50); ReadData() ;}} Als (MenuID==6){lcd.setCursor (0, 0);lcd.print ("07 kat 3 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 3E"; Serial.println ("01 3E");delay(50); ReadData() ;}} Als (MenuID==7){lcd.setCursor (0, 0);lcd.print ("08 kat 4 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 3F"; Serial.println ("01 3F");delay(50); ReadData() ;}} Als (MenuID==8){lcd.setCursor (0, 0);lcd.print ("09 RPM"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 0C"; Serial.println ("01 0C");delay(50); ReadData() ;}} Als (MenuID==9){lcd.setCursor (0, 0);lcd.print ("10 voertuigsnelheid"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 0D"; Serial.println ("01 0D");delay(50); ReadData() ;}} Als (MenuID==10){lcd.setCursor (0, 0);lcd.print ("11 Air Flow Rate"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 10"; Serial.println ("01 10");delay(50); ReadData() ;}} Als (MenuID==11){lcd.setCursor (0, 0);lcd.print ("12 Barometric"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 33"; Serial.println ("01 33");delay(50); ReadData() ;}} Als (MenuID==12){lcd.setCursor (0, 0);lcd.print ("13 EGT"); lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 78"; Serial.println ("01 78");delay(50); ReadData() ;}} Als (MenuID==13){lcd.setCursor (0, 0);lcd.print ("14 olie-Temp");lcd.setCursor (0, 1);lcd.print (DisplayString), als (RefreshCounter == RefreshCounterMax) {SentMessage = "01 5C"; Serial.println ("01 5C");delay(50); ReadData() ;}} } Als (UpDownMenu == 1) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("Trans-Readings"); lcd.setCursor (0, 1);lcd.print(""); delay(2000); RESETMenuName = 1;} lcd.setCursor (0, 0);lcd.print ("nog niet geimplementeerd");} Als (UpDownMenu == 2) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("instellingen"); lcd.setCursor (0, 1);lcd.print(""); delay(2000); RESETMenuName = 1;} lcd.setCursor (0, 0);lcd.print ("nog niet geimplementeerd");} Als (UpDownMenu == 3) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("Zackery France");lcd.setCursor (0, 1);lcd.print ("\\Sensors finale"); delay(2000); RESETMenuName = 1;} lcd.setCursor (0, 0);lcd.print ("systeemversie");} RefreshCounter herstarten wanneer (RefreshCounter > = RefreshCounterMax) {RefreshCounter = 0;} delay(1);
}
Gegevens lezen en handelen dienovereenkomstig nietig ReadData() {}
BuildINString = ""; while(Serial.available() > 0) {inData = 0; inChar = 0; inData = Serial.read(); inChar=char(inData); BuildINString = BuildINString + inChar; } / / if(BuildINString!=""){Serial.print(BuildINString);} BuildINString.replace(SentMessage,""); BuildINString.replace (">",""); BuildINString.replace("OK",""); BuildINString.replace("STOPPED",""); BuildINString.replace("SEARCHING",""); BuildINString.replace ("geen gegevens",""); BuildINString.replace("?",""); BuildINString.replace(",",""); Serial.Print(BuildINString); Check die OBD-opdracht werd gezonden en berekenen //Calculate RPM dwz retour bytes wil worden 41 0C 1B E0 //RPM als (SentMessage == "01 0C") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16); WorkingString = BuildINString.substring(10,12); B = strtoul(WorkingString.c_str(),NULL,16); DisplayValue = ((A * 256) + B) / 4; DisplayString = String(DisplayValue) + "rpm"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //Calculate voertuig snelheid dwz retour bytes wil worden 41 0C 1B E0 als (SentMessage == "01 0D") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = A; DisplayString = String(DisplayValue) + "km/h"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //Coolant temp als (SentMessage == "01 05") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = A - 40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //IAT temp als (SentMessage == "01 0F") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = een -40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //Air flow Rate als (SentMessage == "01 10") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16); WorkingString = BuildINString.substring(11,13); B = strtoul(WorkingString.c_str(),NULL,16); DisplayValue = ((A * 256) + B) / 100; DisplayString = String(DisplayValue) + "g/s"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //Ambient temp als (SentMessage == "01 46") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = een -40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //eNGINE olie tEMP if (SentMessage == "01 5C") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = een -40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //Throttle positie als (SentMessage == "01 11") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = A * 100/255; DisplayString = String(DisplayValue) + "%"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //Barometric druk als (SentMessage == "01 33") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16);
DisplayValue = A; DisplayString = String(DisplayValue) + "kpa"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //CAT 1 temp / / ((A*256) + B) / 10-40 if (SentMessage == "01 3 C") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16); WorkingString = BuildINString.substring(10,12); B = strtoul(WorkingString.c_str(),NULL,16); DisplayValue = ((A * 256) + B) / 10-40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //CAT 2 temp / / ((A*256) + B) / 10-40 if (SentMessage == "01 3D") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16); WorkingString = BuildINString.substring(10,12); B = strtoul(WorkingString.c_str(),NULL,16); DisplayValue = ((A * 256) + B) / 10-40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //CAT 3 temp / / ((A*256) + B) / 10-40 if (SentMessage == "01 3E") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16); WorkingString = BuildINString.substring(10,12); B = strtoul(WorkingString.c_str(),NULL,16); DisplayValue = ((A * 256) + B) / 10-40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); } //CAT 4 temp / / ((A*256) + B) / 10-40 if (SentMessage == "01 3F") {WorkingString = BuildINString.substring(7,9); A = strtoul(WorkingString.c_str(),NULL,16); WorkingString = BuildINString.substring(10,12); B = strtoul(WorkingString.c_str(),NULL,16); DisplayValue = ((A * 256) + B) / 10-40; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); }
}
VOID Bootup() {lcd.print ("auto Reader"); voor (int i = 0; ik < = 1; i ++) {voor (int j = 1; j < = 4; j ++) / / -/ |\-{if(j==1) {lcd.setCursor (0, 1);lcd.print ("-"); delay(200);} if(j==2) {lcd.setCursor (0, 1);lcd.print ("/"); delay(200);} if(j==3) {lcd.setCursor (0, 1);lcd.print ("|"); delay(200);} if(j==4) {lcd.setCursor (0, 1);lcd.print ("\\");delay(200);}} } lcd.setCursor (2, 1); LCD.Print ("Zackery Frankrijk"); delay(2000); }