Problème de programmation tempo Arduino

a marqué ce sujet comme résolu.

Bonjour,

Je suis débutant en programmation Arduino, mon programme consiste en une tempo "Random" faite avec "Relay" et commandée par un bouton poussoir (trigger = pin 2).

Voici le déroulement :

Si on pousse sur le BP son état passe de 1 à 0, la sortie 13 passe à 1, elle reste à 1 tant que l’on pousse sur le BP

Si on relache le BP son état passe de 0 à 1, la sortie 13 après un certain temps déterminé par (temps >= 3000) passe à 0

J’espère avoir été assez clair, en espérant que vous pourrez m’aider, merci

Voici le programme qui ne fonctionne pas :

const int trigger = 2;
unsigned long temps;

int relais1 = 13;             
long randOn = 0;             
long randOff = 0;            

void setup() {                
pinMode(trigger, INPUT); 
pinMode(relais1, OUTPUT);    
}

void loop() {                  
randOn = random (0, 3900);   
randOff = random (0, 100);  
digitalWrite(relais1, HIGH); 
delay(randOn);               
digitalWrite(relais1, LOW);   
delay(randOff);              

if (digitalRead(trigger) == LOW){
    temps = millis(); 
    digitalWrite(13,HIGH); 
}       
if (millis()-temps >= 3000) { 
    digitalWrite(13,LOW);   
}         
}
+0 -0

salut ^^ pour commencer, je te conseille de bien revenir a la ligne a chaque fin de ligne (genre oublie ca

digitalWrite(relais1, HIGH); delay(randOn);.


OU

pinMode(trigger, INPUT); randomSeed (analogRead (0)); pinMode(relais1, OUTPUT);

ensuite pour un peu de couleur t’as en haut

image.png
image.png

le logo <> et apres t’as arduino il te suffit juste d’écrire dans ce qui vient d’apparaitre ^^ (puis je sais pas si tu l’as fait ou nom mais la tabulation serais cool)

ensuite j’ai pas très bien compris ce que l’arduino doit faire

  • tu appuies sur le bouton en restant appuyé la led s’allume (tant que tu restes appuyé ?)
  • mais si tu appuie momentanément la led.elle met du temps, mais s’allume et reste allumé peut importe ce que tu fais au bouton
digitalWrite(relais1, HIGH);
delay(randOn);
digitalWrite(relais1, LOW);
delay(randOff); 

cette partie fait que ta led vas forcement clignoté, peut importe ce que tu fais avec le bouton

if (digitalRead(trigger) == LOW){
  temps = millis();
  digitalWrite(13,HIGH);
}
if (millis()-temps >= 3000) { 
  digitalWrite(13,LOW);
}

celle la rentre en collision avec le code au dessus, car la led vas s’allumer (ou s’eteindre) trop peu de temps avant le retour au début de la boucle

+0 -0

Bonjour, Merci pour ta réponse depfryer J’ai recomposé mon premier message comme demandé ainsi que le déroulement du BP

Pour : "celle la rentre en collision avec le code au dessus" oui c’est pourquoi je demande de l’aide, c’est de trouver un moyen de contourner ce problème, même par une toute autre programmation, peux-tu m’aider, merci

Peux-tu me dire comment on fait un retour à la ligne

+0 -0

"Peux-tu me dire comment on fait un retour à la ligne" avec la touche entrée tu trouveras un tuto ici

sinon le site utilise du markdown, il faut faire 2 entrée pour un retour a la ligne (sauf dans des endroits genre "les bouts de code, ect")

dans ce cas ce que je ne comprend pas c’est pourquoi tu laisse le code qui fait que tu allumes ou éteint la led

de ce que j’ai compris ton code devrais plutot etre style :

image.png
image.png

si ce n’est pas ca je comprends toujours pas ce que tu veux que ca fasse, hesites pas a faire un schema ca aide

Bonjour depfryer ,

randomSeed (analogRead (0)); c’est un oubli d’un autre essai, je l’ai supprimé

pinMode(trigger, INPUT); pour déclarer que le trigger (pin2) est une entrée

pinMode(relais1, OUTPUT); pour déclarer que le relais1 (pin13) est une sortie

"trouveras un tuto ici" : ton lien m’envoie sur une video

Au départ j’ai :

int relais1 = 13;             
long randOn = 0;             
long randOff = 0;            

void setup() {                
pinMode(relais1, OUTPUT);    
}

void loop() {                  
randOn = random (0, 3900);   
randOff = random (0, 100);  
digitalWrite(relais1, HIGH); 
delay(randOn);               
digitalWrite(relais1, LOW);   
delay(randOff);              
}

j’ai mal copié ^^"

c’etait cette partie la dont je parlais

digitalWrite(relais1, HIGH); 
delay(randOn);               
digitalWrite(relais1, LOW);   

(concernant la video, c’était un Rick roll, une blague sur internet, comme parlais de la touche entrée, ect) mais je t’ai indiqué par la suite comment faire les entrées

je vais tenté de te poser la question autrement, dans ta fonction loop, si tu regardes lignes par lignes ce que ça fait, puis que tu regardes ce que il doit faire, tu ne vois pas une incohérence ?

si t’as du mal, tu peux t’aider de mon graph évidemment, pour faire le parallele entre ce que tu as, et ce que tu veux

Ce que tu montres c’est la partie à ne pas toucher qui fait partie de la tempo random.

La seule chose que je vois, c’est qu’il y a une incohérence avec la partie que tu cites et bien sûr la partie du trigger

if (digitalRead(trigger) == LOW){
 temps = millis();
 digitalWrite(13,HIGH);


c’est sûr que ça ne peut fonctionner car sur la même entrée donc impossible avec cette config. de bloquer la sortie 13 avec le trigger.

Sinon je ne vois pas.

oui, c’est pourquoi je demande de l’aide pour contourner ce problème.

C’est pourquoi au post plus haut je t’ai mis le programme uniquement de la tempo random sans les lignes de programme concernant le trigger.

Le trigger c’est une voie à laquelle j’avais pensé pour résoudre mon problème mais si tu as une autre façon pour mettre la sortie 13 à 0 je prends.

Imagine que le trigger pilote un relais sur par ex. la sortie 3 et que un contact du relais soit en série avec le fil de la sortie 13, quand le trigger est enclenché d’office quoi qu’il se passe la sortie 13 passera à 0 et sera totalement géré par le trigger.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte