question programmation arduino

Bonjour à tous, j'ai un petit soucis au niveau de la programmation je vous explique :
Je programme un robot j'ai donc regroupé plusieurs morceaux de programme dans des fonctions
(exemple : void ultrason ()..).
Mon programme à un moment fait cela :

if(............){
void ultrason ;
if(.......){
//rien ne se passe cela sous entend que je laisse void ultrason actif
}
else(.....){
//ici j'aimerais juste mettre STOP void ultrason
}
}

Donc je ne sais pas trop comment faire j'ai fait des recherches j'ai trouvé la fonction break mais je suis pas sur que cela fonction dans se cas la, je ne sais même pas si c'est possible de faire ça.
J'ai donc besoin de vos lumières !
merci d'avance

bonjour,

sauf erreur, tu dois normalement créer tes "void..." en dehors du loop et ensuite tu les appels avec une commande du genre "ultrason ();"

bonne chance.

Bonjour,

void ultrason; c'est une déclaration et non un appel.
Pour appeler la fonction c'est utlrason();

Oui exactement, j'ai juste voulu faire assez vite sans les formalités à 100% du langage veuillez m'en excuser.
peut-on du coup arrêter une tel fonction ?

comment ça "arreter" ?

ta fonction ne s'éxécute que si tu l'appelle, genre si (a) == 34 tu lance la fonction ultrason()
une fois que la fonction est arrivée a la fin de son code, le loop reprend et ainsi de suite.

Tu m'as bien fait réfléchir nexen merci, je pense du coup avoir trouvé une solution mais je ne sais pas si c'est "juste" (rapport à la boucle while) donc je vais mieux vous expliquez.

Le robot est un robot arroseur de plante : lorsqu'une plante (dans un pot) à "soif" le pot s'allume et le robot est attiré par la lumière donc vas vers le pot mais si il y a des obstacles en chemin les capteurs ultrasons s'en charge. il y a également un capteur de pression sur le robot pour s’arrêter au contacte du pot et un capteur flotteur dans la cuve pour le niveau de l'eau.

Un morceaux du programme :

void loop() {
ValeurPress = digitalRead(captPress); //capteur pression pot/robot
ValeurNo = digitalRead(captNeau); //flotter

while( ValeurNo = LOW){ // tant que la cuve est pleine ...

ultrason(); //lecture capteur ultrasons
Photodiode(); //lecture capteur de lumière

PhotodiodeDEPCondition(); //le robot est attiré par la lumière grâce aux photodiode (déplacement vers lumière activé)

DepAléaoire(); //et le robot évite les obstacles grâce aux ultrasons (déplacement anti-obstacle activé)

if ( lightReadingCenter < lightToleranceOFFUS){ //si le robot s'approche trop près d'un pot il faut désactiver les ultrasons donc j'espere que quand cette condition s'éffectura elle ne prendra pas toujours en compte ultrason();
//si la lumière devient forte jusqu'à un certains seuil sur le capteur avant alors ....

digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW); //stop
digitalWrite(in4, LOW);
delay(1500);

analogWrite(enA, 80); //réduire la vitesse
analogWrite(enB, 100);

digitalWrite(in1, HIGH);
digitalWrite(in2, LOW); // avance tout droit au ralenti av le contacte avec le pot
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);

if ( ValeurPress = HIGH) {

digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(500);
ReceptionMéssage (); // arrosage (réception message pour connaitre les besoins en eau de la plante via onde radio capteur d'hygrométrie)

}
}
}

else {
digitalWrite(LED, HIGH); // elle signifie qu'il n'y a plus d'eau dans la cuve à l'utilisateur
}

} //je pense que le else est inutile (ou mal utilisé) le remplacer par un deuxieme while ?

Si il y à des fautes n'hésité pas et si vous n'avez pas bien cerner le problème également.
Je pense que cela demandera beaucoup d'attention de votre part et je vous en remercie d'avance =)

Déja, je suis débutant; je pense juste avoir piger certains trucs, de plus j'ai aussi des projets sur le feu (domotique totale dans toute ma maison avec alarme, écrans lcd et codeur rotatif, page web de gestion et de remoté d'infos, ...) et donc je ne suis pas capable de te dire si ton code est bon ou pas, désolé.
je laisse les plus calés que moi te répondre.

bonne chance.

Merci quand même nexen et bonne chance pour tes projets :slight_smile:

merci bien,

bonne chance a toi aussi.

Salut,

Il faut que tu inscrive tes codes entre balise </> STP merci de reprendre le post précédent. Regarde les conseils aux débutants sur le forum dans les premiers posts.

Pour ton souci je comprends pas bien tout mais tu peux faire une fonction qui change d'état en lui passant un paramètre comme ça. Si tu lui passe 0 ultrason(0) elle démarre si tu lui passe 1 ultrason(1) elle arrête.

Merci beaucoup Landid pour la balise code j'ai mis un peu de temps à comprendre ce que tu voulais dire^^
De plus la solution que tu me propose est je pense juste ce qu'il me faut !! j'ai lu le cours mais j'ai pas bien compris dans mon cas il faut que je définisse un paramètre 0 et un paramètre 1 de la fonction ou alors effectuer une pause d'une fonction en particulier, je sais pas trop comment le définir du coup l'IDE le sait déjà ?