Lancer un prog grâce a un bouton

bonjour la communauté,
je viens a vous pour de l' aide, j'ai fait sur tinkercad (et en vrais ), un programme pour un 3eme feux sur mon véhicule (quand je freine sa fait un chenillard) .
mon prog fonctionne comme je le veux .
ma demande est la suivante :
je voudrais que ma carte Arduino reste sous tension tout le temps avec un transfo 12V/5V.
Je voudrais a l'aide d'un relais ,quand j'envoie 12V sur le relais actionne une entrer de mon Arduino et lance instantanément mon prog .
(petit plus un autre petit bouton pour choisir un autre programme quand je freine tout s'allume pour le contrôle technique )
merci a tous et toute celle qui pourrons me donner des renseignement
a bientôt a communauté

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Cette vidéo montre des signaux de voiture sur un ATTINY85 .

Bonjour fredericbarbier

Mets ton programme en ligne, ainsi on peut voire comment implémenter tes 2 commandes.

Cordialement
jpbbricole

bonjour jpbbbricole ,
comment faire pour mètre mon schémas et mon code ?
juste comme ca sur le forum ?

(je ne sais pas ci sa marche comme ca "Login | Tinkercad " )

bonjour xfpd ,
je vais t'avoué que j'avais déjà vue ces vidéos mais que je ne comprend pas tout ce qu'il dit et fait mdr

Tout est expliqué dans le lien que l'on t'a donné dans le 2nd message

Bonjour fredericbarbier

Le schéma c'est bon ainsi, pour le code dans Tinkercad, il faut mettre ton montage "public", sinon il faut un loggin pour y accéder.

Pour les 2 commandes, relais et bouton, voilà une façon de faire, j'ai "réaménagé" ton programme, les boutons sont en mode PULL_UP, donc c'est la résistance interne de l'Arduino qui sert de polarisation, comme un véhicule est un endroit dit perturbé pour ce type de montage, il faudra, par sécurité, dédoubler les PULL_UP internes par des résistances externes, 4.7k serait pas mal.
Remarque l'usage du const précédant la déclaration des variables qui ne changent pas dans le programme.

//www.youtube.com/Electronics is Fun//
//www.facebook.com/Electronics is Fun//
//Project by MOHD SOHAIL//


const int ledPinsCount=5;                        // declaring the integer variable pinsCount
const int ledPins[] = {2,3,4,5,6,};          // declaring the array pins[]
const int ledOn = HIGH;     // Etat pour allumer une LED
const int ledOff = !ledOn;     // Etat pour éteindre une LED (inverse (!) ledOn)

const int stopCommandePin = A0;     // Commande de STOP par relais
const int stopTestPin = A1;     // Commande de STOP par bouton de test

void setup() 
{
	pinMode(stopCommandePin, INPUT_PULLUP);     // Les boutons sont câblés d'un côté au GND.
	pinMode(stopTestPin, INPUT_PULLUP);
	
	for (int i=0; i<ledPinsCount; i=i+1)
	{    // counting the variable i from 0 to ledPinsCount
		pinMode(ledPins[i], OUTPUT);            // initialising the pin at index i of the array of pins as OUTPUT
		digitalWrite(ledPins[i], ledOff);     // Eteindre la LED
	}
}

void loop() 
{
	while (digitalRead(stopCommandePin) == LOW)     // Si commande feu stop (relais)
	{
		stopShow();
	}
	
	while (digitalRead(stopTestPin) == LOW)     // Si test feu stop (bouton)
	{
		stopAllOnOff(ledOn);     // On allume tout
	}
	
	//--------------------------------- Si pas de commande active
	if (digitalRead(stopCommandePin) == HIGH && digitalRead(stopTestPin) == HIGH)     // Bouton donne HIGH quand pas pressé (PULL_UP)
	{
		stopAllOnOff(ledOff);     // On éteint tout
	}
}

void stopShow()
{
	for (int i=0; i<ledPinsCount; i=i+1)
	{    // chasing right
		digitalWrite(ledPins[i], ledOff);         // switching the LED at index i on
		delay(100);                          // stopping the program for 100 milliseconds
		digitalWrite(ledPins[i], ledOn);          // switching the LED at index i off
	}
	for (int i=ledPinsCount-1; i >= 0; i = i - 1)
	{   // chasing left (except the outer leds)
		digitalWrite(ledPins[i], ledOn);         // switching the LED at index i on
		delay(150);                          // stopping the program for 100 milliseconds
		digitalWrite(ledPins[i], ledOff);          // switching the LED at index i off
	}
}

//------------------------------------- Toutes les LED on ou off
void stopAllOnOff(int ledEtat)
{
	for (int i=0; i<ledPinsCount; i=i+1)
	{    
		digitalWrite(ledPins[i], ledEtat);         // switching the LED at index i on
	}
}

Si tu est amateur de show pour ton véhicule, il y a aussi les LED WS2812 qui permettent d'aller beaucoup loin dans le genre. J'ai fait un compte-tours avec.

Cordialement
jpbbricole

bonjour jpbbbricole,
je te remercie énormément pour ton aide.
ton programme ne ressemble plus du tout au mien, je n'ai pas ton savoir, heureusement que des personnes comme toi aide les débutants comme moi , dans leurs projets .

Bonjour fredericbarbier

Quand j'ai débuté, j'ai presque tout "pris et appris" des autres, alors, à mon niveau, je transmets :wink:.

Cordialement
jpbbricole

1 Like

ps: pour le bouton de test (gnd => A1 ) c'est ok.
pour mon relais avec la résistance pull up, je peut le brancher sur le "gnd du power" ou il faut absolument le mètre sur le "gnd digital "?

Bonjour fredericbarbier

PULL-UP veut dire tirer ver le haut, si tu mets ta résistance sur le GND, cela devient du PULL-DOWN.
Ton schéma est juste, en résumé, ta résistance de PULL-UP supplémentaire doit être connectée, d'un côté au +5V de l'Arduino et de l'autre côté sur la pin A0.

PS: Peut être qu'il faudra aussi une PULL-UP pour le bouton de test, ça dépend s'il est au bout d'un long fil.

Cordialement
jpbbricole

1 Like

bonjour jpbbbricole,
merci pou ton aide précieux
mon montage est fait tout est au top sauf ....
oui il il a un petit kouak ...
quand j'actionne le frein un petit coup mes leds font ce qu'il faut
par contre ci je garde le pied sur le frein environ 3 aller retour mes leds restent toute allumé et ne s'éteigne plus jusqu'à ce que je coupe le contact et la tout refonctionne bien jusqu'à ce que mes led fasse a nouveau 3 allée retour et la toujours la mm chose
crois tu qu'il soit possible de metre un reset au bout de 2 ou3 clignotement pour que le prog ce réinitialise ?

ce qui bloquerait le programme dans une boucle infinie qui conserve les LEDs allumées serait cette partie du code:

  while (digitalRead(stopTestPin) == LOW)     // Si test feu stop (bouton)
  {
    stopAllOnOff(ledOn);     // On allume tout
  }

➜ se pourrait-il que votre appui sur le frein active et conserve activée la stopTestPin?

Bonsoir fredericbarbier

Il y a du vrai dans ce que dit @J-M-L, je regarde ça demain.

Bonne soirée.
Cordialement.
jpbbricole

Bonjour fredericbarbier

J'ai refait les test du programme du post #8, sans aucun des problèmes que tu décris. C'est fait dans des conditions "idéales", sur un breadboard.

As tu tenu compte de ceci:

Ce qui me fait penser à une influence due aux conditions de fonctionnement, est:

Or tu presses le Stop pour le chenillard et, quand tu relaches, toutes les LED sont allumées, ce qui ne peut se passer, dans le programme, qu'en pressant le bouton stopTest, "pression" qui se fait, certainement par une influence due à l'environnement perturbé, d'où l'uitlité des résistances PULL_UP.

A+
Cordialement
jpbbricole

Oui ça sent le souci matériel qui déclenche ce while

bonjour et merci a vous de vous pencher sur mon problème
j'ai bien mis ma résistance PULL_UP de 4.7k sur mon montage entre le 5v de mon arduino et mon relais
du coup comment faire ?
ci joint (je ne sais pas ci sa marche ) un lien vert un dossier sur mon drive avec 2 videos
la première: 6 secondes le problème est la de suite
la deuxième : 43 secondes il y a 0:22, 0:26 on vois des problèmes d'affichages
le test a était fait moteur éteins
le lien : https://photos.app.goo.gl/s8xouR1Z5FkEm7PEA
merci encore a vous

Bonjour fredericbarbier

C'est entre le +5V de l'Arduino et au plus près de la pin de l'Arduino.

A+
Cordialement
jpbbricole

Dans stopShow(), ici, il y a une erreur d'index

la ligne devrait être
for (int i=ledPinsCount - 1; i >= 0; i = i - 1)
À la première itération, i vaut ledPinsCount qui tape en dehors du tableau
Il y a aussi une erreur sur la condition de fin puisqu'on reste dans la boucle si i >0 donc on ne change jamais la première LED.