reprogrammation moto

Salut à tous, je suis Eric Dit "Chucky", débutant en Arduino mais 26 années de bricolage en tous genres sur moto principalement. Je suis tombé sur la carte Mega 2560 un peu par hasard, et l'ai rapidement considérée comme un atout pour l'intégration de l'éléctronique et sa programmation sur mes véhicules. J'ai donc fait l'acquisition d'une extension Speeduino, qui sera le programmateur de l'injection et de l'allumage via le logiciel Tuner Studio, et une Mega 2560 couplée à une carte 8 relais pour commander phares, klaxon, clignos, feu arrière.... Je bute cependant sur un problême de codage, je souhaite en fait créer une sorte d'auto test à l'allumage du contact de la moto, c'est à dire allumer chaque lampe 1/2 seconde en cascade, façon chenillard pour contrôler leur état et donner un effet supplémentaire, histoire de justifier l'Arduino à ce niveau... J'ai déjà un code qui marche pour les diverses commandes simples, pouvez vous m'aider à réaliser la fonction de test à la mise sous tension? merci déjà d'avoir supporté mes explications .... :)

Normalement le code se mets entre balises et lorsque l'on demande de corriger le premier post, c'est le premier message qu'il faut corriger...

hello merci de mettre ton code entre balises

oups pardon j’ai pas compris le fonctionnement des balises… je recommence

void setup() {

  pinMode(A0, INPUT_PULLUP);              //code
  pinMode(A1, INPUT_PULLUP);              //phare
  pinMode(A2, INPUT_PULLUP);              //feu arrière
  pinMode(A3, INPUT_PULLUP);              //cligno gauche
  pinMode(A4, INPUT_PULLUP);              //cligno droit
  pinMode(A5, INPUT_PULLUP);              //klaxon
  pinMode(A6, INPUT_PULLUP);   //libre
  pinMode(2, OUTPUT);                     //code
  pinMode(3, OUTPUT);                     //phare
  pinMode(4, OUTPUT);                     //feu arrière
  pinMode(5, OUTPUT);                     //cligno gauche
  pinMode(6, OUTPUT);                     //cligno droit
  pinMode(7, OUTPUT);                     //klaxon
  pinMode(8, OUTPUT);          //libre
  pinMode(9, OUTPUT);          //libre
}

void loop() {
 
  int sensorVal1 = digitalRead(A0);
  int sensorVal2 = digitalRead(A1);
  int sensorVal3 = digitalRead(A2);
  int sensorVal4 = digitalRead(A3);
  int sensorVal5 = digitalRead(A4);
  int sensorVal6 = digitalRead(A5);
  int sensorVal7 = digitalRead(A6);
  
  if (sensorVal1 == HIGH) {              //code
    digitalWrite(2, HIGH);
  }  else {
    digitalWrite(2, LOW);
  }
  if (sensorVal2 == HIGH) {             //phare
    digitalWrite(3, HIGH);
  } else {
    digitalWrite(3, LOW);
  }
  if (sensorVal3 == HIGH) {             //feu arrière
    digitalWrite(4, HIGH);
  } else {
    digitalWrite(4, LOW);
  }
  if (sensorVal4 == LOW) {                //clignotant gauche
    digitalWrite(8, millis() / 500 % 2 );
  } else {
    digitalWrite(8, HIGH);
  } 
    if (sensorVal5 == LOW) {             //clignotant droit
    digitalWrite( 9 , millis() / 500 % 2 );
  } else {
    digitalWrite(9, HIGH); 
  }   
   if (sensorVal6 == HIGH) {             //klaxon
    digitalWrite(5, HIGH);
  } else {
    digitalWrite(5, LOW);
 
 }
}

j’crois qu’cest bon la…ya pas qu’arduino que je débute :confused:

ok, c’est le ok dans le premier post que tu aurai du mettre entre balises. :slight_smile:

si ton code est bien fonctionnel, celui ci devrai faire ce que tu veux

void setup() {

  pinMode(A0, INPUT_PULLUP);              //code
  pinMode(A1, INPUT_PULLUP);              //phare
  pinMode(A2, INPUT_PULLUP);              //feu arrière
  pinMode(A3, INPUT_PULLUP);              //cligno gauche
  pinMode(A4, INPUT_PULLUP);              //cligno droit
  pinMode(A5, INPUT_PULLUP);              //klaxon
  pinMode(A6, INPUT_PULLUP);   //libre
  pinMode(2, OUTPUT);                     //code
  pinMode(3, OUTPUT);                     //phare
  pinMode(4, OUTPUT);                     //feu arrière
  pinMode(5, OUTPUT);                     //cligno gauche
  pinMode(6, OUTPUT);                     //cligno droit
  pinMode(7, OUTPUT);                     //klaxon
  pinMode(8, OUTPUT);          //libre
  pinMode(9, OUTPUT);          //libre

  test();
}

void test()
{
  for(byte f =2;f<=9;f++)
  {
   digitalWrite(f, LOW); //actionne le périphérique qui est sur la sortie concernée sortie
   delay(1000);
   digitalWrite(f, HIGH);//met au repos le périphérique qui est sur la sortie concernée sortie
  }
}
void loop() {
 
  int sensorVal1 = digitalRead(A0);
  int sensorVal2 = digitalRead(A1);
  int sensorVal3 = digitalRead(A2);
  int sensorVal4 = digitalRead(A3);
  int sensorVal5 = digitalRead(A4);
  int sensorVal6 = digitalRead(A5);
  int sensorVal7 = digitalRead(A6);
 
  if (sensorVal1 == HIGH) {              //code
    digitalWrite(2, HIGH);
  }  else {
    digitalWrite(2, LOW);
  }
  if (sensorVal2 == HIGH) {             //phare
    digitalWrite(3, HIGH);
  } else {
    digitalWrite(3, LOW);
  }
  if (sensorVal3 == HIGH) {             //feu arrière
    digitalWrite(4, HIGH);
  } else {
    digitalWrite(4, LOW);
  }
  if (sensorVal4 == LOW) {                //clignotant gauche
    digitalWrite(8, millis() / 500 % 2 );
  } else {
    digitalWrite(8, HIGH);
  }
    if (sensorVal5 == LOW) {             //clignotant droit
    digitalWrite( 9 , millis() / 500 % 2 );
  } else {
    digitalWrite(9, HIGH);
  }   
   if (sensorVal6 == HIGH) {             //klaxon
    digitalWrite(5, HIGH);
  } else {
    digitalWrite(5, LOW);
 
 }
}

ah oui ya une fonction qui se charge de faire le codage test... des bytes de 2 à 9 si je comprends bien. ben merci dfgh, j'essaye et fais le retour. A +

Super ça fonctionne bien, je vais apporter quelques modifs de durée et essayer de faire allumer les lampes une à une, mais la trame est là, merci encore dfgh. ;D :wink:

Juste deux remarques : une MEGA me semble absolument inadaptée. Ce n'est pas parce que tu réussis à faire un montage sur table que ce montage fonctionnera longtemps sur une moto. Une MEGA possède des connecteurs femelles sur lesquels viennent se raccorder des fils DUPONT mâles.

Or les vibrations d'une bécane auront vite fait de créer des faux contacts, et l'oxydation ne fera qu'empirer les chose.

A mon avis, seul un montage sur PCB avec une carte soudée du type ARDUINO NANO ou MINI aura une chance de rester fiable dans le temps. Les raccordements devront être faits avec des connecteurs sérieux, du type JST XH (faible puissance) ou VH (puissance), et l'ensemble protégé dans un boîtier étanche.

Deuxième remarque : je ne connais pas la législation mais bidouiller injection, allumage et organes de sécurité d'un véhicule (clignotants, feu arrière) me paraît assez peu recommandable.

D accord avec toi , j envisageais de souder les fils a la carte. Ensuite elle sera vernie et placée en boite etanche sur silent blocs pour l isoler des agressions externes. Enfin la legislation ne t interdit pas de changer de systeme de gestion, des lors que tu respectes les regles (frequence des clignotants, controle des emissions poluantes du vehicule...) Apres il s'agit pas de preparer la moto pour changer sa puissance et donc ses caracteristiques à l homologation. Maintenant, tres clairement, quoi que tu fasses sur un vehicule est répréhensible.... on est dans un pays qui favorise l' initiative de ce coté.

Ceci dit je vais quand meme regarder du coté de l arduino mini ou nano, merci hbachetti

Vu le peu d'entrées / sorties que tu utilises, une NANO ou MINI est amplement suffisante, et la boîte sera nettement moins grosse.

Bien sûr les barrettes de broches à souder sont livrées avec.

CHUCKY23: D accord avec toi , j envisageais de souder les fils a la carte. Ensuite elle sera vernie et placée en boite etanche sur silent blocs pour l isoler des agressions externes. Enfin la legislation ne t interdit pas de changer de systeme de gestion, des lors que tu respectes les regles (frequence des clignotants, controle des emissions poluantes du vehicule...) Apres il s'agit pas de preparer la moto pour changer sa puissance et donc ses caracteristiques à l homologation. Maintenant, tres clairement, quoi que tu fasses sur un vehicule est répréhensible.... on est dans un pays qui favorise l' initiative de ce coté.

Bonsoir Je suis en accord avec la reponse d'henri je n'ai pas fait le compte des I/O basiques necessaires à ton projet , mais çà doit rentrer sur du micro ou nano (base 328P) Si vraiment c'est trop juste , il existe aussi du mega2560 en format réduit avec pastilles à souder pour assurer des connexions "fiables" C'est qqfois bien pratique, mais son usage impératif reste quand même bien limité 8)

|375x500

Effectivement les versions que tu proposes, Henri, seraient plus adaptées, je vais regarder si les I/O sont suffisantes, 8 c'est le strict minimum en tous cas. Pour info tout de même le couplage de l'extension de programmation injection allumage Speeduino se fait directement sur une Mega 2560, par broches enfichées directement sur les pins certes, mais ça va dans un véhicule quand même, ça doit bien être fiable...bon faut que j'étudie aussi comment on poste une photo, tiens... ::)

Artouste, la 2560 pro est pas mal, faut que j'étudie ça aussi....ça tombe bien, fait trop froid pour trainer dehors :sunglasses:

Voir le premier message du sujet......

Oui pardon, j'ai un peu ramé pour rectifier, je suis pas habitué aux forums, ça aussi je débute comme je disais... alors désolé encore. Promis je le fais pas pour embêter.

Sinon j'ai travaillé sur le code avec "test", j'aurais voulu une exclusion à ce test, en effet je souhaite faire un chenillard des lampes seulement, j'ai pas besoin que la sortie klaxon (la 7) s'active à chaque mise du contact. Je supposais qu'il fallait l'inclure entre les parenthèses après test avec un ! comme ça:

test(7!);

mais arduino est pas d'accord.... Si quelqu'un peut m'aider, ça sera bien urbain.

Bonne continuation....

;)

Merci! De même

hello :slight_smile:
pour ta modif:
c’est toi qui fait le hard.
fais le en fonction du soft.
croise ton cablage sur les sorties 5 et 9 par exemple.
ton klaxon est donc desormais sur la sortie 9
et dans la boucle for de la fonction “test”,tu limites la boucle for de 2 à 8

ainsi le klaxon ne sera pas actionné par la fonction test :slight_smile:

void setup() {

  pinMode(A0, INPUT_PULLUP);              //code
  pinMode(A1, INPUT_PULLUP);              //phare
  pinMode(A2, INPUT_PULLUP);              //feu arrière
  pinMode(A3, INPUT_PULLUP);              //cligno gauche
  pinMode(A4, INPUT_PULLUP);              //cligno droit
  pinMode(A5, INPUT_PULLUP);              //klaxon
  pinMode(A6, INPUT_PULLUP);   //libre
  pinMode(2, OUTPUT);                     //code
  pinMode(3, OUTPUT);                     //phare
  pinMode(4, OUTPUT);                     //feu arrière
  pinMode(5, OUTPUT);                     //cligno gauche
  pinMode(6, OUTPUT);                     //cligno droit
  pinMode(7, OUTPUT);                     
  pinMode(8, OUTPUT);          //libre
  pinMode(9, OUTPUT);          //klaxon

  test();
}

void test()
{
  for(byte f =2;f<=8;f++)
  {
   digitalWrite(f, LOW); //actionne le périphérique qui est sur la sortie concernée sortie
   delay(1000);
   digitalWrite(f, HIGH);//met au repos le périphérique qui est sur la sortie concernée sortie
  }
}
void loop() {
 
  int sensorVal1 = digitalRead(A0);
  int sensorVal2 = digitalRead(A1);
  int sensorVal3 = digitalRead(A2);
  int sensorVal4 = digitalRead(A3);
  int sensorVal5 = digitalRead(A4);
  int sensorVal6 = digitalRead(A5);
  int sensorVal7 = digitalRead(A6);
 
  if (sensorVal1 == HIGH) {              //code
    digitalWrite(2, HIGH);
  }  else {
    digitalWrite(2, LOW);
  }
  if (sensorVal2 == HIGH) {             //phare
    digitalWrite(3, HIGH);
  } else {
    digitalWrite(3, LOW);
  }
  if (sensorVal3 == HIGH) {             //feu arrière
    digitalWrite(4, HIGH);
  } else {
    digitalWrite(4, LOW);
  }
  if (sensorVal4 == LOW) {                //clignotant gauche
    digitalWrite(8, millis() / 500 % 2 );
  } else {
    digitalWrite(8, HIGH);
  }
    if (sensorVal5 == LOW) {             //clignotant droit
    digitalWrite( 5 , millis() / 500 % 2 );
  } else {
    digitalWrite(5, HIGH);
  }   
   if (sensorVal6 == HIGH) {             //klaxon
    digitalWrite(9, HIGH);
  } else {
    digitalWrite(9, LOW);
 
 }
}

Salut dfgh, j avais essayé cette option en notant distinctement chaque sortie, le resultat n'etait pas concluant. Je vais essayer ta formule et rendrai compte. Merci de ton aide

Oui le résultat est le même que l'essai que j'avais fait, toutes les sorties sont actives au début du test puis se coupent une à une selon la tempo, j'ai placé le klaxon en sortie 9 comme tu le proposes mais au lieu de ne pas passer le test, il s'allume avec les autres et se coupe en même temps que 8. En fait le souci c'est qu'au début du test, toutes les sorties indiquées au setup , c'est à dire de 2 à 9, sont testées. la seule différence, avec ton code dfgh, c'est que 8 et 9 s'éteignent en même temps