!!

Avis aux invités: certaines sections de ce forum ne sont accessibles qu'aux membres inscrits.

Pour vous inscrire, il suffit de remplir ce formulaire. Quelques exemples de sections auxquelles vous n'avez pas accès pour l'instant: - L'atelier - Présentation des membres et de leurs Porsche - Partenaires et Guide des bonnes adresses - Petites annonces de pièces détachées

Auteur Sujet: Arduino, qui maitrise?  (Lu 19299 fois)

0 Membres et 1 Invité sur ce sujet

STeppenWolf944

Re : Arduino, qui maitrise?
« Réponse #45 le: 23 Septembre 2013, 20:43:27 »

Hors ligne Nelson

  • Membre intoxiqué
  • *****
  • Messages: 22 484
Re : Arduino, qui maitrise?
« Réponse #46 le: 23 Septembre 2013, 20:48:23 »
avant d'utiliser un oled, je vais tacher de faire hello world sur mon 2x16 :)

STeppenWolf944

Re : Arduino, qui maitrise?
« Réponse #47 le: 23 Septembre 2013, 20:50:11 »
OK  :mrgreen:

c'est un bon début  :merci:

Hors ligne supertotof78

Re : Arduino, qui maitrise?
« Réponse #48 le: 23 Septembre 2013, 21:08:03 »
Le "Hello world", on y arrive tes vite.

Oui, pourquoi pas un oled ou autre en lieu et place de l'instrumentation d'origine, avec aiguilles virtuelles, model able
à l'envie...
« Modifié: 24 Septembre 2013, 06:40:18 par supertotof78 »

Hors ligne Nelson

  • Membre intoxiqué
  • *****
  • Messages: 22 484
Re : Re : Arduino, qui maitrise?
« Réponse #49 le: 23 Septembre 2013, 21:08:52 »
Le "Hello world", on y arrive tes vite.

Ca serait triste que j'arrive pas à ça

Hors ligne supertotof78

Re : Arduino, qui maitrise?
« Réponse #50 le: 26 Septembre 2013, 23:04:33 »
Si ça intéresse quelqu'un ou bien donne des idées:

// Sonde pression1301 fonctionnelle
// sonde température Zeitronix fonctionnelle, sonde grove fonctionnelle
// Intro Subaru
// variation affichage avec bouton
// RPM par prise signal sur alim compt tours
// Thuile ok à 75°
// Thuile chaude à 120° et trop chaude à 140°

 #include <LiquidCrystal.h>
 
LiquidCrystal lcd(7,8,9,10,11,12);
 
  byte subaru1[8] = {
  B00100,
  B00100,
  B01110,
  B11111,
  B01110,
  B00100,
  B00100,
  B00000
  };
  byte subaru2[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00010,
  B00111,
  B00010
  };
  byte subaru3[8] = {
  B00000,
  B00000,
  B00000,
  B00010,
  B00111,
  B00010,
  B00000,
  B00000
  };
  byte subaru4[8] = {
  B01000,
  B11100,
  B01000,
  B00010,
  B00111,
  B00010,
  B00000,
  B00000
  };
  byte subaru5[8] = {
  B01000,
  B11100,
  B01000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
  };
  byte subaru6[8] = {
  B10000,
  B01000,
  B00100,
  B00010,
  B00010,
  B00001,
  B00001,
  B00001
  };
  byte subaru7[8] = {
  B00001,
  B00001,
  B00001,
  B00010,
  B00010,
  B00100,
  B01000,
  B10000
  };
 
 int ledRougePin = 4;
 int ledVertPin = 5;
 int ledBleuPin = 6;
 
 float Thuile=0;
 float Phuile=0;
 float volthuile=0;
 float varThuile=1;
 int c=0;
 int x=0;
 int y=0;
 int z=0;
 
 float psi=0;
 float voltPhuile=0;
 
 float tempin; //calcul température habitacle
 int B=3975; //calcul température habitacle
 float resistance; //calcul température habitacle
 
 float Thuilemax=-50;
 float Phuilemax=0;
 float Phuilemin=10;
 int bouton=0;
 #define valeurMax 6
 
 const char* TempIn="T. In";
 const char* TempEx="T. Ex";
 const char* Batt="Batt.";
 const char* Rpm="RPM";
 char Unite='0';
 const char* Intitule=0;
 float t=0;
 
 int RPM=0;
 float RPMfloat=0;
 int ledRPMPin = 2;
 

 const int numReadingsR = 1500 ;     // Nombre de relevés pour la moyenne rpm
 int readingsR ;  // Variable lecture pour le relevé tension
 int indexR = 0 ;                  // position dans la création de la moyenne
 float totalR = 0 ;                  // Total en cours
 float averageR = 0 ;                // La moyenne
 
 
void setup(){
  pinMode(3, OUTPUT); // 5V pour rétroéclairage (option variation d'intensité)
  digitalWrite(3, HIGH);
  lcd.begin(16, 2); // paramètre lcd
 
  pinMode(13,INPUT); // bouton sur pin 13
  digitalWrite(13, HIGH); // alimentation pin 13
 
  pinMode( ledRougePin, OUTPUT );
  pinMode( ledVertPin, OUTPUT );
  pinMode( ledBleuPin, OUTPUT );
  pinMode( ledRPMPin, OUTPUT );
 
 
  digitalWrite( ledRougePin, HIGH );
  digitalWrite( ledVertPin, HIGH );
  digitalWrite( ledBleuPin, HIGH );
 
  lcd.clear();
 
  lcd.createChar(1, subaru1);
  lcd.createChar(2, subaru2);
  lcd.createChar(3, subaru3);
  lcd.createChar(4, subaru4);
  lcd.createChar(5, subaru5);
  lcd.createChar(6, subaru6);
  lcd.createChar(7, subaru7);
 
 
  lcd.setCursor(0,0);
  lcd.print((char)1); lcd.print((char)2);
  lcd.setCursor(3,0); lcd.print((char)6);
  lcd.setCursor(3,1); lcd.print((char)7);
  lcd.setCursor(6,0); lcd.print("SUBARU");
  lcd.setCursor(0,1); lcd.print((char)3);lcd.print((char)4); lcd.print((char)5);

  delay(3000); // Ecran vide 5 seconde
  lcd.clear();
 
  for (int positionCounter = 0; positionCounter < 12; positionCounter++) {
    // Décalle le curseur de 12 colonnes vers la gauche
    lcd.scrollDisplayLeft();
    }
   
  lcd.print("LEGACY TURBO");
 
  for (int positionCounter = 0; positionCounter < 14; positionCounter++) {
    // Décalle le texte vers la droite et le centre
    lcd.scrollDisplayRight();
    // wait a bit:
    delay(150);   }
 
  // Réinitialisation de l'affichage et de la position du curseur
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("  LEGACY TURBO");
  delay(1000);
     
  lcd.setCursor(16,1);
  lcd.print("Bienvenue a bord");
     
  for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
    // scroll one position right:
    lcd.scrollDisplayLeft();
    // wait a bit:
    delay(150);   }
       
  lcd.clear();
  lcd.setCursor(2,0);
  lcd.print("LEGACY TURBO");
  lcd.setCursor(0,1);
  lcd.print("Bienvenue a bord");
  delay(2000);
  lcd.clear();
}
 
 void loop(){
 // Interprétation sonde temperature grove
  resistance=(float)(1023-analogRead(A4))*10000/analogRead(A4);
  tempin=1/(log(resistance/10000)/B+1/298.15)-273.15;
   
  volthuile=analogRead(A1)*5.0/1024.0;
  varThuile=0.5608*volthuile+1.4498;
  if(varThuile<2.02){Thuile=((440.12*pow(volthuile,4)-1493.9*pow(volthuile,3)+1881.8*pow(volthuile,2)-1083.8*volthuile+335.06))/varThuile;}
  if(varThuile>2.02){Thuile=((0.1541*pow(volthuile,4)-2.6435*pow(volthuile,3)+17.306*pow(volthuile,2)-60.03*volthuile+124.59))/varThuile;}
 
  voltPhuile=analogRead(A0)*5.0/1024.0;
  psi=(37.5*(voltPhuile))-18.75;
  Phuile=psi/14.51; // conversion en bar
  if (Phuile<0) {Phuile==0;}
 
  if(Thuile<75) {Thuilefroide();}
  if(Thuile>75 and Thuile<110) {Thuileok();}
  if(Thuile>115 and Thuile<130) {Thuilechaude();}
  if(Thuile>130) {Thuiletropchaud();}
 
  if (Thuile>Thuilemax) {Thuilemax=Thuile;}
  if (Phuile>Phuilemax) {Phuilemax=Phuile;}
  if (Phuile<Phuilemin) {Phuilemin=Phuile;}
 
  // Convertir le signal du compte tours (moyenné pour lisser l'affichage)
  while(indexR< numReadingsR) {         
    readingsR = analogRead (5) ;
    totalR = totalR + readingsR ;         
    indexR = indexR + 1 ;  }
                   
  indexR = 0 ;
  averageR = totalR / numReadingsR ;
  RPMfloat=averageR*10.3;
  RPMfloat=RPMfloat/10;
  RPM=RPMfloat;
  RPM=RPM*10;
  totalR=0;
 
  if(RPM<=6000) {delay(200);}
  if(RPM>6800) {delay(300);}
  if(RPM>6000 and RPM<6800) { for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=50) {
  analogWrite(ledRPMPin, fadeValue);         
  delay(10);                           
  }
   for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=50) {
    // sets the value (range from 0 to 255):
    analogWrite(ledRPMPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect   
    delay(10);                           
  } }
 
  if(RPM>6800) {digitalWrite(2, HIGH); }
 
 
  if (digitalRead(13)==HIGH) // incrément x par appui bouton
  { lcd.clear();
    if (bouton<valeurMax){ bouton++;} else {bouton=0;}
    delay(200);
    while((digitalRead(13)==HIGH));
  }
 
  switch (bouton) { // en fonction de la valeur de x, on modifie l'affichage
   case 0: Intitule=Batt; t=0; Unite='V'; break;
   case 1: Intitule=TempIn; t=tempin; Unite=(char)223; break;
   case 2: Intitule=TempEx; t=0; Unite=(char)223; break;
   case 3: Intitule=Rpm; t=RPM; Unite=' '; break;
   case 4: lcd.setCursor(0,0); lcd.print("T huile maxi:");
           lcd.setCursor(0,1); lcd.print(Thuilemax);
           lcd.print((char)223); lcd.print("C"); break;
   case 5: lcd.setCursor(0,0); lcd.print("P huile maxi:");
           lcd.setCursor(0,1); lcd.print(Phuilemax);
           lcd.print("b"); break;       
   case 6: lcd.setCursor(0,0); lcd.print("P huile mini.");
           lcd.setCursor(0,1); lcd.print(Phuilemin);
           lcd.print("b"); break;}
 
  // Affichage sur lcd
  if (bouton<4) {
   lcd.clear();
   lcd.setCursor(0,0); lcd.print("OilT");
   lcd.setCursor(6,0); lcd.print("OilP");
   lcd.setCursor(11,0); lcd.print(Intitule);
   lcd.setCursor(0,1);
   if(Thuile<100) {lcd.print(Thuile, 1);} else {lcd.print(Thuile, 0);}
   lcd.print((char)223);
   lcd.setCursor(6,1); lcd.print(Phuile, 1); lcd.print("b");
   lcd.setCursor(11,1);
   if(Intitule==Batt || Intitule==TempEx) {lcd.print(" No");}
   if(Intitule==TempIn){lcd.print(t, 1);}
   if(Intitule==Rpm){lcd.print(t, 0);}
   if(Intitule==TempIn || Intitule==Rpm){lcd.print(Unite);}
  }
  delay(50);
}
 
 
void Thuilefroide(){
   int iBleu = Thuile*3.1875; iBleu>0;
   int iVert = 255 - iBleu;
   analogWrite( ledBleuPin, iBleu );
   analogWrite( ledVertPin, iVert );
  }

void Thuileok(){
  digitalWrite( ledRougePin, HIGH );
  digitalWrite( ledVertPin, HIGH );
  digitalWrite( ledBleuPin, HIGH );
 
  if (y==0) {
    x=0;
    y++;
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("       GO       ");
   for (x==0; x<6; x++) {
   lcd.setCursor(0,1);
   lcd.print("  ! ! !  ! ! !  ");
   delay(250);
   lcd.clear(); lcd.setCursor(0,0);    lcd.print("       GO       ");
   delay(250); lcd.setCursor(0,1);  lcd.print("  ! ! !  ! ! !  "); }
}}

void Thuilechaude(){
   int iVert = Thuile*6-593; iVert>127;
   analogWrite( ledRougePin, 0 );
   analogWrite( ledVertPin, iVert );
 }

void Thuiletropchaud(){
  digitalWrite( ledRougePin, LOW );
  digitalWrite( ledVertPin, HIGH );
  digitalWrite( ledBleuPin, HIGH );
     
   if (z==0) {
   x=0;
   z++;
   lcd.print("ARRET  IMPERATIF");
   for (x==0; x<6; x++) {
   lcd.setCursor(0,1);
   lcd.print("  ! ! !  ! ! !  ");
   delay(250);
   lcd.clear(); lcd.setCursor(0,0);    lcd.print("ARRET  IMPERATIF");
   delay(250); lcd.setCursor(0,1);  lcd.print("  ! ! !  ! ! !  ");}
  }}

 

Hors ligne Nelson

  • Membre intoxiqué
  • *****
  • Messages: 22 484
Re : Re : Arduino, qui maitrise?
« Réponse #51 le: 26 Septembre 2013, 23:23:08 »
Si ça intéresse quelqu'un ou bien donne des idées:

carrement !
merci, j'vais tacher de decrypter tout ça

ps : j'ai commandé les pin header lundi, ils sont arrivés aujourd'hui, Nickel !

Hors ligne find944

  • Membre pilier
  • ****
  • Messages: 1 299
Re : Arduino, qui maitrise?
« Réponse #52 le: 28 Septembre 2013, 18:12:19 »
Ca a l'air amusant votre truc...  :mrgreen:

Ma 944 n'a pas d'ODB digne de ce nom pour que cela soit exploitable, et en plus j'ai pas du faire une ligne de C depuis 15 ans  :mrgreen:

Amusez vous bien ;)
944s AM '87 (LM3A)

Hors ligne supertotof78

Re : Arduino, qui maitrise?
« Réponse #53 le: 28 Septembre 2013, 19:35:25 »
Je te rassure, je ne suis ni informaticien, ni électronicien.

Un peu d'esprit scientifique, de logique. Bien lire les datasheets des éléments utilisés et go!

Ca peut très bien aller sur une 944: Pour le moment, je ne communique pas du tout avec l'ecu de ma Legacy. Tout fonctionne à partir de sondes que j'ai ajoutées (non présentes d'origine) et de signaux électriques repiqués et interprétés (régime moteur).

Après, le plus compliqué a été d'intégrer un écran sans dénaturer l'habitacle... Dans la 944, je ne me rappelle plus comment est fichu le bloc instruments. Dans la Legacy, j'avais juste assez de place: J'ai un peu élagué à la dremel et cherché sur le net pour un lcd le moins encombrant possible.

Hors ligne find944

  • Membre pilier
  • ****
  • Messages: 1 299
Re : Arduino, qui maitrise?
« Réponse #54 le: 28 Septembre 2013, 19:41:26 »
Oui, il faut mettre des sondes, ca peut le faire. Dans ce cas, l'afficheur peut être intégré dans un cache et mis sous l'autoradio (Phase 2) à la place du vide poche, pour préserver le reste.

944s AM '87 (LM3A)

Hors ligne Nelson

  • Membre intoxiqué
  • *****
  • Messages: 22 484
Re : Arduino, qui maitrise?
« Réponse #55 le: 28 Septembre 2013, 19:53:35 »
en meme temps a part la temperature d'huile il y a quasi tout dans une 944...

Hors ligne find944

  • Membre pilier
  • ****
  • Messages: 1 299
Re : Arduino, qui maitrise?
« Réponse #56 le: 28 Septembre 2013, 20:00:08 »
Net, y manque pas grand chose ;)
c'est histoire de faire joujou avec la chose.
944s AM '87 (LM3A)

Hors ligne supertotof78

Re : Arduino, qui maitrise?
« Réponse #57 le: 28 Septembre 2013, 20:08:39 »
Se faire un shift light, une alarme pour la température d'huile (trop basse pour attaquer, trop haute = arrête-toi), une alerte si la température extérieure descend sous 0, un indicateur de rapport de boite... Enfin, il y a plein de trucs à imaginer!

STeppenWolf944

Re : Arduino, qui maitrise?
« Réponse #58 le: 28 Septembre 2013, 20:38:32 »
et ca permet surtout de virer l'horloge de bord  :mdr8:

Hors ligne Agato

  • Ghostbuster atomique
  • Membre intoxiqué
  • *****
  • Messages: 25 482
  • Aura : incommensurable
  • Ville: , riviera varoise
Re : Arduino, qui maitrise?
« Réponse #59 le: 28 Septembre 2013, 20:53:00 »
... ou de la reproduire virtuellement, en plus du reste ;)
starving trolls one at a time - not playing chess with pigeons, for obvious reasons