je viens de terminer le code nécessaire au remplacement de certaines fonctions d'une:
-Clignotant
-Démarreur
-Coupe Circuit
l'objectif étant de passer la totalité des commandes par boutons poussoir.
Concernant l'application du code ci dessous, je passe par un système de mosfet (un ps2801-4 en direct sur l'arduino qui contrôle à son tour 4 IRF540N) pour la mise sous tension des différents organes contrôlés, l'option relais mécanique ne m'ayant pas plus séduite que ça ^^' et surtout le circuit de mosfet étant fournis monté (le faire moi même, au vu des simulation sous proteus, n'était pas envisageable)
Je rencontre en revanche un petit soucis concernant la coupure des clignotants après la mise en marche, celle si est assez aléatoire... Je cherche donc une méthode plus efficace
n’hésitez pas à me faire des critiques (constructives ^^"), je débute mais j'aime bien ça ^^
de plus, si tu circule sur la voie publique avec un véhicule homologué normalement, mais avec des modifications apportées par tes soins sur des points de sécurité, tu risque de sérieux ennuis en cas d'accident et tu peux dire adieu à la couverture de ton assurance.
@fdufnews, tout à fait, le système ne le permet pas, tout comme le coupe circuit d'ailleurs >.<
@pepe; @infobarquee, non cette chose (une moto en l’occurrence) n'ira jamais sur route ouverte, la carte grise étant en RSV et la moto datant de Mathusalem, il faudrait un budget illimité pour espérer la voir passer au mine ^^ quand bien même, je ne pourrais pas l'assurer
c'est juste du bricolage, ça occupe quand on est insomniaque ^^"
ok,
un coupe circuit ne se met pas sur le système embarqué, mais à part pour tout couper en cas d'urgence.
heureusement, car si le système embarqué pète un cable, le coupe circuit ne sera pas utilisable.
après, erreur débutant dans certaines parties de code
else
state1 = LOW;
time = millis();
juste la 1ere instruction est prise en compte, il faut des { } pour tout prendre en compte
@infobarquee, j'ai supprimé mes while, le fonctionnement est toujours erratique, je lâche l'affaire pour intégrer le clignotement dans l'arduino, ou il faudrait que le clignotement s'exécute en parallèle du reste du prog et sans vouloir dire de bêtise, il me semble qu'il n'y a pas de multitâche sur un arduino >.<
Je suis tombé sur ceci en rechercha,t une méthode qui pourrait passer, je regarde comment adapter tout ça
Bon, plutôt qur de m'arracher les cheveux pour gérer un clignotement par ligne de code, je vais le generer via un circuit tout simple à base de transistor, l'avantage c'est qu'au niveau de l'arduino, ça simplifie le problème ^^"
@dfgh, ça ne passe pas au niveau des cligno, je pense que ça provient des delay mais vu mon niveau, je suis loin d'en être sur ^^"
en revanche j'ai refais ça entre temps, pour éviter d'utiliser des delay en utilisant une seul fonction de clignotement (oui je devais passer par un montage clignotant mais le magasin d’électronique où je me fournis est fermé pour vacances )
j'ai aussi passé certain paramètres en constante pour éviter de trop attaquer la mémoire dynamique, même si avec 2Mo j'ai de la marge ^^
// voyant power on
const int PowerOn = 13; // led de mise en route du prog
// entrees
const int inPin1 = 2; // poussoir cligno droit
const int inPin2 = 3; // poussoir cligno gauche
const int inPin3 = 4; // poussoir demarreur
const int inPin4 = 5; // poussoir Warning
// sorties
const int outPin1 = A0; // cligno avant et arriere droit
const int outPin2 = A1; // cligno avant et arriere dgauche
const int outPin3 = A2; // relai de demarreur
// variables
int outClignoState = LOW; // demarrer clignotement off
int state1 = LOW; //demarrer cligno droit sur off
int reading1;
int previous1 = HIGH;
int state2 = LOW; //demarrer cligno gauche sur off
int reading2;
int previous2 = HIGH;
int reading3;
int state4 = LOW; //demarrer warning sur off
int reading4;
int previous4 = HIGH;
// gestion appuie
long time = 0;
const long debounce = 200; // pour eviter un rebond sur l'appui
long previousMillis = 0;
const long interval = 500; // intervalle de clignotement
void setup() //tout les poussoir en pullup pour passer par une masse commune
{
pinMode(inPin1, INPUT_PULLUP);
pinMode(outPin1, OUTPUT);
pinMode(inPin2, INPUT_PULLUP);
pinMode(outPin2, OUTPUT);
pinMode(inPin3, INPUT_PULLUP);
pinMode(outPin3, OUTPUT);
pinMode(inPin4, INPUT_PULLUP);
pinMode(PowerOn, OUTPUT);
}
void loop()
{
//demarrage soft: allumage led 13
digitalWrite(PowerOn, HIGH);
//Pin1 / cligno droit: on/off par pression courte
reading1 = digitalRead(inPin1);
if (reading1 == LOW && previous1 == HIGH && millis() - time > debounce)
{
if (state1 == HIGH)
{
state1 = LOW;
digitalWrite(outPin1, LOW);
}
else
{
state4 = LOW;
state1 = HIGH;
state2 = LOW;
digitalWrite(outPin2, LOW);
}
time = millis();
}
clignotement (outPin1, state1);
previous1 = reading1;
//Pin2 / Cligno gauche: on/off par pression courte
reading2 = digitalRead(inPin2);
if (reading2 == LOW && previous2 == HIGH && millis() - time > debounce)
{
if (state2 == HIGH)
{
state2 = LOW;
digitalWrite(outPin2, LOW);
}
else
{
state4 = LOW;
state1 = LOW;
digitalWrite(outPin1, LOW);
state2 = HIGH;
}
time = millis();
}
clignotement (outPin2, state2);
previous2 = reading2;
//Pin3 / Demarreur: pression = impulsion vers le relai de demarrage (pas de mosfet, intensite trop haute)
reading3 = digitalRead(inPin3);
if (reading3 == LOW)
digitalWrite(outPin3, HIGH);
else
digitalWrite(outPin3, LOW);
//Pin4 / Warning: on/off par pression courte
reading4 = digitalRead(inPin4);
if (reading4 == LOW && previous4 == HIGH && millis() - time > debounce)
{
if (state4 == HIGH)
{
state4 = LOW;
state1 = LOW;
digitalWrite(outPin1, LOW);
state2 = LOW;
digitalWrite(outPin2, LOW);
}
else
{
state4 = HIGH;
state1 = LOW;
digitalWrite(outPin1, LOW);
state2 = LOW;
digitalWrite(outPin2, LOW);
}
time = millis();
}
clignotement (outPin1, state4);
clignotement (outPin2, state4);
previous4 = reading4;
}
int clignotement (int outCligno, int ClignoState)
{
if (ClignoState == HIGH)
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
if (outClignoState == LOW)
outClignoState = HIGH;
else
outClignoState = LOW;
}
digitalWrite(outCligno, outClignoState);
}
}
oui et non...
Lorsque je provoque le changement alors qu'ils sont en LOW dans la fonction "clignotement" ça passe nickel, si je le fait alors qu'ils sont en HIGH, ça devient n'importe quoi ^^"
exemple:
Warning clignote, j'appuie sur droite au moment ou les clignos sont allumé -> le droit se mets a clignoter mais le gauche reste fixe....
finalement, l'arduino fait une partie de ce que le m-Unit fait, pour environ 250€ de moins ^^"
bon après il y a pas mal de chose en plus sur leur m-Unit, mais bon, j'ai du temps, je vais bien réussir à en faire un équivalent un jour ^^
mais en tout cas, ce petit arduino est vraiment addictif ^^
pour le feux stop, c'est le même principe que le in 3, juste à dupliquer
pour l'alarme, c'est vrai que ça pourrait être marrant, mais pour ça il faudrait que l'arduino soit en permanence allumer non ?
dans ce cas la quid de la batterie ?
si la moto roule tous les jours, je serai surpris que la batterie ne tienne pas.
et tu peux ajouter:
"si moto sur béquille" alors "autoriser la mise en veille du micro" pour limiter sa conso (c'est à réfléchir)
elle ne roule pas du tout à vrai dire ^^"
mais j'aurais plutôt vu une mise en marche de l'alarme par pression, en gros en veille dès qu'il n'y a plus de contact, réveil en cas de pression sur un bouton, coupure de l'alarme en cas de démarrage ou mise en veille après un temps donné
je parlais de mise en "marche de la fonction alarme" si moto sur béquille ( ou pression sur un BP)
et mise en veille ( j'aurais du dire sommeil ) du µ pour économiser la batterie.
le micro se réveille une fois par seconde par exemple. pour 2 ou 3 ms et se rendort si tout va bien.
ou se réveille sur un signal reçut par un "tilt" par exemple.