Bienvenue, Visiteur ! S’enregistrer


Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Civic] AFR Arduino News
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
18-09-2016, 00:27:34   -   [Civic] AFR Arduino News
salut a tous

je partage mon code C pour arduino, pour afficher les temperatures ECT et IAT

Apres 2 mois de taff il est precis et fonctionne tres bien et sera modifier pour ajouté d'autres infos

[Image: 497626photo3.jpg]

sous crome pour voir la difference


[/url]
[url=http://www.hostingpics.net/viewer.php?id=723034photo2.jpg]

[Image: 723034photo2.jpg]

Code :
//Brancher directement vos sondes analog sur vos entrees analog d'arduino
//
//
//modifier coeff yolo pour votre precision






#include <math.h>


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// If using software SPI (the default case):
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

/* Uncomment this block to use hardware SPI
#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
*/

//#define NUMFLAKES 10
//#define XPOS 0
//#define YPOS 1
//#define DELTAY 2




//_________________________________________________________________________//


double Rref = 2200.0; //Résistance de référence à 25°C
double V_IN = 5.0; //Alimentation électrique


//Information de la thermistance
double A_1 = 3.354016E-3;
double B_1 = 2.569850E-4;
double C_1 = 2.620131E-6;
double D_1 = 6.383091E-8;

double SteinhartHart(double R){

 //Division de l'équation en 4 parties. La premiere est
 //uniquement A1
 double equationB1 = B_1 * log(R/Rref);
 double equationC1 = C_1 * pow(log(R/Rref), 2);
 double equationD1 = D_1 * pow(log(R/Rref), 3);
 double equation = A_1 + equationB1 + equationC1 + equationD1;
 return pow(equation, -1); }

//_______________________________________________________________________//

void setup(){
 Serial.begin(9600);
 display.begin(SSD1306_SWITCHCAPVCC);
 display.clearDisplay();


 display.display();
 delay(500);
 

 //display.drawBitmap(0, 0, honda, 48, 48, WHITE);
 //delay(1000);
 //Clear the buffer.
 display.clearDisplay();
 
               }

//_______________________________________________________________________//

void loop() {
 
 double ECT = analogRead(A1);  //ENGINE COOLANT TEMPERATURE // Calcul de la tension sur la borne analogique
 double V =  (ECT / 1024) * V_IN;


 double Rth = (Rref * V )/(V_IN - V); //Calcul de la résistance de la thermistance
 //Serial.print("Rth = ");
 //Serial.print(Rth);

 double kelvin = SteinhartHart(Rth);  //Calcul de la température en kelvin( Steinhart and Hart)
 double celsius = kelvin - 273.15+4;  //Conversion en celsius (+4 COEFF YOLO A MODIFIER SELON LA SONDE)
 //Serial.print("Ohm  -  T = ");

//_________________________________________//

 
 double IAT = analogRead(A2); // INTAKE AIR TEMPERATURE
 double VA =  IAT / 1024 * V_IN;
 double RthA = (Rref * VA ) / (V_IN - VA);
 double kelvinA = SteinhartHart(RthA);
 double celsiusA = kelvinA - 273.15+3.5;   // +3.5 COEFF YOLO

 //____________________________________________________________________________//

 
 
 
 
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(0,0);
 display.print("ECT:");display.print(celsius);
 display.setTextSize(1);
 display.println("\xf7""c");
 
 display.setTextSize(2);
 display.setTextColor(WHITE);
 display.setCursor(0,16);
 display.print("IAT:");display.print(celsiusA);
 display.setTextSize(1);
 display.println("\xf7""c");


 
//_____________________________________________________________________________//

 display.display();
 delay(500);
 display.clearDisplay();

 

                                  }
(Modification du message : 10-02-2017, 00:52:17 par Soupraa.)
Retourner en haut
Trouver Répondre
fujiwara Hors ligne
Dura lex sed lex
Moderateurs

1 moteur 4 roues(motrice)
17 - Charente-Maritime France
Messages : 5 121
Sujets : 34
Inscription : Dec 2007
Réputation : 8
18-09-2016, 00:29:35   -   RE: Afficher temperature arduino+Oled
C'est super gentil ça, je jetterai un œil demain.

[Image: gas-ma10.gif]
Vous désirez une photo de votre voiture imprimée en 3D? détails en MP
Kalbar a écrit :Mec j'ai fait le Kosovo et je me suis fait dominer par une chaise pliante.
Andréa892 a écrit :Ca sent le bon gros boulet qui n'y connait absolument rien, mais qui t'explique quand même comment nettoyer une vanne EGR sur un voiture électrique.
[Image: %7B2586A611-2CD6-6132-C5BF-B2E5AC565516%7D_2.png]
Retourner en haut
Site web Trouver Répondre
folken Hors ligne
Posting Freak
*****

- France
Messages : 12 861
Sujets : 21
Inscription : Jan 2005
Réputation : 3
18-09-2016, 00:38:55   -   RE: Afficher temperature arduino+Oled
Tu utilises quoi comme sonde ?
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
18-09-2016, 00:42:09   -   RE: Afficher temperature arduino+Oled
Les sondes d'origines
----------
(18-09-2016, 00:29:35)fujiwara a écrit : C'est super gentil ça, je jetterai un œil demain.

Merci c'est cool,

plus nous sommes a l'utiliser plus nous serons a le modifié

avoir les coeff est tres difficiles, j'en ai pris 4 qui ce rapproches de nos sondes oem. mais si quelqu'un les coeef exactes, je prends.
les coeff a1 b1 c1 d1 viennent d'une sonde ntc 1,8k
(Modification du message : 18-09-2016, 00:46:56 par Soupraa.)
Retourner en haut
Trouver Répondre
folken Hors ligne
Posting Freak
*****

- France
Messages : 12 861
Sujets : 21
Inscription : Jan 2005
Réputation : 3
18-09-2016, 00:48:49   -   RE: Afficher temperature arduino+Oled
Ca veut dire que ton ecu n'a plus l'info ?
Ou tu as ajouté d'autres sondes que tu avais d'un autre bloc pour les relier à l'arduino ?
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
18-09-2016, 00:53:31   -   RE: Afficher temperature arduino+Oled
ah non je me suis ponté dessus

a l'ecu arrive un fil de signal ECT, IAT, O2 ect.....

j'ai pris la masse du 5volt de l'ecu et le signal, ou je me suis ponté dessus, et j'arrive sur l'arduino.

mais avant cela j'ai mis une résistance entre signal et arduino, pour faire pont diviseur.
----------
comme un voltmetre en gros. le + ECT par exemple et le - 5volt de l'ecu

freelog et crome me donne la meme temperature sauf que mon arduino calcule tte et affiche tte les 500millisecondes
(Modification du message : 18-09-2016, 00:56:18 par Soupraa.)
Retourner en haut
Trouver Répondre
folken Hors ligne
Posting Freak
*****

- France
Messages : 12 861
Sujets : 21
Inscription : Jan 2005
Réputation : 3
18-09-2016, 01:03:06   -   RE: Afficher temperature arduino+Oled
Ok, j'aurais pris une valeur plus élevée que 1.5k mais ça marche aussi si les entrées de l'arduino ont une impédance assez haute.
C'est le "en série" qui m'a induit en erreur, et il est tard donc j'ai pas trop réfléchi.

Pareil que lors de mon message précédent, j'avais cru lire "OneWire" au lieu de Wire Sac
D'ailleurs, petite parenthèse au passage (même si tu n'es pas concerné, mais c'est pour ça que je demandais quel état le type de sonde), pour ceux qui voudraient utiliser des sondes numériques, ça marche bien pour l'ECT, mais pas pour l'IAT, la latence est trop élevée (presque 1 seconde pour récupérer le résultat de la conversion).
Ton choix d'utiliser des sondes analogique était le bon.
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
18-09-2016, 01:12:12   -   RE: Afficher temperature arduino+Oled
super de ta reponse

je ne veux pas rajouter de sonde, utiliser au maximun les sondes oem.
pour les entrées analogiques je sais juste qu'elles ne prennent pas plus de 5volt, je debute dans arduino aussi. tout conseil, critique sera bonne a prendre.

1,5k c'est la résistance, a peu pres, à température ambiante de nos sondes oem.
(Modification du message : 18-09-2016, 01:23:49 par Soupraa.)
Retourner en haut
Trouver Répondre
BloodyMurder Hors ligne
Motard Débile
****

Mazda & Ducati
76 - Seine-Maritime France
Messages : 4 742
Sujets : 65
Inscription : Feb 2005
Réputation : 17
18-09-2016, 08:45:12   -   TITRE NON CONFORME
Bonjour,

Conformément au règlement de la section Honda, il est nécessaire de rédiger son titre d'une certaine manière pour une meilleure visibilité et faciliter les recherches.

Merci d'utiliser le bouton "Editer" ("Edition complète") en bas de votre 1er message et de modifier le titre de votre sujet.

Pour savoir comment rédiger son titre, regardez le règlement : https://www.japancar.fr/forum/Sujet-Regl...TRE--52275

L'équipe de modération

"Nous avons une resistance à la douleur hors du commun, nous ne sommes pas des footballeurs" © Valentino Rossi

[Image: 741272FBIMG1491819966438Copie.jpg]

Viking50 a écrit :J'ai coutume de penser que si t'achetes une voiture pour aller sur un parking autant faire du modélisme
Retourner en haut
Trouver Répondre
Bentrip Hors ligne
Junior Member
*

Honda Civic ED7 Blanche
30 - Gard France
Messages : 43
Sujets : 8
Inscription : May 2013
Réputation : 0
19-09-2016, 02:34:56   -   RE: [Civic] temperature sous Arduino
Excellent, je veux justement me faire un RPI multifonction dans la voiture.. Et l'affichage de la température est une des fonctions que j'envisage!
Retourner en haut
Trouver Répondre
DAV4WS Hors ligne
Mineur de corde
*****

- France
Messages : 14 037
Sujets : 42
Inscription : May 2010
Réputation : 10
19-09-2016, 08:31:31   -   RE: [Civic] temperature sous Arduino
salut contant de te retrouver ici Wink

cette homme est un extraterrestre de l'électronique il parle avec les machine , il va finir par s'implanter des puces vtec un jour ^^

4WS trajectoire assuré !
-ma prelude Dailyici
-3G 4WS 260Nm race ici
-ma moto ici
-ma toy TA23
toutes pieces /réparations /préparations de prelude 3G en MP
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
19-09-2016, 20:49:02   -   RE: [Civic] temperature sous Arduino
MAJ

PAS BESOIN DE PONT DIVISEUR!!!!

ON PREND SIGNAL ANALOGIQUE ECT/IAT ET ON BRANCHE DIRECT SUR NOS ENTREES ANALOG ARDUINO

COEFF YOLO A DESCENDRE UN PEU AUSSI

je modifie le code
----------
(19-09-2016, 08:31:31)DAV4WS a écrit : salut contant de te retrouver ici Wink

cette homme est un extraterrestre de l'électronique il parle avec les machine , il va finir par s'implanter des puces vtec un jour ^^

LOL LOL LOL LOL

ca rame trop l'EPROM
----------
(19-09-2016, 02:34:56)Bentrip a écrit : Excellent, je veux justement me faire un RPI multifonction dans la voiture.. Et l'affichage de la température est une des fonctions que j'envisage!

Fait tourner le code!!!

je suis au tout debut de l'arduino


je veux rajouter RPM/INJECTEUR/MAP/TPS
(Modification du message : 19-09-2016, 20:58:51 par Soupraa.)
Retourner en haut
Trouver Répondre
folken Hors ligne
Posting Freak
*****

- France
Messages : 12 861
Sujets : 21
Inscription : Jan 2005
Réputation : 3
20-09-2016, 01:36:25   -   RE: [Civic] temperature sous Arduino
Oui, ce n'est pas un pont diviseur que tu as réalisé (et heureusement, parce que sinon tu aurais perturbé ta mesure ... tu comprends maintenant mes questions ? Big Grin )
L'entrée de l'arduino se comporte (en théorie) comme un fil relié à rien.

On peut y laisser quand même une résistance très élevée (genre 1Mohm) pour être sûr de ne pas avoir de courant de fuite qui passerait par l'entrée analogique de l'arduino, au cas où l'impédance d'entrée ne soit pas aussi élevée que prévue, mais c'est sans doute inutile.
----------

J'ai modifié vite fait ton code à l'arrache, je n'ai rien pour le tester donc je ne sais pas si ça fonctionne:
(edit: et comme un con j'avais laissé le delay LOL c'est corrigé)

Code :
//Brancher directement vos sondes analog sur vos entrees analog d'arduino
//
//
//modifier coeff yolo pour votre precision






#include <math.h>


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// If using software SPI (the default case):
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

/* Uncomment this block to use hardware SPI
#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
*/

//#define NUMFLAKES 10
//#define XPOS 0
//#define YPOS 1
//#define DELTAY 2

unsigned long previousMillis = 0;        // will store last time DISPLAY was updated
const long delayDisplay = 1000;           // interval at which to display (milliseconds)


//_________________________________________________________________________//


double Rref = 2200.0; //Résistance de référence à 25°C
double V_IN = 5.0; //Alimentation électrique


//Information de la thermistance
double A_1 = 3.354016E-3;
double B_1 = 2.569850E-4;
double C_1 = 2.620131E-6;
double D_1 = 6.383091E-8;

double SteinhartHart(double R){

//Division de l'équation en 4 parties. La premiere est
//uniquement A1
double equationB1 = B_1 * log(R/Rref);
double equationC1 = C_1 * pow(log(R/Rref), 2);
double equationD1 = D_1 * pow(log(R/Rref), 3);
double equation = A_1 + equationB1 + equationC1 + equationD1;
return pow(equation, -1); }

//_______________________________________________________________________//

void setup(){
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();

display.display();
delay(500);

//display.drawBitmap(0, 0, honda, 48, 48, WHITE);
//delay(1000);
//Clear the buffer.
display.clearDisplay();
}

//_______________________________________________________________________//

void loop() {
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= delayDisplay) {
display.clearDisplay();
previousMillis = currentMillis;

double ECT = analogRead(A1);  //ENGINE COOLANT TEMPERATURE // Calcul de la tension sur la borne analogique
double V =  (ECT / 1024) * V_IN;

double Rth = (Rref * V )/(V_IN - V); //Calcul de la résistance de la thermistance
//Serial.print("Rth = ");
//Serial.print(Rth);

double kelvin = SteinhartHart(Rth);  //Calcul de la température en kelvin( Steinhart and Hart)
double celsius = kelvin - 273.15+4;  //Conversion en celsius (+4 COEFF YOLO A MODIFIER SELON LA SONDE)
//Serial.print("Ohm  -  T = ");

//_________________________________________//

double IAT = analogRead(A2); // INTAKE AIR TEMPERATURE
double VA =  IAT / 1024 * V_IN;
double RthA = (Rref * VA ) / (V_IN - VA);
double kelvinA = SteinhartHart(RthA);
double celsiusA = kelvinA - 273.15+3.5;   // +3.5 COEFF YOLO

//____________________________________________________________________________//

display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("ECT:");display.print(celsius);
display.setTextSize(1);
display.println("\xf7""c");

display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,16);
display.print("IAT:");display.print(celsiusA);
display.setTextSize(1);
display.println("\xf7""c");

//_____________________________________________________________________________//
display.display();
}
}

Utiliser millis à la place de delay permet de:
- ne pas occuper le contrôleur pour rien (pendant que le delay s’exécute, tu ne peux rien faire d'autre);
- être sûr que ton affichage sera fait avec un intervalle de 500ms (avec delay, il faut rajouter le temps d'exécution de ta capture et ton affichage à ces 500ms - bien sûr ça ne marche que si ce que tu as à exécuter prend moins de 500ms).

Pour l'instant tu ne verra sans doute pas la différence, ton code semble léger.
Mais si tu commences à rajouter beaucoup de choses, le temps d'exécution pourrait commencer à devenir important comparé aux 500ms de délai, et tu pourrais en avoir besoin.

Et dans l'absolu ça reste plus propre, tu gardes les ressources disponibles au lieu de faire exécuter bêtement une boucle de 500ms qui va paralyser tout ton process à chaque fois que tu rentrera dedans (ce n'est pas une critique, je l'ai aussi utilisé sur un petit projet que j'ai commencé, pour vérifier vite fait que ça marchait Blush mais comme je vais être amené à repenser le code, je compte tout remettre à plat plus tard).

Selon la forme du signal rpm/injecteurs, il pourrait aussi être intéressant d'utiliser les interruptions pour être sûr de ne pas rater un front montant (bon, pas sur les injecteurs ... mais à voir pour les rpm).
Mais ça fait parti des trucs que j'ai dans mes cartons et qu'il faudrait que je finalise ...
(Modification du message : 20-09-2016, 01:59:08 par folken.)
Retourner en haut
Trouver Répondre
DAV4WS Hors ligne
Mineur de corde
*****

- France
Messages : 14 037
Sujets : 42
Inscription : May 2010
Réputation : 10
20-09-2016, 08:44:43   -   RE: [Civic] temperature sous Arduino
oulà vous m'avez perdu là !
folken je penses qu'avec ces infos il va etre aux anges angel Big Grin

4WS trajectoire assuré !
-ma prelude Dailyici
-3G 4WS 260Nm race ici
-ma moto ici
-ma toy TA23
toutes pieces /réparations /préparations de prelude 3G en MP
(Modification du message : 20-09-2016, 08:44:52 par DAV4WS.)
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
20-09-2016, 16:49:10   -   RE: [Civic] temperature sous Arduino
AUX ANGES

de la bombe j'ai un pro arduino ici enfin.....

aller je teste ca ce soir

je veux agir sur un BP pour changer l'affichage, il me faut integrer une condition du genre "If"?
----------
remettons tout a plat tkt pas je prends

Mais un grand merci a toi!!!
(Modification du message : 20-09-2016, 16:56:45 par Soupraa.)
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
27-01-2017, 21:45:17   -   RE: [Civic] temperature sous Arduino
attention sa pique les yeux

MAIS ca marche


Code :
////////UPDATE 02 = RPM AVAIBLE



volatile byte half_revolutions;
unsigned int rpm;
unsigned long timeold;


float vout = 0.0;
float vin = 0.0;
int v=0;
int i =0;
int ect=0;
float R1 =100000 ;    // !! resistance of R1 !!
float R2 = 47000;     // !! resistance of R2 !!
int volt = 0;
int lambda=0;   //
float AFR=0;
int Map=0;
float Psi=0;
float psia=0;
float psig=0;
float vaccum=0;
float mBar=0;
float mV=0;
int ValueTPS=0;
int Tps=0;
float VoltTPS=0;

double V_IN = 5.0; //Alimentation électrique
//Information de la thermistance
double Rref = 10000.0; //Résistance de référence à 25°C
double A_1 = 3.354016E-3;
double B_1 = 2.569850E-4;
double C_1 = 2.620131E-6;
double D_1 = 6.383091E-8;

double SteinhartHart(double R){
//Division de l'équation en 4 parties. La premiere est
//uniquement A1
double equationB1 = B_1 * log(R/Rref);
double equationC1 = C_1 * pow(log(R/Rref), 2);
double equationD1 = D_1 * pow(log(R/Rref), 3);
double equation = A_1 + equationB1 + equationC1 + equationD1;
return pow(equation, -1); }

//Bouton Poussoir
const int bp=5;
boolean vbp=0;
boolean vbpmem=0;
int mode = 0;

//Nombre de mode
int nbrmode=10;


byte data[128] ;  // Para guardar las lecturas
byte index = 0 ;

//________________________________________________________________________________//
/* Uncomment this block to use hardware SPI
#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
*/

#include <math.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// If using software SPI (the default case):
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
#define OLED_CS_2    4
#define OLED_RESET_2 3

Adafruit_SSD1306 display1(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Adafruit_SSD1306 display2(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET_2, OLED_CS_2);

#define honda_HEIGHT 32
#define honda_WIDTH  128

const unsigned char honda [] PROGMEM = {
// bleed logo honda
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x07, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x07, 0xc0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x40, 0x00, 0x03, 0xe0, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf8, 0x00, 0x01, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7e, 0x00, 0x01, 0xfc, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x80, 0x01, 0xfe, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xe0, 0x07, 0xff, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x03, 0xff, 0xfc, 0x7f, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0xff, 0xc0, 0x0f, 0xc6, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x00, 0x3f, 0xc0, 0x00, 0x7a, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xc0, 0x1f, 0xc0, 0x0f, 0x0a, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x70, 0x07, 0xe3, 0xe0, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x1e, 0x00, 0x7c, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x03, 0xff, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x48, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x48, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x48, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x03, 0x48, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x03, 0xd8, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x58, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x00, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};


void setup()   {    
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display1.begin();
display2.begin();
for (int i =0 ; i<128 ; i++)    // Ponemso a 0 el array
     data[i] = 0 ;
pinMode(bp, INPUT_PULLUP);

attachInterrupt(0, rpm_fun, RISING);
half_revolutions = 0;
  rpm = 0;
  timeold = 0;

}

void loop ()

{
 vbp= digitalRead(bp); //Lecture de l'état du BP
 
 if ((vbp != vbpmem)&&(vbp == LOW)) //si on appuie sur le BP
 {
   mode++; //On incrémente la variable mode
 }
 
vbpmem=vbp; //on mémorise l'état du bouton

 if (mode == nbrmode) //Qd la variable mode vaut nbrmode on la repasse à zéro (ie quand on attend le dernier mode)
 {
   mode=0;
 }
 switch (mode) //Application du mode
 {
   case 0:  
   display1.clearDisplay();
   display2.clearDisplay();
   Start();
   break;
   
   case 1:
   display1.clearDisplay();
   display2.clearDisplay();    
   TempEcIa();
   TempExtBatt();
   delay(400);
   break;
   
   case 2:
   display1.clearDisplay();
   display2.clearDisplay();
   Lambda();
   delay(200);
   break;
   
   case 3:
   display1.clearDisplay();
   display2.clearDisplay();
   //display2.display();
   MAP();
   TPS();
   delay(200);
   break;

   case 4:
   display1.clearDisplay();
   display2.clearDisplay();
   display2.display();
   Rpm();
   ///////////
   break;

   case 5:
   display1.clearDisplay();
   display2.clearDisplay();
   //display2.display();
   graphbatt();
   graphbattlinea();
   //graphect();
   ////////////////
   break;
   
   case 6:
   display1.clearDisplay();
   display2.clearDisplay();
   display2.display();
   graphect();
   ///////////////////
   break;

   case 7:
   display1.clearDisplay();
   display2.clearDisplay();
   display2.display();
   graphiat();
   ///////////////////
   break;

   case 8:
   display1.clearDisplay();
   display2.clearDisplay();
   graphVo2();
   grapho2linea();
   break;


   
 }
}

void Start()
{
 display1.drawBitmap(0, 0,  honda, 128, 32, 1);
display2.drawBitmap(0, 0,  honda, 128, 32, 1);
 display1.display();
display2.display();
}

void TempEcIa()         // Engine coolant Temp sensor (A0)
{                       // Intake Air Temp sensor     (A1)
   
 double ECT = analogRead(A0);  //ENGINE COOLANT TEMPERATURE // Calcul de la tension sur la borne analogique
 double V =  (ECT / 1024) * V_IN;
 double Rth = (Rref * V )/(V_IN - V); //Calcul de la résistance de la thermistance
 //Serial.print("Rth = ");
 //Serial.print(Rth);
 double kelvin = SteinhartHart(Rth);//Calcul de la température en kelvin( Steinhart and Hart)
 double celsius = kelvin - 273.15+8; //Conversion en celsius (+8 coeff yolo)
 //Serial.print("Ohm  -  T = ");
 double IATb = analogRead(A1); // INTAKE AIR TEMPERATURE
 double VAb =  IATb / 1024 * V_IN;
 double RthAb = (Rref * VAb ) / (V_IN - VAb);
 double kelvinAb = SteinhartHart(RthAb);
 double celsiusAb = kelvinAb - 273.15+6.5;
 
 display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("ECT:");display1.print(celsius);
 display1.setTextSize(1);
 display1.println("\xf7""c");
 
 display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,16);
 display1.print("IAT:");display1.print(celsiusAb);
 display1.setTextSize(1);
 display1.println("\xf7""c");
 display1.display();
 }

void TempExtBatt()                      // Outdoor Temperature IAT sensor or another (A2)
{                                       // Battery Voltage    (A3)
 display1.clearDisplay();
 double IAT = analogRead(A2);
 double VA =  IAT / 1024 * V_IN;
 double RthA = (Rref * VA ) / (V_IN - VA);
 double kelvinA = SteinhartHart(RthA);
 double celsiusA = kelvinA - 273.15+6.5;
 
 volt = analogRead(A3);
 vout = (volt * 5.0) / 1024.0;
 vin = vout / (R2/(R1+R2));            //  Calcul pont diviseur
 
display2.setTextColor(WHITE);
display2.setCursor(0,0);
display2.setTextSize(2);
display2.print("T");
display2.setCursor(9,7);
display2.setTextSize(1);
display2.print("ext");
display2.setTextSize(2);
display2.setCursor(27,1);
display2.print(":");
display2.setCursor(39,1);
display2.print(celsiusA);
display2.setTextSize(1);
display2.println("\xf7""c");

 
display2.setTextColor(WHITE);  
display2.setTextSize(2);
display2.setCursor(0,16);
display2.print("V");
display2.setTextSize(1);
display2.setCursor(13,23);
display2.print("batt");
display2.setTextSize(2);
display2.setCursor(37,16);
display2.print(":");
display2.setTextSize(2);
display2.setCursor(49,16);
display2.print(vin);
display2.setTextSize(1);
//display2.setCursor(110,23);
display2.println("V");
display2.display();
}

void Lambda()                   //o2Sensor narrow band, 1Volt o2signal (A4)
{
if (half_revolutions >= 24) {
    //Update RPM every 20 counts, increase this for better RPM resolution,
    //decrease for faster update
    rpm = 30*100/(millis() - timeold)*half_revolutions;
    timeold = millis();
    half_revolutions = 0;
}
 
 //analogReference(INTERNAL1V1);
 lambda = analogRead(A4);
 mV=lambda*4.88;
 AFR = (lambda-0)*(11.78-17.66)/(1023-0)+17.7 ;
 
display2.setTextSize(2);
display2.setTextColor(WHITE);
display2.setCursor(0,0);
display2.print("\xE5:");display2.println(AFR);

display2.setTextSize(2);
display2.setTextColor(WHITE);
display2.setCursor(0,16);
display2.print("Rpm:");display2.println(rpm, DEC);

display2.display();
display2.clearDisplay();

 display1.clearDisplay();
 display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.println(lambda);

 
 display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,16);
 display1.print("V:");display1.print(mV);
 display1.setTextSize(1);
 display1.println("mV");
 display1.display();
}

void MAP()                    //Manifold Absolute Pressure sensor (A5)
{
 Map = analogRead(A5);
 Psi = (Map-.32)*(10.94-(-13.9))/(1023+ (-13.9));
 psig = Psi-14.7;
 vaccum = psig*2.036021;
 mBar = psig * 0.0689475729; // Convert from psi to bar
//Psi = ((((float)Map/(float)1023+0.04)/0.004)*0.145)-10.15;
//(Map-0.5)*(1023-167.77)/(4.5-0.5)+167.77;
//psia = (Psi-167.77)*(10.6-0.01)/(1023-167.77)+0.01;
//((Map * (0.005) /(0.022)+20)*(0.145)-10.15);

//display2.clearDisplay();
display1.setTextSize(2);
display1.setTextColor(WHITE);
display1.setCursor(0,0);
display1.print("Psi:");display1.print(psig);
//display2.setTextSize(1);
//display2.println("b");

display1.setTextSize(2);
display1.setTextColor(WHITE);
display1.setCursor(0,16);
display1.print("Vac:");display1.print(vaccum);
//display2.setTextSize(1);
//display2.println("");
display1.display();                                                    
//display2.clearDisplay();
}

void TPS()                      // TPS= Throttle Position Switch (A6)
{ display1.clearDisplay();
  int ValueTPS = analogRead(A6);
  float VoltTPS=(ValueTPS*5.0)/1024.0;
  int Tps = map(ValueTPS,0,1023,-18,103)+5;
 
display2.setTextSize(2);
display2.setCursor(0,0);
display2.print("TPS:");display2.print(Tps);
display2.setTextSize(1);
display2.println("%");
display2.setTextSize(2);
display2.setCursor(0,16);
display2.print("V");
display2.setTextSize(1);
display2.setCursor(13,23);
display2.print("TPS");
display2.setTextSize(2);
display2.setCursor(37,16);
display2.print(":");
display2.setTextSize(2);
display2.setCursor(49,16);
display2.print(VoltTPS);
display2.setTextSize(1);
//display2.setCursor(110,23);
display2.println("V");
display2.display();

}
void rpm_fun()
{
  half_revolutions++;
  //Each rotation, this interrupt function is run twice
}


void Rpm()
{
//display2.clearDisplay();
// display1.display();
 
if (half_revolutions >= 24) {
    //Update RPM every 20 counts, increase this for better RPM resolution,
    //decrease for faster update
    rpm = 30*100/(millis() - timeold)*half_revolutions;
    timeold = millis();
    half_revolutions = 0;
    //Serial.println(rpm,DEC);  
}
display1.setTextSize(2);
display1.setTextColor(WHITE);
display1.setCursor(0,0);
display1.print("Rpm:");display1.println(rpm, DEC);

//draw the bar graph
 display1.fillRect(rpm/100, 25, 128 - rpm/100, 6, BLACK);
 display1.fillRect(0, 25, rpm/100, 6, WHITE);
 for (i = 1; i < 13; i++)
 {
   display1.fillRect(i * 10, 25, 2, 6, BLACK);
 }

display1.display();                                                    
//display1.clearDisplay();  
  delay(100);
}

void graphbatt()
{
display2.clearDisplay();
 volt = analogRead(A3);
 vout = (volt * 5.0) / 1024.0;
 vin = vout / (R2/(R1+R2));
 v = volt  / 7.99;

 display1.setTextSize(1);
 // note set the background color or the old text will still display
 display1.setTextColor(WHITE, BLACK);
 display1.setCursor(17, 0);
 display1.println("BATTERY VOLTAGE");
 //display1.println(Format(v * 7.99 / 204.6, 0, 3));
 display1.setCursor(43, 12);
 display1.print(vin);display1.println("V");

 //draw the bar graph
 display1.fillRect(v, 25, 128 - v, 6, BLACK);
 display1.fillRect(0, 25, v, 6, WHITE);
 for (i = 1; i < 13; i++)
 {
   display1.fillRect(i * 10, 25, 2, 6, BLACK);
 }
 display1.display();
}

void grapho2linea()
{
 display1.clearDisplay();
display2.clearDisplay();
 
 index = index % 128 ;
 data[index] = 16 * analogRead(A4)/(128) ;// (128) resolution
 index++ ;
 lambda = analogRead(A4);
 int AFR = (lambda * 4.88);
 
 byte i = index ;
 for (byte x = 0 ;  x<128 ; x++)
    {
      i = i % 128 ;
//display2.drawPixel( x, data[i++], 1);
display2.drawLine(x, data[i], x-1, data[i-1], 1);    
      i++ ;
    }
display2.setTextSize(1);
display2.setTextColor(WHITE);
display2.setCursor(12,25);
display2.print("O2 Sensor:");display2.print(AFR);
display2.print(" mV");
display2.display();    
 delay(10);  
}

void graphVo2()
{
display2.clearDisplay();
 volt = analogRead(A4);
 vout =volt*4.88; //(volt * 5.0) / 1024.0;
 //vin = vout / (R2/(R1+R2));
 v = volt  / 1.59;     //1.99= (1023/4)/128

 display1.setTextSize(1);
 display1.setTextColor(WHITE, BLACK);// note set the background color or the old text will still display
 display1.setCursor(13, 0);
 display1.println("O2 SENSOR VOLTAGE");
 //display1.println(Format(v * 7.99 / 204.6, 0, 3));
 display1.setCursor(35, 12);
 display1.print(vout);display1.println(" mV");

 //draw the bar graph
 display1.fillRect(v, 25, 128 - v, 6, BLACK);
 display1.fillRect(0, 25, v, 6, WHITE);
 for (i = 1; i < 13; i++)
 {
   display1.fillRect(i * 10, 25, 2, 6, BLACK);
 }
 display1.display();
}

void graphbattlinea()
{
 display1.clearDisplay();
display2.clearDisplay();
 index = index % 128 ;
 data[index] = 16 * analogRead(A3)/(1024) ;
 index++ ;
 volt = analogRead(A3);
 vout = (volt * 5.0) / 1024.0;
 vin = vout / (R2/(R1+R2));
  v = volt  / 7.99;
 
 byte i = index ;
 for (byte x = 0 ;  x<128 ; x++)
    {
      i = i % 128 ;
display2.drawPixel( x, data[i++], 1);
//display2.drawLine(x, data[i], x-1, data[i-1], 1);    
 //i++ ;
    }    
display2.setTextSize(1);
display2.setTextColor(WHITE);
display2.setCursor(5,23);
display2.print("Batt Voltage:");display2.print(vin);
display2.print("V");
display2.display();    
 delay(10);  
}

void graphect()
 {
display2.clearDisplay();
 double ECT = analogRead(A0);  //ENGINE COOLANT TEMPERATURE // Calcul de la tension sur la borne analogique
 v= ECT/3.99;
 double V =  (ECT / 1024) * V_IN;
 double Rth = (Rref * V )/(V_IN - V); //Calcul de la résistance de la thermistance
 //Serial.print("Rth = ");
 //Serial.print(Rth);
 double kelvin = SteinhartHart(Rth);//Calcul de la température en kelvin( Steinhart and Hart)
 double celsius = kelvin - 273.15+8; //Conversion en celsius (+8 coeff yolo)
 //Serial.print("Ohm  -  T = ");
 display1.setTextSize(1);
 // note set the background color or the old text will still display
 display1.setTextColor(WHITE, BLACK);
 display1.setCursor(6, 0);
 display1.println("ENGINE COOLANT TEMP");
 //display1.println(Format(v * 7.99 / 204.6, 0, 3));
 display1.setCursor(35, 12);
 display1.print(celsius);display1.println("\xf7""C");

 //draw the bar graph
 display1.fillRect(v, 25,   v, 6, BLACK);    //pour tension   display1.fillRect(0, 25, 128-v , 6, WHITE)
 display1.fillRect(0, 25, 128-v , 6, WHITE); //                display1.fillRect(0, 25, v , 6, WHITE)
 for (i = 1; i < 13; i++)
 {
 display1.fillRect(i * 10, 25, 2, 6, BLACK);
 }
 display1.display();
}

void graphectlinea()
{
}

void graphiat()
{
display2.clearDisplay();
 double IATb = analogRead(A1);  //calcul de la tension sur la borne analogique
 v= IATb/3.99;
 double V =  (IATb / 1024) * V_IN;
 double Rth = (Rref * V )/(V_IN - V); //Calcul de la résistance de la thermistance
 //Serial.print("Rth = ");
 //Serial.print(Rth);
 double kelvin = SteinhartHart(Rth);//Calcul de la température en kelvin( Steinhart and Hart)
 double celsius = kelvin - 273.15+8; //Conversion en celsius (+8 coeff yolo)
 //Serial.print("Ohm  -  T = ");
 display1.setTextSize(1);
 // note set the background color or the old text will still display
 display1.setTextColor(WHITE, BLACK);
 display1.setCursor(17, 0);
 display1.println("INTAKE AIR TEMP");
 //display1.println(Format(v * 7.99 / 204.6, 0, 3));
 display1.setCursor(35, 12);
 display1.print(celsius);display1.println("\xf7""C");
 
 //draw the bar graph
 display1.fillRect(v, 25,   v, 6, BLACK);    //TEMP////  pour TENSION ecrire   display1.fillRect(0, 25, 128-v , 6, WHITE)
 display1.fillRect(0, 25, 128-v , 6, WHITE); //                display1.fillRect(0, 25, v , 6, WHITE)
 for (i = 1; i < 13; i++)
 {
 display1.fillRect(i * 10, 25, 2, 6, BLACK);
   }
 display1.display();
}

void graphiatlinea()
{
}

void graphmap()
{
display2.clearDisplay();
 Map = analogRead(A5);
 Psi = (Map-.32)*(10.94-(-13.9))/(1023+ (-13.9));
 psig = Psi-14.7;
 //(Map-0.5)*(1023-167.77)/(4.5-0.5)+167.77;
 //psia = (Psi-167.77)*(10.6-0.01)/(1023-167.77)+0.01;
 //Psi = ((((float)Map/(float)1023+0.04)/0.004)*0.145)-10.15;
 //((Map * (0.005) /(0.022)+20)*(0.145)-10.15); // Calculate psi from raw value
 v=Map/7.99;

 display1.setTextSize(1);
 display1.setTextColor(WHITE);
 display1.setCursor(2, 0);
 display1.println("Manifold Absolute Pressure");
 //display1.println(Format(v * 7.99 / 204.6, 0, 3));
 display1.setCursor(43, 12);
 display1.print(psig);display1.println("");

 //draw the bar graph
 display1.fillRect(v, 25, 128 - v, 6, BLACK);
 display1.fillRect(0, 25, v, 6, WHITE);
 for (i = 1; i < 13; i++)
 {
   display1.fillRect(i * 10, 25, 2, 6, BLACK);
 }
 display1.display();
//display2.clearDisplay();
display2.setTextSize(2);
display2.setTextColor(WHITE);
display2.setCursor(0,0);
display2.print("Psi:");display2.print(Psi);
display2.setTextSize(1);
display2.println("b");  
}





void testscrolltext(void) {
 display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(10,0);
 display1.clearDisplay();
 display1.drawBitmap(0, 0,  honda, 128, 64, 1);
 display1.display();

 display1.startscrollright(0x00, 0x0F);
 delay(2000);
 display1.stopscroll();
 delay(1000);
 display1.startscrollleft(0x00, 0x0F);
 delay(2000);
 display1.stopscroll();
 delay(1000);    
 display1.startscrolldiagright(0x00, 0x07);
 delay(2000);
 display1.startscrolldiagleft(0x00, 0x07);
 delay(2000);
 display1.stopscroll();
}


/*if (AFR > 1000) //&& AFR < 1000)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("Rich");

}



if (AFR > 945 && AFR <= 1000)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("12");

}

if (AFR > 900 && AFR <= 945)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("12.5");

}

if (AFR > 855 && AFR <= 900)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("13.2");

}

if (AFR > 810 && AFR <= 855)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("13.8");

}

if (AFR > 540 && AFR <= 810)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("14.3");

}
if (AFR > 225 && AFR <= 540)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("14.4");

}

if (AFR > 180 && AFR <= 225)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("14.7");

}

if (AFR > 135 && AFR <= 180)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("14.9");

}

if (AFR > 45 && AFR <= 135)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("15");

}

if (AFR <45)
{display1.clearDisplay();
display1.setTextSize(2);
 display1.setTextColor(WHITE);
 display1.setCursor(0,0);
 display1.print("\xE5:");display1.print("Learn");

}*/



(Modification du message : 27-01-2017, 21:53:32 par Soupraa.)
Retourner en haut
Trouver Répondre
supertotof78 Hors ligne
Active Member
***

Subaru Impreza GT
41 - Loir-et-Cher France
Messages : 294
Sujets : 24
Inscription : Mar 2004
Réputation : 0
28-01-2017, 10:37:08   -   RE: [Civic] temp+ MAP +Throttle+ RPM+ volt Arduino
Salut.

Je m'étais fait aussi un afficheur sur la Legacy. Il permettait de voir T° et P d'huile (sondes ajoutées), rpm (signal repiqué sur compteur) pour intégrer des alarmes, shiftlight, boost, T° eau etc...

J'avais intégré l'afficheur dans le bloc compte tour.

Le plus dur a été le communication avec l'ECU...

Avant de mettre en stand by le projet (rip Legacy), j'avais commencé à travailler sur un affichage type LCD. C'était prometteur (juste galère pour gérer la memoire déportée sur carte SD pour ne pas alourdir le programme).

Impreza GT de 99 light: en cours de remise en route

Legacy Turbo: RIP et merci de m'avoir fait découvrir cet univers.

Mon daily: Chevrolet Trailblazer 2002. 6L 4.2 et 270ch: Va bien pour tracter le plateau.

Porsche 944 2.5 8s 163ch de 1985 (pas celle de l'avatar...)
Retourner en haut
Trouver Répondre
boyou2 Hors ligne
Heavy Foot Castratore
Moderateurs

Shetland Tricouille
- France
Messages : 27 326
Sujets : 132
Inscription : Nov 2005
Réputation : 61
28-01-2017, 14:19:35   -   RE: [Civic] temp+ MAP +Throttle+ RPM+ volt Arduino
interessant ton partage, ça fait super plaisir Big Grin

L'écrit est trompeur, on a l'impression parfois que l'autre est sec dans la réponse, parce que la tonalité avec lesquelles les choses sont pensées et qui ressortiraient à l'oral n'apparaissent pas à l'écrit...

Un forum est un endroit d'entraide, ce qui veut dire échange d'idées, d'experiences personnelles et professionnelles. Pas un site ou l'on vient prendre ce qu'on pense acquis de droit. Ca c'est quand on paie un garage pour réparer sa voiture. Si vous ne comprenez pas ce principe simple, vous n'avez rien à faire sur ce forum.
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
28-01-2017, 19:05:25   -   RE: [Civic] temp+ MAP +Throttle+ RPM+ volt Arduino
Hey merci

bien je veux ton code alors partage le
car je veux rpm autre que par le capteur haull de l'allumeur
moi je ne veux rien rajouter lire directement les signaux analogique de la honda

le plus dur convertir signal analog en numerique avec la bonne formule
moi je lis la valeur brute et la converti pour afficher comme je veux
si non on peut foutre l'arduino en rx/tx de notre ecu et aller lire l'eprom de l'ecu comme tu as fait. OU RAJOUTER DES MANO MAIS LA PLUS AUCUN PLAISIR


alors je suis passer a l'arduino Mega car mon uno n'avait pas assez d'entree analog

2 ecrans OLED 128*32
1 boutton poussoir pour le changement de mode

LOGO HONDA OPPPPPPPPPPP et tout autre image convertie en hexadecimal
ect ok
iat ok
temp exterieur
tension batt
tension Lambda convertie en AFR
 MAP ok en psi et vaccum
TPS ok  en % et volt du TPS
RPM NADA enfin si mais des que je branche arduino  sur le +12 De la honda ca s'effondre
je pense que le signal du capteur hall dans le distributeur est affaibli et du coup ben ca marche plus. mais quand je branche arduino alim pc nikel



[Image: 885043IMG5682.jpg]
[/url]
[Image: 500543IMG5672.jpg]

[Image: 951418IMG5708.jpg]


[Image: 871822IMG5707.jpg]

[Image: 452522IMG5715.jpg]

[Image: 824404IMG5717.jpg]

[Image: 677682IMG5718.jpg]

[Image: 241818IMG5691.jpg]


[Image: 574438IMG5696.jpg]

[Image: 949904IMG5694.jpg]


voila allumeur d15B7
ET throttle body de D16Z6
enfait en sen branle



[Image: 319260IMG5701.jpg]
----------
[Image: 542729IMG5721.png]


j'ai launch control actif a 5500 TRS/Min sur la honda alors voila lors du test

[url=http://www.hostingpics.net/viewer.php?id=542729IMG5721.png]



(Modification du message : 28-01-2017, 19:14:18 par Soupraa.)
Retourner en haut
Trouver Répondre
rodi Hors ligne
Active Member
***


Messages : 963
Sujets : 105
Inscription : Oct 2002
Réputation : 0
31-01-2017, 15:21:04   -   RE: [Civic] PHOTO UP temp+ MAP +Throttle+ RPM+ volt Arduino
suis entrain d'apprendre les base (avec le livre"le grands livre arduino")
pour le moment sans acht de materiel,je me suis fais un schemas de prise de temperature.
ds l'exemple c'est juste une sonde tmp36.
https://circuits.io/circuits/2819956-the...t/edit#bom

le code est leger mais sa fonctionne bien
pas contre en automobilesais pas quoi utiliser comme sondes
ds18b20( temp max125degres programme pas compliquer)

ou ctn
de meme pour la pression huile.

surtout ou les trouver avec la datasheet,et vissable dans les plaque sandwich etc...

avais trouvé sur conrad ctn

http://www.conrad.fr/ce/fr/product/18810...view1&rb=1

l'adapteur pour durites de liquide refroidissement ( m10)
.de meme j'avais fait équation de stein.....hart
http://www.thinksrs.com/downloads/progra...ulator.htm
(Modification du message : 31-01-2017, 15:35:40 par rodi.)
Retourner en haut
Trouver Répondre
vtecman34 Hors ligne
Posting Freak
*****

1994 EG3/EG4 1983 colt
34 - Hérault France
Messages : 5 761
Sujets : 25
Inscription : Dec 2007
Réputation : 24
31-01-2017, 18:05:58   -   RE: [Civic] PHOTO UP temp+ MAP +Throttle+ RPM+ volt Arduino
Pour recuperer le signal rpm tu A essayer juste derriere le compteur ?

[Image: 892369civ2.jpg]
Retourner en haut
Trouver Répondre
DAV4WS Hors ligne
Mineur de corde
*****

- France
Messages : 14 037
Sujets : 42
Inscription : May 2010
Réputation : 10
04-02-2017, 02:41:26   -   RE: [Civic] PHOTO UP temp+ MAP +Throttle+ RPM+ volt Arduino
bravo comme dit ailleur tu peux etre contant de ton travail ! c'est beau !

pour le signal RPM il est donné par la boite de vitesse au compteur et sur d'autre modèle peut etre pris sur le 3eme fils de la bobine d'allumage ( ce donc on avait parlé une fois au nakama) Wink

4WS trajectoire assuré !
-ma prelude Dailyici
-3G 4WS 260Nm race ici
-ma moto ici
-ma toy TA23
toutes pieces /réparations /préparations de prelude 3G en MP
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
10-02-2017, 00:44:15   -   RE: [Civic] PHOTO UP temp+ MAP +Throttle+ RPM+ volt Arduino
[Image: 720082IMG5736.jpg]
----------
(10-02-2017, 00:44:15)Soupraa a écrit : [Image: 720082IMG5736.jpg]

selon le work shop le signal rpm vient de crank sensor, qui es dans l'allumeur

pour utiliser les signaux au compeur faut un oscillo, puisque les signaux sont des pulsation de 0 a 12volts,

je prefere utilisé le capteur crank qui est un effet hall simplement

pour les sondes oui j'ai utiliser le meme site pour les coeff.
le meiux sontt  des sondes numeriques ou sinon a calibrer soi meme si analog



(Modification du message : 10-02-2017, 01:02:23 par Soupraa.)
Retourner en haut
Trouver Répondre
DAV4WS Hors ligne
Mineur de corde
*****

- France
Messages : 14 037
Sujets : 42
Inscription : May 2010
Réputation : 10
12-02-2017, 11:58:54   -   RE: [Civic] AFR Arduino News
super me suis renseigné sur les sonde O2 AFR d'origine et large bande , la seule différence apparemment ce sont les plages sir lesquels ils arrivent a capter la richesse ,
tu avais raison pour de l'atmo une d'origine devrait le faire car elle capte si je ne dit pas de bêtise de 13 à 16 AFR

j'ai libéré mon ostrich , au nakama donc on pourra faire ce que tu sais Wink biz
----------
je risque de te demander des écrans comme ça avec info ECT , IAT ect... pour mes reprogs Yes c'est top

4WS trajectoire assuré !
-ma prelude Dailyici
-3G 4WS 260Nm race ici
-ma moto ici
-ma toy TA23
toutes pieces /réparations /préparations de prelude 3G en MP
(Modification du message : 12-02-2017, 12:08:26 par DAV4WS.)
Retourner en haut
Trouver Répondre
Soupraa Hors ligne
Junior Member
*


Messages : 88
Sujets : 3
Inscription : Sep 2016
Réputation : 1
14-02-2017, 18:36:09   -   RE: [Civic] AFR Arduino News
(12-02-2017, 11:58:54)DAV4WS a écrit : super me suis renseigné sur les sonde O2 AFR d'origine et large bande , la seule différence apparemment ce sont les plages sir lesquels ils arrivent a capter la richesse ,
tu avais raison pour de l'atmo une d'origine devrait le faire car elle capte si je ne dit pas de bêtise de 13 à 16 AFR  

j'ai libéré mon ostrich , au nakama donc on pourra faire ce que tu sais Wink biz
----------
je risque de te demander des écrans comme ça avec info ECT , IAT ect... pour mes reprogs Yes c'est top

Yep ben code pret et a tes souhaits



Retourner en haut
Trouver Répondre
DAV4WS Hors ligne
Mineur de corde
*****

- France
Messages : 14 037
Sujets : 42
Inscription : May 2010
Réputation : 10
15-02-2017, 12:17:48   -   RE: [Civic] AFR Arduino News
superbe veux bien etre ton 1er client Yes
on en parle au nakama l'ami

4WS trajectoire assuré !
-ma prelude Dailyici
-3G 4WS 260Nm race ici
-ma moto ici
-ma toy TA23
toutes pieces /réparations /préparations de prelude 3G en MP
Retourner en haut
Trouver Répondre
DAV4WS Hors ligne
Mineur de corde
*****

- France
Messages : 14 037
Sujets : 42
Inscription : May 2010
Réputation : 10
16-05-2019, 23:56:40   -   RE: [Civic] AFR Arduino News
Ne fais pas le timide montre nous tes belles évolutions depuis Wink

4WS trajectoire assuré !
-ma prelude Dailyici
-3G 4WS 260Nm race ici
-ma moto ici
-ma toy TA23
toutes pieces /réparations /préparations de prelude 3G en MP
(Modification du message : 16-05-2019, 23:57:03 par DAV4WS.)
Retourner en haut
Trouver Répondre



Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  [Civic EG rallye] Prépa ferio news photos P22 bip-bip 663 75 398 06-04-2009, 16:31:08
Dernier message: bip-bip