LECTEUR OBD (3 / 4 étapes)

Étape 3: CODE à uploader dans l’ARDUINO

Voici le code que j’ai utilisé pour cela !

J’ai obtenu la plupart de ce à partir de.

incluent le code de la bibliothèque :

#include

Déclarer la série lire variables int CmdCount = 1 ; inData octets ; char inChar ; String BuildINString = "" ; String DisplayString = "" ; DisplayValue long ; String SentMessage = "" ; int ByteCount = 0 ; A long ; int B ; int WorkingVal ; String WorkingString = "" ; int RefreshCounter = 0 ; Quand la lecture devrait actualiser int RefreshCounterMax = 50 ; Ajustez ce refreshrate int RESETMenuName = 0 ;

MenuAnalogVal int x ; Déclarer les boutons int MenuID = 0 ; int UpDownMenu = 0 ;

initialiser la bibliothèque avec les numéros des broches interface lcd innovente (8, 9, 4, 5, 6, 7) ;

void setup() {/ / set up nombre du LCD de colonnes et de lignes : lcd.begin (16, 2); / / imprimer un message à l’écran LCD. lcd.setCursor (0, 0) ; Démarrage (); //Simulate processus de démarrage ne doit pas être ici, cela lui donne seulement une apparence cool Retry : lcd.setCursor (0, 0) ; LCD.Print ("connexion... "); lcd.setCursor (0, 1) ; LCD.Print("") ; Serial.Begin(38400) ; Delay(500) ; Envoyer un message de test pour voir si la puce ELM327 répond SentMessage = « ATI » ; Serial.println("ATI");Delay(500) ; ReadData() ; Si (BuildINString.substring(0,1)=="elm327") {lcd.setCursor (0, 0); lcd.print ("Bienvenue... "); lcd.setCursor (0, 1) ; LCD.Print ("connexion OK") ; Delay(1500) ; DisplayString = « Lecture Data... » ; }

Delay(1500) ; }

void loop() {RefreshCounter ++ ;

x = analogRead (0) ; Serial.println(x) ; lcd.setCursor(10,1) ; Si (x > 800 et x < 820){lcd.print ("Select");} Si (x > 620 et x < 630) {si (MenuID > 0) {MenuID--;} DisplayString = "lecture Data...";delay(250);} Si gauche (x > 400 et x < 415) {si (UpDownMenu < 3) {UpDownMenu ++;} Delay(250) ; RESETMenuName = 0;} Vers le bas si (x > 190 et x < 215) {si (UpDownMenu > 0) {UpDownMenu--;} Delay(250) ; RESETMenuName = 0;} UP si (x >-10 et x 10 <) {si (MenuID < 13) {MenuID ++;} DisplayString = "lecture Data...";delay(250);} Droit

Si (UpDownMenu == 0) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print (« moteur lectures"); lcd.setCursor (0, 1);lcd.print(" ") ; delay(2000) ; RESETMenuName = 1;} Si (MenuID==0){lcd.setCursor (0, 0);lcd.print ("01 Coolant Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = "01 05" ; Serial.println ("01 05");delay(50) ; ReadData();}} Si (MenuID==1){lcd.setCursor (0, 0);lcd.print ("02 IAT Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = « 01 0F » ; Serial.println ("01 0F");delay(50) ; ReadData();}} Si (MenuID==2){lcd.setCursor (0, 0);lcd.print ("Temp ambiante 03"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = "01 46" ; Serial.println ("01 46");delay(50) ; ReadData();}} Si (MenuID==3){lcd.setCursor (0, 0);lcd.print ("04 % de gaz"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = "01 11" ; Serial.println ("01 11");delay(50) ; ReadData();}} Si (MenuID==4){lcd.setCursor (0, 0);lcd.print (« 05 CAT 1 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage ="01 3"; Serial.println ("01 3C");delay(50) ; ReadData();}} Si (MenuID==5){lcd.setCursor (0, 0);lcd.print ("06 CAT 2 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = "01 3D" ; Serial.println ("01 3D");delay(50) ; ReadData();}} Si (MenuID==6){lcd.setCursor (0, 0);lcd.print (« 07 CAT 3 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = « 01 3 sexies » ; Serial.println ("01 3E");delay(50) ; ReadData();}} Si (MenuID==7){lcd.setCursor (0, 0);lcd.print (« 08 CAT 4 Temp"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = « 01 3F » ; Serial.println ("01 3F");delay(50) ; ReadData();}} Si (MenuID==8){lcd.setCursor (0, 0);lcd.print ("09 RPM"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = "01 0c » ; Serial.println ("01 0C");delay(50) ; ReadData();}} Si (MenuID==9){lcd.setCursor (0, 0);lcd.print ("vitesse du véhicule 10"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage = "01 0d » ; Serial.println ("01 0D");delay(50) ; ReadData();}} Si (MenuID==10){lcd.setCursor (0, 0);lcd.print (« 11 Air Flow Rate"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage =" 01 10"; Serial.println ("01 10");delay(50) ; ReadData();}} Si (MenuID==11){lcd.setCursor (0, 0);lcd.print (« barométrique 12"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage =" 01 33"; Serial.println ("01 33");delay(50) ; ReadData();}} Si (MenuID==12){lcd.setCursor (0, 0);lcd.print (« EGT 13"); lcd.setCursor (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage =" 01 78"; Serial.println ("01 78");delay(50) ; ReadData();}} Si (MenuID==13){lcd.setCursor (0, 0);lcd.print (« 14 Temp");lcd.setCursor d’huile (0, 1);lcd.print (DisplayString); if (RefreshCounter == RefreshCounterMax) {SentMessage ="01 5"; Serial.println ("01 5C");delay(50) ; ReadData();}} } Si (UpDownMenu == 1) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("Trans lectures"); lcd.setCursor (0, 1);lcd.print("") ; delay(2000) ; RESETMenuName = 1;} lcd.setCursor (0, 0);lcd.print ("non implémenté");} Si (UpDownMenu == 2) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("Settings"); lcd.setCursor (0, 1);lcd.print("") ; delay(2000) ; RESETMenuName = 1;} lcd.setCursor (0, 0);lcd.print ("non implémenté");} Si (UpDownMenu == 3) {if(RESETMenuName==0) {lcd.setCursor (0, 0);lcd.print ("Ilona France");lcd.setCursor (0, 1);lcd.print ("\\Sensors Final"); delay(2000) ; RESETMenuName = 1;} lcd.setCursor (0, 0);lcd.print ("système Version");} Redémarrez RefreshCounter si (RefreshCounter > = RefreshCounterMax) {RefreshCounter = 0;} delay(1) ;

}

Lire les données et agir en conséquence Sub {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 ("aucune donnée","") ; BuildINString.replace("?","") ; BuildINString.replace(",","") ; Serial.Print(BuildINString) ; Vérifiez qui envoi commande OBD et calculer la valeur //Calculate tr/mn c’est à dire retour octets sera 41 0C 1 b E0 //RPM Si (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 véhicule vitesse c’est à dire retour octets wil être 41 0C 1 b E0 si (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 si (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 si (SentMessage == « 01 0F ») {WorkingString = BuildINString.substring(7,9) ; A = strtoul(WorkingString.c_str(),NULL,16) ;

DisplayValue = un -40 ; DisplayString = String(DisplayValue) + « C » ; lcd.setCursor (0, 1) ; LCD.Print(DisplayString) ; } //Air débit si (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 si (SentMessage == "01 46") {WorkingString = BuildINString.substring(7,9) ; A = strtoul(WorkingString.c_str(),NULL,16) ;

DisplayValue = un -40 ; DisplayString = String(DisplayValue) + « C » ; lcd.setCursor (0, 1) ; LCD.Print(DisplayString) ; } if tEMP de //eNGINE huile (SentMessage == "01 5C") {WorkingString = BuildINString.substring(7,9) ; A = strtoul(WorkingString.c_str(),NULL,16) ;

DisplayValue = un -40 ; DisplayString = String(DisplayValue) + « C » ; lcd.setCursor (0, 1) ; LCD.Print(DisplayString) ; } //Throttle positionner si (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 pression si (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 3C") {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 ("lecteur de voiture") ; pour (int j’ai = 0; j’ai < = 1; i ++) {pour (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 ("Ilona France") ; Delay(2000) ; }

Articles Liés

Voiture télécommande contrôle et suivi avec Intel Edison

Voiture télécommande contrôle et suivi avec Intel Edison

Je suis habituellement prolixe, mais pour cette partie, je vais essayer d'être succinct. Ce projet est :Un Edison d'Intel, un récepteur GPS, un lecteur Bluetooth OBD II + (capteurs de voiture de rechange en option) + une voiture.Ajouter dans certains
Comment fixer votre lumière de moteur de contrôle.

Comment fixer votre lumière de moteur de contrôle.

Réparer votre véhicule ne doit pas être cher. Grâce à l'ère de l'information, toute personne peut être un « mécanicien de Google". Alors que cette réparation spécifique peut-être ne pas correspondre à votre situation, c'est le même processus. Nous al
ScottTV - un lecteur multimédia Simple pour mon fils autiste

ScottTV - un lecteur multimédia Simple pour mon fils autiste

Bonjour à tousJe veux vous montrer ce lecteur multimédia pour mon fils Scott.Il est autiste, donc le défi était de faire simple, robuste et facile à nettoyer.Je ne pouvais pas trouver une solution commerciale, donc j'ai créer ce périphérique avec 6 g
3 lecteurs audio à la 1 framboise Pi avec Bluetooth - une installation HiFi Multiroom facile

3 lecteurs audio à la 1 framboise Pi avec Bluetooth - une installation HiFi Multiroom facile

Notre environnement sonore populaire de Squeezebox sur Max2Play a été tenté de connecter plusieurs lecteurs audio facilement et de créer un système HiFi smart. Avec l'ajout de quelques nouveaux plugins incroyables à nos images de carte SD, nous pouvo
Lecteur vidéo de framboise Pi pour les enfants

Lecteur vidéo de framboise Pi pour les enfants

Un Pi-fonction lecteur vidéo portable, doté d'un écran tactile, boutons Arcade et une interface graphique conviviale, axée sur les Python kid.La construction se compose de :Raspberry Pi B +Écran tactile ELI70-CR de l'IEDAdafruit Powerboost 1000Cbatte
Simple lecteur Audio

Simple lecteur Audio

La MediaTek LinkIt une planche est vraiment plein à craquer avec goodies, avec des fonctions comme le GPS, GSM, GPRS, WiFi et BLE, qui sont tous sur une planche avec le facteur de forme d'un Arduino UNO. Ce qui vraiment laissé moi (et beaucoup d'autr
Mini 10-Doh ! Figure personnalisé lecteur flash

Mini 10-Doh ! Figure personnalisé lecteur flash

J'ai eu ce mec dans une caisse de butin en janvier, et aujourd'hui je vais vous montrer comment mettre ce petit Doh 10 ! figure de travailler.Étape 1: Outils et fournitures nécessaires.Outils :~ Mini tournevis Philips~ Le couteau~ Pistolet à colle ho
Caisse de contre-plaqué lecteur Flash

Caisse de contre-plaqué lecteur Flash

Alors, j'ai eu ce lecteur flash de 8 Go de cas sans traîner pendant un certain temps. C'est un lecteur flash parfaitement utilisable, mais il manque une affaire, tout simplement parce que mon chien il mâche le Drive en elle-même, mais réussi pour ne
Retournement automatique stylo lecteur

Retournement automatique stylo lecteur

Ce fameux « meme » est drôle cos c'est vrai.Je suis sûr que nous avons rencontré ce problème.Essayer de brancher le câble dans un USB ou une clé USBIl ne rentre pas, alors vous le renversez autourFait encore ne rentre pas, vous ouvrirez à nouveauMain
Mise à jour de micro USB pour lecteur flash standard

Mise à jour de micro USB pour lecteur flash standard

Mettre à niveau votre vieux pas cool et pas mobile convivial lecteur flash usb micro monstre. : DÉtape 1: outils Étape 2: ouverture Étape 3: Câblage, soudure et fermeture C'était facile, il suffit de prendre quelques fils minces et souder à l'usb bro
Pimp votre vieux Smartphone et faire un lecteur de MP3 Steampunk avec écran tactile

Pimp votre vieux Smartphone et faire un lecteur de MP3 Steampunk avec écran tactile

Salutque pouvez-vous faire avec vos vieux Smartphone ? Vendre, jeter, mettre dans le micro-ondes?? * gg *Non, nous faisons un lecteur de MP3 Steampunk avec écran tactile;)Étape 1: nous commençonsNous avons besoin de beaucoup de choses en laiton, cert
Le Victorian Sound-Tube... Un lecteur Steampunk Mp3

Le Victorian Sound-Tube... Un lecteur Steampunk Mp3

Le Victorian Sound-Tube est un lecteur de Mp3 Steampunk avec bras motorisé tenue et son pour commande d'éclairage. Les mensonges de Tube sur un porte et deux armes de laiton, organisent le Tube des deux côtés. Mettre un interrupteur et les bras sépar
Steampunked lecteur mp3 « Junophon »

Steampunked lecteur mp3 « Junophon »

Salut tout le mondeCe Steampunked-mp3-lecteur "Junophon" est mon dernier projet instructables qui I´d voudrais vous présenter. Et c'est le premier projet où j'ai « upcycled » beaucoup de pièces d'un ancien projcet de mes amis aussi.Tout a commen
Une haute qualité de Steampunk lecteur MP3

Une haute qualité de Steampunk lecteur MP3

Bonjour et salutations de la nord de l'Allemagne à nouveau.Comme vous le disiez, j'aime vraiment glas dômes et la framboise est l'un de mes nouveaux jouets. Et oui, j'adore les tubes indicateurs ainsi. Si l'idée était de rassembler tous ces trucs et