Hackear un Cable ELM327 para hacer un Arduino OBD2 escáner (2 / 3 paso)

Paso 2: Colocar la pantalla de LCD de Arduino para arduino

Colocar la pantalla de LCD de Arduino para el arduino y conectarlo a su PC para programar.

Abajo está mi Arduino Sketch, me di cuenta que el formato se mete con el código un poco, tengo algunos más información relacionada con esta compilación también puede ver el código aquí.

http://techtinker.co.za/viewtopic.php?f=14&t=17

 // include the library code:<br>#include 
 //Declare Serial Read variables int CmdCount=1; byte inData; char inChar; String BuildINString=""; String DisplayString=""; long DisplayValue; String SentMessage=""; int ByteCount=0; long A; int B; int WorkingVal; String WorkingString=""; 
 //Declare Buttons int MenuID=0; 
 // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
 void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.setCursor(0, 0); Bootup();//Simulate Bootup process doesnt have to be here this only makes it look cool Retry: lcd.setCursor(0, 0); lcd.print("Connecting...... "); lcd.setCursor(0, 1); lcd.print(" "); Serial.begin(38400); delay(500); //Send a test message to see if the ELM327 Chip is responding SentMessage = "ATI"; Serial.println("ATI");delay(500);ReadData(); if (BuildINString.substring(1,7)=="ELM327") { lcd.setCursor(0, 0); lcd.print("Welcome... "); lcd.setCursor(0, 1); lcd.print("Connection OK "); delay(1500); } else { lcd.setCursor(0, 0); lcd.print("Error "); lcd.setCursor(0, 1); lcd.print("No Connection! "); delay(1500); goto Retry; } 
 delay(1500); } 
 void loop() { int x; x = analogRead (0); //Serial.println(x); lcd.setCursor(10,1); if (x > 800 and x < 820){lcd.print ("Select ");} if (x > 620 and x < 630){if (MenuID>0){MenuID--;}delay(250);}//Left if (x > 400 and x < 415){lcd.print ("Down ");} if (x > 190 and x < 215){lcd.print ("Up ");} if (x > -10 and x < 10){if (MenuID<11){MenuID++;}delay(250);} //Right 
 if (MenuID==0){lcd.setCursor(0, 0);lcd.print("01 Coolant Temp ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 05";Serial.println("01 05");delay(300);ReadData();} if (MenuID==1){lcd.setCursor(0, 0);lcd.print("02 IAT Temp ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 0F";Serial.println("01 0F");delay(300);ReadData();} if (MenuID==2){lcd.setCursor(0, 0);lcd.print("03 Ambient Temp ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 46";Serial.println("01 46");delay(300);ReadData();} if (MenuID==3){lcd.setCursor(0, 0);lcd.print("04 Throttle % ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 11";Serial.println("01 11");delay(300);ReadData();} if (MenuID==4){lcd.setCursor(0, 0);lcd.print("05 CAT 1 Temp ");lcd.setCursor(0, 1);lcd.print("Not Implemented ");} if (MenuID==5){lcd.setCursor(0, 0);lcd.print("06 CAT 2 Temp ");lcd.setCursor(0, 1);lcd.print("Not Implemented ");} if (MenuID==6){lcd.setCursor(0, 0);lcd.print("07 CAT 3 Temp ");lcd.setCursor(0, 1);lcd.print("Not Implemented ");} if (MenuID==7){lcd.setCursor(0, 0);lcd.print("08 CAT 4 Temp ");lcd.setCursor(0, 1);lcd.print("Not Implemented ");} if (MenuID==8){lcd.setCursor(0, 0);lcd.print("09 RPM ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 0C";Serial.println("01 0C");delay(300);ReadData();} if (MenuID==9){lcd.setCursor(0, 0);lcd.print("10 Vehicle Speed ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 0D";Serial.println("01 0D");delay(300);ReadData();} if (MenuID==10){lcd.setCursor(0, 0);lcd.print("11 Air Flow Rate ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 10";Serial.println("01 10");delay(300);ReadData();} if (MenuID==11){lcd.setCursor(0, 0);lcd.print("12 Barometric ");lcd.setCursor(0, 1);lcd.print(DisplayString);SentMessage = "01 33";Serial.println("01 33");delay(300);ReadData();} 
 } 
Leer datos y acto en consecuencia anular ReadData() {BuildINString = ""; while(Serial.available() > 0) {inData = 0; inChar = 0; inData = Serial.read(); inChar=char(inData); BuildINString = BuildINString + inChar; //Read Data and act accordingly void 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("NO DATA",""); BuildINString.replace("?",""); BuildINString.replace(",",""); //Serial.print(BuildINString); //Check which OBD Command was sent and calculate VALUE //Calculate RPM I.E Returned bytes wil be 41 0C 1B E0 if (SentMessage=="01 0C") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); WorkingString = BuildINString.substring(11,13); B = strtol(WorkingString.c_str(),NULL,0); DisplayValue = ((A * 256)+B)/4; DisplayString = String(DisplayValue) + " rpm "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //Calculate Vehicle speed I.E Returned bytes wil be 41 0C 1B E0 if (SentMessage=="01 0D") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); if(BuildINString!=""){serial.Print(BuildINString);} BuildINString.replace(SentMessage,""); BuildINString.replace (">",""); BuildINString.replace("OK",""); BuildINString.replace("STOPPED",""); BuildINString.replace("SEARCHING",""); BuildINString.replace ("sin datos",""); BuildINString.replace("?",""); BuildINString.replace(",",""); Serial.Print(BuildINString); Comprobar que se envió el comando OBD y calcular el valor //Calculate devuelto RPM es decir bytes será 41 1B de 0 C E0 si (SentMessage == "01 C 0") {WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); WorkingString = BuildINString.substring(11,13); B = strtol(WorkingString.c_str(),NULL,0); DisplayValue = ((A * 256) + B) / 4; DisplayString = String(DisplayValue) + "rpm"; lcd.setCursor (0, 1); LCD.Print(DisplayString); DisplayValue = A; DisplayString = String(DisplayValue) + " km/h "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //Coolant Temp if (SentMessage=="01 05") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); 
DisplayValue = A; DisplayString = String(DisplayValue) + "km/h"; lcd.setCursor (0, 1); LCD.Print(DisplayString); DisplayValue = A; DisplayString = String(DisplayValue) + " C "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //IAT Temp if (SentMessage=="01 0F") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); 
DisplayValue = A; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); DisplayValue = A; DisplayString = String(DisplayValue) + " C "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //Air flow Rate if (SentMessage=="01 10") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); WorkingString = BuildINString.substring(11,13); B = strtol(WorkingString.c_str(),NULL,0); DisplayValue = ((A * 256)+B)/100; DisplayString = String(DisplayValue) + " g/s "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //Ambient Temp if (SentMessage=="01 46") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); 
DisplayValue = A; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); DisplayValue = A; DisplayString = String(DisplayValue) + " C "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //Throttle position if (SentMessage=="01 11") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); Tasa de flujo de aire si (SentMessage == "01 10") {WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); WorkingString = BuildINString.substring(11,13); B = strtol(WorkingString.c_str(),NULL,0); DisplayValue = ((A * 256) + B) / 100; DisplayString = String(DisplayValue) + g "s"; lcd.setCursor (0, 1); LCD.Print(DisplayString); DisplayValue = A; DisplayString = String(DisplayValue) + " % "; lcd.setCursor(0, 1); lcd.print(DisplayString); } //Barometric pressure if (SentMessage=="01 33") { WorkingString = BuildINString.substring(7,9); A = strtol(WorkingString.c_str(),NULL,0); 
DisplayValue = A; DisplayString = String(DisplayValue) + "C"; lcd.setCursor (0, 1); LCD.Print(DisplayString); DisplayValue = A; DisplayString = String(DisplayValue) + " kpa "; lcd.setCursor(0, 1); lcd.print(DisplayString); } } 
DisplayValue = A; DisplayString = String(DisplayValue) + "%"; lcd.setCursor (0, 1); LCD.Print(DisplayString); void Bootup() { lcd.print("WisperChip V2.00 "); for (int i=0; i <= 5; i++) { for (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);} } } delay(1000); } 
DisplayValue = A; DisplayString = String(DisplayValue) + "kpa"; lcd.setCursor (0, 1); LCD.Print(DisplayString);
void Bootup() {lcd.print ("WisperChip V2.00"); para (int i = 0; i < = 5; i ++) {para (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);}} delay(1000);

Artículos Relacionados

Hackear un teclado USB para hacer un tablero de Pedal sintetizador

Hackear un teclado USB para hacer un tablero de Pedal sintetizador

mi hijo me preguntó si yo podría hacer una pedalera para conectar a su computadora portátil para utilizar con su software de sintetizador, que puede cambiar los bucles mientras realizar--o algo musical como eso. Hemos decidido hackear un teclado USB
Cómo hacer un "Soldado universal" escáner de ojo

Cómo hacer un "Soldado universal" escáner de ojo

que es el final de temporada de temporada 2. Espero que estoy nuevamente en enero de 2010. Melodía de estancia y suscribirse!
Simulador de Arduino OBD2

Simulador de Arduino OBD2

Ive sido un Arduino OBD2 escáner interfaz con puerto de OBD2 de mi Jeep, pero del edificio se convirtió en un beeeeeg! arrastrados a subir el código a mi Arduino Nano + 16 x 2 LCD + dispositivo de escáner ELM327, luego llevar el prototipo todo el Jee
Hacer un ARDUINO por su cuenta...!!!

Hacer un ARDUINO por su cuenta...!!!

Plataforma ARDUINO es la plataforma más popular de hoy en el mundo utilizado para los proyectos integrados.Programación de un Arduino es muy sencillo que cualquier otro sistema.Sólo conéctelo a su PC y empezar...!!!Pero como la independiente proyecto
Hackear un archivador de oficina móvil para escáner e impresora

Hackear un archivador de oficina móvil para escáner e impresora

Un armario de oficina móvil... Tal vez tienes una en casa...¿También tienes una impresora? ¿Tal vez un escáner?A medida que vamos digital, mi escritorio cajones empieza a vaciar y quería mi escritorio para ser limpio...Eso significa evitar el desorde
Cómo agregar un escáner de huellas dactilares USB internamente para laptop

Cómo agregar un escáner de huellas dactilares USB internamente para laptop

tuve un Dell Mini-9 que instalar Mac OS X en y en el proceso de vio otros usuarios agregando un receptor GPS interno. Esto me puso a pensar, podría añadir un escáner de huellas digitales en él. Los usuarios de http://www.mydellmini.com participaron e
Realizar una máscara de escáner para 110 o película APS [actualizado]

Realizar una máscara de escáner para 110 o película APS [actualizado]

2012 es el año del renacimiento de película de 110!Hey, Broadway revive suficiente mierda para estrangulación Godzilla... ¿por qué no este formato de película discreta ¡Las 110 emulsiones nuevas y emocionantes están inundando el mercado! Pero la gran
Blanco pegamento desmoldante para la transferencia de PCB tóner

Blanco pegamento desmoldante para la transferencia de PCB tóner

Después de pasar dos meses de esfuerzo, intentando diversos métodos de transferencia de arte a un cobre revestido tablero; Recientemente he descubierto un método simple, baja habilidad de hacerlo. El resultado es una transferencia que se parece a un
Par un escáner de código de barras de Bluetooth de Motorola con un iPad o un iPhone

Par un escáner de código de barras de Bluetooth de Motorola con un iPad o un iPhone

Esta es una guía general sobre maridaje una mano Motorola Bluetooth Barcode Scanner con un iPad y usar keyboad entrada. Con este tipo de escáner que no necesita usar una aplicación, o limitar el uso del escáner para aplicaciones compatibles, el escán
Hacer su propio termostato programable para $66 con Arduino

Hacer su propio termostato programable para $66 con Arduino

Este proyecto le mostrará cómo crear su propio termostato con sonda de temperatura, lectura de LED y capacidad de salidas de control remoto.El núcleo de este proyecto es realmente un controlador para una pantalla de 4 dígitos de siete segmentos.Hay m
3 pasos para hacer los cables de puente

3 pasos para hacer los cables de puente

¿Alguna vez le sucede a quedarse sin los cables de puente para usted proyectos de Arduino?No hay problema. Aquí hay 3 sencillos pasos para hacer tu propio.Paso 1: Piezas y herramientas Piezas-los alambres del cable lan o por teléfono (cualquier longi
RFIDuino - usando un lector de RFID y Arduino para hacer un rompecabezas GeoCache

RFIDuino - usando un lector de RFID y Arduino para hacer un rompecabezas GeoCache

disfruto de Geocaching y electrónica y han hecho un par de electrónico puzzle-caches utilizando un Arduino.Mi más reciente creación (con la ayuda de un compañero cacher del código) está utilizando un Arduino y RFID lector para hacer un geocaché de ro
Cómo hacer su propio longitudes de Cables coaxiales para sistemas de refuerzo celular sin herramientas - 9913 conectores de cable/tipo-N o LMR400 que prensan

Cómo hacer su propio longitudes de Cables coaxiales para sistemas de refuerzo celular sin herramientas - 9913 conectores de cable/tipo-N o LMR400 que prensan

este instructable muestra cómo hacer los cables coaxiales para suslongitudes utilizando *abrazadera tipo* conectores tipo N en los extremos de sucables, que requiere el uso de sólo herramientas simples.  Este procedimiento es específicosa tipos de ul
Cómo utilizar un zumbador piezoeléctrico para hacer ruido con Arduino

Cómo utilizar un zumbador piezoeléctrico para hacer ruido con Arduino

Si tienes un Arduino, se corra en un proyecto que requiere la Junta para hacer sonidos. Una de las maneras más baratas y más fácil de lograr esto es utilizar un zumbador piezoeléctrico.Zumbadores piezoeléctricos son extremadamente simples de alambre