Bonjour,
Je vous présente ma réalisation, merci de votre indulgence pour un débutant et d'ailleurs si vous avez des remarques elles sont bienvenues.
Donc afficheur 9 leds + 1 flash (réglable plus ou moins haut dans les tours)
réglage du flash par impulsion sur 1 bouton + et 1 bouton -
Tout (ou presque *)fonctionne et ne reste plus qu'a attendre le matos final pour l'installer proprement sur le tableau de bord (déjà testé avec la bredboard)
autrement rien de spécial à part que *j'aimerais bien arriver à programmer un enregistrement de la position du flash réglé lors de la dernière utilisation(dans l'eeprom si j'ai bien lu), là ça reset à la valeur de base programmée à chaque démarrage ...
j'avais encore en tête de reprendre l'info de la température d'huile pour gerer la plage du flash mais ça on verra plus tard.
voilà le code et le montage
Merci
// Déclaration et remplissage du tableau...
// ...représentant les broches des LEDs
const int leds[10] = {4,5,6,7,8,9,10,11,12,13};
// entrées boutons pwm 2 et 3
const int btn_minus = 2;
const int btn_plus = 3;
// le potentiomètre sera branché sur la broche analogique 0 / la tension venant du compte tour
const int potar = 0;
// variable stockant la tension mesurée
int tension = 0;
// déclaration des variables utilisées pour le comptage et le décomptage
// le nombre qui sera incrémenté et décrémenté
int s_flash = 500; // valeur de base led flash sur régime
// lecture de l'état des boutons (un seul à la fois mais une variable suffit)
int etat_bouton;
int memoire_plus = HIGH; // état relâché par défaut
int memoire_minus = HIGH;
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
int i = 0;
for(i = 0; i < 10; i++)
{
// déclaration de la broche en sortie
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW); // allumer les leds
delay(50); // animation à l'allumage de la carte
}
digitalWrite(leds[i], HIGH); // éteindre les lesd
}
void loop()
{
// on récupère la valeur de la tension du potentiomètre / compte tour
tension = analogRead(potar)*1.5; // multiplie la tension d'entrée pour ajuster
// et on affiche sur les LEDs cette tension
afficher(tension);
// boutons de décalage du flash sur régime
// lecture de l'état du bouton d'incrémentation
etat_bouton = digitalRead(btn_plus);
// Si le bouton a un état différent que celui enregistré ET
// que cet état est "appuyé"
if((etat_bouton != memoire_plus) && (etat_bouton == LOW))
{
// on incrémente la variable qui indique
// quand le flash s'allume
s_flash = s_flash +50;
}
// on enregistre l'état du bouton pour le tour suivant
memoire_plus = etat_bouton;
// et maintenant pareil pour le bouton qui décrémente
etat_bouton = digitalRead(btn_minus); // lecture de son état
// Si le bouton a un état différent que celui enregistré ET
// que cet état est "appuyé"
if((etat_bouton != memoire_minus) && (etat_bouton == LOW))
{
s_flash = s_flash -50; // on décrémente la valeur de s_flash
}
// on enregistre l'état du bouton pour le tour suivant
memoire_minus = etat_bouton;
// si on veut brider la plage du flash
// on applique des limites au nombre pour ne pas dépasser 4 ou 0
//if(s_flash > 1000)
// {
// s_flash = 1000;
// }
//if(s_flash < 600)
// {
// s_flash = 600;
//}
// appel de la fonction affiche() que l'on aura créée
// on lui passe en paramètre la valeur du nombre de LED à éclairer
//affiche(nombre_led);
//flash(s_flash);
}
void afficher(float valeur)
{
int i;
for(i=0; i < 9; i++)
{
if(valeur < ((i+1)*100)) // allumage des 9 leds compte tour
digitalWrite(leds[i], HIGH); // on éteint la LED
else
digitalWrite(leds[i], LOW); // on allume la LED
if (valeur >=s_flash) // allumage du flash
flash(tension);
else
digitalWrite(leds[9], HIGH); // on allume le flash
}
}void flash(int valeur)
{
digitalWrite(leds[9], LOW); // on allume la LED 11
digitalWrite(leds[9], HIGH); // ou on éteint la LED 11
}
