Go Down

Topic: Bac-Ka-Poux-Bêle 2019-2020 (Read 23717 times) previous topic - next topic

68tjs

#345
Oct 15, 2019, 12:32 pm Last Edit: Oct 15, 2019, 12:34 pm by 68tjs
Bonjour,

C'est très bien de s'y prendre en avance mais porte une grande attention sur notre traitement des projets pour le bac dans le message épinglé "Règles du forum francophone".

lesept

Je viens de tomber sur ceci, l'utilisation d'un ESP32 pour apprendre à un robot à suivre une cible grâce au machine learning.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Yasmine33

Bonjour,

Je souhaiterai savoir quelles sont les technologies adéquates pour faire un robot suiveur de personne, à l'aide d'un microcontrôleur :

Avec un capteur à ultrason ou un module RF 433MHz ou un module bluetooth ?

Merci d'avance

68tjs

#348
Oct 17, 2019, 10:21 pm Last Edit: Oct 17, 2019, 10:28 pm by 68tjs
Là tu charrie.

Je t'ai conseillé de bien lire les Règles du forum francophone car j'ai détecté un sujet pour le bac : pas difficile le ton de la question est caractéristique et ce sujet revient régulièrement.

Et là non seulement tu n'en a pas tenu compte  en ne faisant aucun effort de recherche personnel mais en plus tu fait du double post CE QUI EST INTERDIT SUR TOUS LES FORUMS.

A mon avis tu es mal partie pour avoir de l'aide si tu ne te reprend pas très vite.
Commence par fournir un travail  personnel et seulement à ce moment tu pourra avoir de l'aide.

Le tic tac du Bak_Ka_Poux_Belle est enclenché.

PBZOOM

dans l 'éventualité ou c 'est un sujet de l' éduc nationale
          ....a mon avis...
  un correcteur  aura  plus de chance de bien noter un sujet qui sort de l'ordinaire  ,  qu 'un copié collé  a 50 exemplaires...

             par contre .
il faut être un minimum critique sur l' énoncé  , cela évite les HORS SUJETS ...

            " les technologies adéquates "

adéquate   ,  tout dépend :
      *du  degrés d'interaction venant de celui qui est suivi vis a vis du suiveur ,
      *des capacitées du suiveur et
      * des interférences extérieures..

      .....un chien en laisse suis son maitre....

 a partir du moment ou vous aurais définis ces éléments ,  que ces dits éléments ne
   soient pas en opposition a l' énoncé du sujet.

 au regard des caractéristiques des différentes technologie que vous avez citées 
vous aurais des éléments de réponses ..

               ..a mon avis.

Chrislid

Bonjour à tous !

Je suis newbee sur le forum et je viens partager le problème que je rencontre.
Environement hardware : Arduino uno
Capteur: Fourche infra-rouge à base de LM393

Software : IDE : v1.8.9
Sortie de la mesure/lecture sur le port série

Objectif : mesure de vitesse des pâles d'un ventilo

J'ai donc un relié un capteur infrarouge à un Arduino Uno qui délivre un signal bas (0v) lorsque le faisceau est coupé.
La pin utilisé est la pin D2 correspondant à l'interruption 0 (Sur Uno ou Mega).
Le capteur est relativement sensible et permet une mesure de vitesse (coupure du faisceau infrarouge) à une distance de plusieurs centimètres des pâles.
Le code est basé sur les interruptions car permettant d'être précis sur la mesure.
Celui fonctionne parfaitement mais au delà de 2000 tr/mn, l'information sur le moniteur serie indique une valeur complètement erronée qui oscille sur des valeurs basse tel que 45, 60, 120...alors que la vitesse du ventilateur augmente et dépasse donc les 2000tr/mn.
J'ai incriminé plusieurs hypothèses tel que les limites du capteur mais celui-ci est capable de mesuré bien au delà. J'ai changé de capteur et utilisé un capteur laser ==> idem.
J'ai amélioré le code et validé l'écriture des interruptions...mais là je sèche !
Auriez-vous une idée ? Ci joint le code utilisé :

const byte encoder_pin = 2; // pulse output from the module
volatile unsigned long rpm; // rpm reading
volatile byte pulses; // number of pulses
volatile unsigned long timeold;
// number of pulses per revolution
// based on your encoder disc
unsigned int pulsesperturn = 7;
void counter()
{
   //Update count
   pulses++;
}
void setup()
{
   Serial.begin(115200);
   pinMode(encoder_pin, INPUT);
   attachInterrupt(digitalPinToInterrupt(2), counter, FALLING); //Interrupt 0 is digital pin 2
   // init variables
   pulses = 0;
   rpm = 0;
   timeold = 0;
}
void loop()
{
   if (micros() - timeold >= 1000000) {
      //Don't process interrupts during calculations
      detachInterrupt(digitalPinToInterrupt(2));
      rpm = (60 * 1000000 / pulsesperturn )/ (micros() - timeold)* pulses;
      timeold = micros();
     
      Serial.print("RPM = ");
      Serial.println(rpm,DEC);
       pulses = 0;
      //Restart the interrupt processing
      attachInterrupt(digitalPinToInterrupt(2), counter, FALLING);
   }
}

Bien à vous.

kamill

#351
Nov 02, 2019, 07:43 pm Last Edit: Nov 02, 2019, 07:43 pm by kamill
Bonjour,

Mets ton code entre balises!

Tu déclares pulses comme byte. Au delà de 2000 rpm ça déborde. Déclare pulses comme unsigned.
Code: [Select]
volatile unsigned pulses; // number of pulses

warjor1694

salut à tous. j'ai ce même problème de fusion de programme. je travaille sur l'automatisation de l'éclairage extérieur d'un bâtiment. les lampes doivent être commander par smartphone via le wifi (ça fonctionne très bien). et les même lampes doivent être aussi commander par une ldr au cas ou la commande par smartphone n'a pas été effectuer. chacun des deux programme fonctionne bien de leur coté. mais quand je fais la fusion, seule la ldr fonctionne et la carte ne génère mm plus de point d'accès. veuillez m'aider svp. c un travail a présenter après demain. svp. j'utilise comme microcontrôleur l'ESP8266 wemos D1.
voici le programme fusionner

68tjs

Il n'y a pas de travail urgent, il n'y a que des gens en retard.

Si tu avait lu les Règles du forum francophone tu aurais vu que pour aider il faut commencer par nous présenter un travail sérieux , nous ne faisons pas <à la place> surtout pour du travail scolaire.
Tu aurais vu aussi que le code se met entre balises code, tel que présenté  il est illisible à  partir d'un téléphone  ou d'une tablette.

Relis tes cours et ne viens pas nous dire que le prof est un nul.

kamill

#354
Nov 07, 2019, 10:32 am Last Edit: Nov 07, 2019, 10:33 am by kamill
J'ajouterai qu'au lieu de squatter un sujet vieux de 4 ans tu devrais créer ton propre sujet.

La touche entrée de ton clavier ne fonctionne pas? Aères ton texte, un tel texte sans saut de ligne est imbita illisible.

Cedric406

#355
Nov 12, 2019, 12:21 am Last Edit: Nov 12, 2019, 02:14 pm by Cedric406
Bonjour !! je suis un nouveau sur votre forum et aussi un passionné de l'outil Arduino. Je tiens à vous rappeler que je suis à mes débuts dans cet univers. Cependant j'ai eu à rencontrer quelques difficultés en ce qui concerne le capteur ultrason. Mon petit projet à pour but de commander un moteur, 09 LED  , ainsi qu'une sonnerie d'alarme à l'aide des distances déterminées par le  capteur ultrason.
J'ai réussi à faire le montage mais j'ai remarqué que : quand l'obstacle vient subitement devant le capteur le moteur s'arrête ( ce qui est normal), les LED s'allument mais l'alarme ne retenti pas. De la même façon quand l'obstacle vient de fason progressive et atteint la distance requise : le moteur ne s'arrête pas (ce qui n'est pas normal) , les LED s'allument et l'alarme est déclenché.
le mode d'évolution des obstacles (rapide ou progressif) a-t-il une influence sur les capteurs?
Dans le cas contraire est-ce que c'est mon programme qui est incorrect ?
Voilà le code :

Code: [Select]
//www.elegoo.com
//2016.12.08
#define DISABLE 13
 
 
 
 
int pinRelais = 9;
 
 
 
 
int tDelay=3000;
 
 
 
 
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
 
int greenLED = 0;
int greenLED2 = 1;
int greenLED3 = 2;
int yellowLED = 3;
int yellowLED2 = 4;
int yellowLED3 = 5;
int redLED = 6;
int redLED2 = 7;
int redLED3 = 8;
 
void setup() {
 
 pinMode (greenLED,OUTPUT);
 pinMode (greenLED2,OUTPUT);
 pinMode (greenLED3,OUTPUT);
 pinMode (yellowLED,OUTPUT);
 pinMode (yellowLED2,OUTPUT);
 pinMode (yellowLED3,OUTPUT);
 pinMode (redLED, OUTPUT);
 pinMode (redLED2,OUTPUT);
 pinMode (redLED3, OUTPUT);
 
 delay(3000);
 
 pinMode(DISABLE,OUTPUT);
 
   
 pinMode(pinRelais,OUTPUT);
 Serial.begin(9600);
 
 
 
}
 
void loop() {
  a=sr04.Distance();
  Serial.print(a);
  Serial.println("cm");
 //commande moteur
  if (a<40){
   Serial.println("extinction du moteur");
   digitalWrite(DISABLE,HIGH); // enable OFF
     delay(tDelay);
  }
  else if (a>=40){
   Serial.println("réarmement  du moteur");
   digitalWrite(DISABLE,LOW); // enable ON
     delay(tDelay);
  }
  // commande alarme
  if (a<80 && a>=0){
   Serial.println("declenchement  de l'alarme");
   digitalWrite(pinRelais,HIGH); // enable On
     delay(tDelay);
  }
     else if (a>=80){
       Serial.println("extinction  de l'alarme");
    digitalWrite(pinRelais,LOW); // enable OFF
     delay(tDelay); 
     }
 
 
 
  //Commande allumage LED 
  if(a<40){
   
  Serial.println("Allumage des Led vertes,  des LED jaune puis des LED rouge et réamement du moteur");
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,HIGH);
   digitalWrite(yellowLED2,HIGH);
   digitalWrite(yellowLED3,HIGH);
   digitalWrite(redLED,HIGH);
   digitalWrite(redLED2,HIGH);
   digitalWrite(redLED3,HIGH);
    delay(tDelay);
 
  digitalWrite(pinRelais,HIGH); //
    digitalWrite(DISABLE,HIGH); // enable OFF
     
     
   
  }
  if(a>=40 && a<80){
   Serial.println("Allumage des Led vertes  et des LED jaune puis de la premiere et 2eme LED rouge. extinction  de la 3eme  LED rouge");
 
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,HIGH);
   digitalWrite(yellowLED2,HIGH);
   digitalWrite(yellowLED3,HIGH);
   digitalWrite(redLED,HIGH);
   digitalWrite(redLED2,HIGH);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
   //on active l'alarme
   digitalWrite(pinRelais,HIGH); //
   digitalWrite(DISABLE,LOW); // enable ON
     
  }
 
  if (a>=80 && a<100){
   
   Serial.println("Allumage des Led vertes  et des LED jaune puis de la premiere  LED rouge. extinction  des 2eme et 3eme  LED rouge");
 
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,HIGH);
   digitalWrite(yellowLED2,HIGH);
   digitalWrite(yellowLED3,HIGH);
   digitalWrite(redLED,HIGH);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
   //on Désactive l'alarme
   digitalWrite(pinRelais,LOW);
   digitalWrite(DISABLE,LOW); // enable ON
     
  }
 
 
  if (a>=100 && a<150){
   Serial.println("Allumage des Led vertes  et des LED jaune puis . extinction  deS   LED rouge");
 
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,HIGH);
   digitalWrite(yellowLED2,HIGH);
   digitalWrite(yellowLED3,HIGH);
   digitalWrite(redLED,LOW);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
   //on désactive l'alarme
   digitalWrite(pinRelais,LOW);
   digitalWrite(DISABLE,LOW); // enable ON 
     
  }
 
  if(a>=150 && a<200){
   Serial.println("Allumage des Led vertes  et des 1ere et 2eme LED jaune. extinction  de la 3ème LED jaune et des LED rouge");
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,HIGH);
   digitalWrite(yellowLED2,HIGH);
   digitalWrite(yellowLED3,LOW);
   digitalWrite(redLED,LOW);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
     delay(tDelay);
      digitalWrite(pinRelais,LOW); // enable on
      digitalWrite(DISABLE,LOW); // enable ON
           
  }
  if(a>=200 && a<250){
   Serial.println("Allumage des Led vertes  et de La  1ere LED jaune. extinction  de la  2ème et 3ème LED jaune et des LED rouge");
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,HIGH);
   digitalWrite(yellowLED2,LOW);
   digitalWrite(yellowLED3,LOW);
   digitalWrite(redLED,LOW);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
 // ALARME DESACTIVE
       digitalWrite(pinRelais,LOW); // enable on
      digitalWrite(DISABLE,LOW); // enable ON
  }
  if(a>=250 && a<350){
   Serial.println("Allumage des Led vertes  et  extinction dES LED jaune et des LED rouge");
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,HIGH);
   digitalWrite(yellowLED,LOW);
   digitalWrite(yellowLED2,LOW);
   digitalWrite(yellowLED3,LOW);
   digitalWrite(redLED,LOW);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
 // ALARME DESACTIVE
   digitalWrite(pinRelais,LOW); // enable on
       digitalWrite(DISABLE,LOW); // enable ON
         
  }
  if(a>=350 && a<400){
   Serial.println("Allumage de LA 1ère et 2ème Led verte  et extinction des LED jaune et rouge et 3ème LED VERTE");
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,HIGH);
   digitalWrite(greenLED3,LOW);
   digitalWrite(yellowLED,LOW);
   digitalWrite(yellowLED2,LOW);
   digitalWrite(yellowLED3,LOW);
   digitalWrite(redLED,LOW);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
 // ALARME DESACTIVE
 
   digitalWrite(pinRelais,LOW); // enable on
     digitalWrite(DISABLE,LOW); // enable ON 
       
  }
 
 
  if(a>=400){
   
 Serial.println("Allumage de LA 1ère  Led verte  et extinction des LED jaune et rouge et 3ème ET 2éme LED VERTE");
   digitalWrite(greenLED,HIGH);
   digitalWrite(greenLED2,LOW);
   digitalWrite(greenLED3,LOW);
   digitalWrite(yellowLED,LOW);
   digitalWrite(yellowLED2,LOW);
   digitalWrite(yellowLED3,LOW);
   digitalWrite(redLED,LOW);
   digitalWrite(redLED2,LOW);
   digitalWrite(redLED3,LOW);
    delay(tDelay);
 // ALARME DESACTIVE
 
   digitalWrite(pinRelais,LOW); // enable on
   digitalWrite(DISABLE,LOW); // enable ON
     
  }
 
 
 
 
 
 
}
 
 >
 

al1fch

#356
Nov 12, 2019, 12:12 pm Last Edit: Nov 12, 2019, 12:19 pm by al1fch
Bonjour et Bienvenue

Tout code publié sur ce forum doit être placé entre les balises appropriées faute de quoi il sera peu lu ....et le message risque de finir à la poubelle.
-> Il faut rééditer dans ce sens le message initial.

+ Quelle  est la 'valeur ajoutée' d'un titre en anglais sur un forum francophone ?

Prendre connaissance des messages épinglés en tête de Forum , messages qui précisent les Règles à suivre c'est  nécessaire quand on arrive sur un Forum !!

A+

lesept

Il est probable que ton problème vienne du delay(tDelay) que tu mets un peu partout. Si tu arrêtes le code pendant 3 secondes, il lui est difficile de voir un obstacle approcher lentement (la fonction delay est bloquante : elle empêche toute autre exécution pendant ce délai).

Tu fais ton traitement de la distance en deux fois : d'abord pour la commande moteur & alarme, puis pour les LEDS. Mais tu as un delay au niveau du premier traitement et 3 secondes c'est assez long. Tu as aussi un delay dans chaque traitement...

De plus, tu devrais laisser les pins 0 et 1 inutilisées, elles servent à la communication série avec l'ordinateur (les Serial.print) : branche tes leds sur d'autres pins (14 et 15 par exemple).

J'ai commenté les delay, est-ce que ça fonctionne mieux ?

Code: [Select]
//www.elegoo.com
//2016.12.08
#define DISABLE 13
int pinRelais = 9;
int tDelay = 3000;
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN);
long a;

int greenLED = 0;
int greenLED2 = 1;
//  Attention ne pas utiliser ces pins (0 et 1) car elles sont réservées à la liaison série
int greenLED3 = 2;
int yellowLED = 3;
int yellowLED2 = 4;
int yellowLED3 = 5;
int redLED = 6;
int redLED2 = 7;
int redLED3 = 8;

void setup() {
  pinMode (greenLED,   OUTPUT);
  pinMode (greenLED2,  OUTPUT);
  pinMode (greenLED3,  OUTPUT);
  pinMode (yellowLED,  OUTPUT);
  pinMode (yellowLED2, OUTPUT);
  pinMode (yellowLED3, OUTPUT);
  pinMode (redLED,     OUTPUT);
  pinMode (redLED2,    OUTPUT);
  pinMode (redLED3,    OUTPUT);
  pinMode (DISABLE,    OUTPUT);
  pinMode (pinRelais,  OUTPUT);
  Serial.begin(9600);
}

void loop() {
  a = sr04.Distance();
  Serial.print(a);
  Serial.println("cm");
  //commande moteur
  if (a < 40) {
    Serial.println("extinction du moteur");
    digitalWrite(DISABLE, HIGH); // enable OFF
//    delay(tDelay);
  }
  else if (a >= 40) {
    Serial.println("réarmement  du moteur");
    digitalWrite(DISABLE, LOW); // enable ON
//    delay(tDelay);
  }
  // commande alarme
  if (a < 80 && a >= 0) {
    Serial.println("declenchement  de l'alarme");
    digitalWrite(pinRelais, HIGH); // enable On
//    delay(tDelay);
  }
  else if (a >= 80) {
    Serial.println("extinction  de l'alarme");
    digitalWrite(pinRelais, LOW); // enable OFF
//    delay(tDelay);
  }
  //Commande allumage LED
  if (a < 40) {
    Serial.println("Allumage des Led vertes,  des LED jaune puis des LED rouge et réamement du moteur");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(yellowLED2, HIGH);
    digitalWrite(yellowLED3, HIGH);
    digitalWrite(redLED, HIGH);
    digitalWrite(redLED2, HIGH);
    digitalWrite(redLED3, HIGH);
//    delay(tDelay); // es-tu sûr de vouloir attendre 3 secondes entre les LEDs et le relais ?
    digitalWrite(pinRelais, HIGH); //
    digitalWrite(DISABLE, HIGH); // enable OFF
  }
 
  if (a >= 40 && a < 80) {
    Serial.println("Allumage des Led vertes  et des LED jaune puis de la premiere et 2eme LED rouge. extinction  de la 3eme  LED rouge");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(yellowLED2, HIGH);
    digitalWrite(yellowLED3, HIGH);
    digitalWrite(redLED, HIGH);
    digitalWrite(redLED2, HIGH);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    //on active l'alarme
    digitalWrite(pinRelais, HIGH); //
    digitalWrite(DISABLE, LOW); // enable ON
  }

  if (a >= 80 && a < 100) {
    Serial.println("Allumage des Led vertes  et des LED jaune puis de la premiere  LED rouge. extinction  des 2eme et 3eme  LED rouge");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(yellowLED2, HIGH);
    digitalWrite(yellowLED3, HIGH);
    digitalWrite(redLED, HIGH);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    //on Désactive l'alarme
    digitalWrite(pinRelais, LOW);
    digitalWrite(DISABLE, LOW); // enable ON
  }

  if (a >= 100 && a < 150) {
    Serial.println("Allumage des Led vertes  et des LED jaune puis extinction  des LED rouge");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(yellowLED2, HIGH);
    digitalWrite(yellowLED3, HIGH);
    digitalWrite(redLED, LOW);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    //on désactive l'alarme
    digitalWrite(pinRelais, LOW);
    digitalWrite(DISABLE, LOW); // enable ON
  }

  if (a >= 150 && a < 200) {
    Serial.println("Allumage des Led vertes  et des 1ere et 2eme LED jaune, extinction  de la 3eme LED jaune et des LED rouge");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(yellowLED2, HIGH);
    digitalWrite(yellowLED3, LOW);
    digitalWrite(redLED, LOW);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    digitalWrite(pinRelais, LOW); // enable on
    digitalWrite(DISABLE, LOW); // enable ON
  }
  if (a >= 200 && a < 250) {
    Serial.println("Allumage des Led vertes  et de La  1ere LED jaune. extinction  de la  2eme et 3eme LED jaune et des LED rouge");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(yellowLED2, LOW);
    digitalWrite(yellowLED3, LOW);
    digitalWrite(redLED, LOW);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    // ALARME DESACTIVE
    digitalWrite(pinRelais, LOW); // enable on
    digitalWrite(DISABLE, LOW); // enable ON
  }

  if (a >= 250 && a < 350) {
    Serial.println("Allumage des Led vertes et extinction des LED jaune et des LED rouge");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, HIGH);
    digitalWrite(yellowLED, LOW);
    digitalWrite(yellowLED2, LOW);
    digitalWrite(yellowLED3, LOW);
    digitalWrite(redLED, LOW);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    // ALARME DESACTIVE
    digitalWrite(pinRelais, LOW); // enable on
    digitalWrite(DISABLE, LOW); // enable ON
  }

  if (a >= 350 && a < 400) {
    Serial.println("Allumage de LA 1ere et 2eme Led verte  et extinction des LED jaune et rouge et 3eme LED VERTE");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, HIGH);
    digitalWrite(greenLED3, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(yellowLED2, LOW);
    digitalWrite(yellowLED3, LOW);
    digitalWrite(redLED, LOW);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    // ALARME DESACTIVE
    digitalWrite(pinRelais, LOW); // enable on
    digitalWrite(DISABLE, LOW); // enable ON
  }

  if (a >= 400) {
    Serial.println("Allumage de la 1ere  Led verte  et extinction des LED jaune et rouge et 3eme ET 2eme LED VERTE");
    digitalWrite(greenLED, HIGH);
    digitalWrite(greenLED2, LOW);
    digitalWrite(greenLED3, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(yellowLED2, LOW);
    digitalWrite(yellowLED3, LOW);
    digitalWrite(redLED, LOW);
    digitalWrite(redLED2, LOW);
    digitalWrite(redLED3, LOW);
//    delay(tDelay);
    // ALARME DESACTIVEE
    digitalWrite(pinRelais, LOW); // enable on
    digitalWrite(DISABLE, LOW); // enable ON
  }
}

Sinon, il faudrait envisager un code sous forme de machines à états. Il y a une discussion sur ce sujet dans la partie 'Projets terminés' du forum
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Cedric406

Bonjour !! je suis un nouveau sur votre forum et aussi un passionné de l'outil Arduino. Je tiens à vous rappeler que je suis à mes débuts dans cet univers. Cependant j'ai eu à rencontrer quelques difficultés en ce qui concerne le capteur ultrason. Mon petit projet à pour but de commander un moteur, 09 LED  , ainsi qu'une sonnerie d'alarme à l'aide des distances déterminées par le  capteur ultrason.
J'ai réussi à faire le montage mais j'ai remarqué que  l'allumage des  09 LED est beaucoup plus stable et précis. Mais hélas cependant le moteur tourne mais ne s'arrete pas quand l'obstacle est proche . l'alarme aussi  ne retenti pas.
A un moment jai essayé d'inclure les conditions d'allumage du moteur et de l'alarme dans la partie traitement des LEDS mais aucun résultat positif. Que faire ………
Voilà le code :
Code : [Select]
//www.elegoo.com
//2016.12.08
#define DISABLE 13




int pinRelais = 9;




int tDelay=3000;




#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;

int greenLED = 10;
int greenLED2 = 14;
int greenLED3 = 2;
int yellowLED = 3;
int yellowLED2 = 4;
int yellowLED3 = 5;
int redLED = 6;
int redLED2 = 7;
int redLED3 = 8;

void setup() {
 
  pinMode (greenLED,OUTPUT);
  pinMode (greenLED2,OUTPUT);
  pinMode (greenLED3,OUTPUT);
  pinMode (yellowLED,OUTPUT);
  pinMode (yellowLED2,OUTPUT);
  pinMode (yellowLED3,OUTPUT);
  pinMode (redLED, OUTPUT);
  pinMode (redLED2,OUTPUT);
  pinMode (redLED3, OUTPUT);
  pinMode(DISABLE,OUTPUT);
  pinMode(pinRelais,OUTPUT);
  Serial.begin(9600);

 

}

void loop() {
 
   
 
 
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   
  //commande moteur et alarme
   if (a<40){
    Serial.println("extinction du moteur et déclenchement de l'alarme");
    digitalWrite(DISABLE,HIGH); // enable low
    digitalWrite(pinRelais,HIGH); // enable On
    delay(1000);
     
   }
   else if (a>=40){
    Serial.println("réarmement  du moteur et extinction de l'alarme");
    digitalWrite(DISABLE,LOW); // enable ON
    digitalWrite(pinRelais,LOW); // enable low
     
   }
   
   
   //Commande allumage LED   
   if(a<40){
   
   Serial.println("Allumage des Led vertes,  des LED jaune puis des LED rouge et réamement du moteur");
    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,HIGH);
    digitalWrite(yellowLED2,HIGH);
    digitalWrite(yellowLED3,HIGH);
    digitalWrite(redLED,HIGH);
    digitalWrite(redLED2,HIGH);
    digitalWrite(redLED3,HIGH);
     
   
   }
   if(a>=40 && a<80){
    Serial.println("Allumage des Led vertes  et des LED jaune puis de la premiere et 2eme LED rouge. extinction  de la 3eme  LED rouge");

    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,HIGH);
    digitalWrite(yellowLED2,HIGH);
    digitalWrite(yellowLED3,HIGH);
    digitalWrite(redLED,HIGH);
    digitalWrite(redLED2,HIGH);
    digitalWrite(redLED3,LOW);
     
     
   }

   if (a>=80 && a<100){
   
    Serial.println("Allumage des Led vertes  et des LED jaune puis de la premiere  LED rouge. extinction  des 2eme et 3eme  LED rouge");

    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,HIGH);
    digitalWrite(yellowLED2,HIGH);
    digitalWrite(yellowLED3,HIGH);
    digitalWrite(redLED,HIGH);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
   
     
   }
   
   
   if (a>=100 && a<150){
    Serial.println("Allumage des Led vertes  et des LED jaune puis . extinction  deS   LED rouge");

    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,HIGH);
    digitalWrite(yellowLED2,HIGH);
    digitalWrite(yellowLED3,HIGH);
    digitalWrite(redLED,LOW);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
     
     
   }
   
   if(a>=150 && a<200){
    Serial.println("Allumage des Led vertes  et des 1ere et 2eme LED jaune. extinction  de la 3ème LED jaune et des LED rouge");
    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,HIGH);
    digitalWrite(yellowLED2,HIGH);
    digitalWrite(yellowLED3,LOW);
    digitalWrite(redLED,LOW);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
     
           
   }
   if(a>=200 && a<250){
    Serial.println("Allumage des Led vertes  et de La  1ere LED jaune. extinction  de la  2ème et 3ème LED jaune et des LED rouge");
    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,HIGH);
    digitalWrite(yellowLED2,LOW);
    digitalWrite(yellowLED3,LOW);
    digitalWrite(redLED,LOW);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
     
   }
   if(a>=250 && a<350){
    Serial.println("Allumage des Led vertes  et  extinction dES LED jaune et des LED rouge");
    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,HIGH);
    digitalWrite(yellowLED,LOW);
    digitalWrite(yellowLED2,LOW);
    digitalWrite(yellowLED3,LOW);
    digitalWrite(redLED,LOW);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
   
 
         
   }
   if(a>=350 && a<400){
    Serial.println("Allumage de LA 1ère et 2ème Led verte  et extinction des LED jaune et rouge et 3ème LED VERTE");
    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,HIGH);
    digitalWrite(greenLED3,LOW);
    digitalWrite(yellowLED,LOW);
    digitalWrite(yellowLED2,LOW);
    digitalWrite(yellowLED3,LOW);
    digitalWrite(redLED,LOW);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
   
       
   }

   
   if(a>=400){
   
  Serial.println("Allumage de LA 1ère  Led verte  et extinction des LED jaune et rouge et 3ème ET 2éme LED VERTE");
    digitalWrite(greenLED,HIGH);
    digitalWrite(greenLED2,LOW);
    digitalWrite(greenLED3,LOW);
    digitalWrite(yellowLED,LOW);
    digitalWrite(yellowLED2,LOW);
    digitalWrite(yellowLED3,LOW);
    digitalWrite(redLED,LOW);
    digitalWrite(redLED2,LOW);
    digitalWrite(redLED3,LOW);
   
     
   }

 
   
   

   
}

J-M-L

#359
Nov 13, 2019, 06:58 am Last Edit: Nov 13, 2019, 06:59 am by J-M-L
Lisez les règles du forum et ne postez pas deux fois la même demande.
Quand vous aurez fait votre part du boulot correctement peut être vous aurez plus de chance qu'un bénévole se penche sur votre projet (scolaire ?)

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up