Probleme codage servomoteur !!! A l'aide !!! ;)

Bonjour, je suis debutant 8) dans tout ce qui est Arduino et je me suis lancer dans un projet de boite aux lettres automatique.
Mon but est de :

Un detecteur ultrason detecte quand il ya une lettre. En rentrant chez soi le soir, on passe un badge rfid devant le module rfid, une led rouge s'allume si il n'y pas de courrier, si il yen a, une led verte s'allume puis le servomoteur deverouille la porte de la boite aux lettres en faisant un quart de tour.

Mon problème est que le servomoteur ne veut pas tourner quand il ya du courrier et que la led verte s'est allumée.

Voici le code sans la partie servomoteur, si quelqu'un pourrais m'aider à la créer, sa serait super !!! :grinning: :wink:

#include <SPI.h>
#include <RFID.h>
#define trigPin 7
#define echoPin 6
#define led 3

const char led_rouge = 2;

RFID monModuleRFID(10,9);

int UID[5]={};
int MASTERKEY[5]={144,34,225,135,212};

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  
  Serial.begin(9600);
  SPI.begin();
  monModuleRFID.init();  
  pinMode(led_rouge, OUTPUT);
  digitalWrite(led_rouge, LOW);
 
}
void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

 digitalWrite(trigPin, LOW);
 {
    if (monModuleRFID.isCard()) { 
      digitalWrite(trigPin,HIGH); 
          if (monModuleRFID.readCardSerial()) {        
            Serial.print("L'UID est: ");
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
            Serial.println("");
          }
          
    {  if (distance <= 15){
          (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4]);
          
             digitalWrite(led, HIGH);
             delay(1000);
             digitalWrite(led, LOW);
 //ici mettre moteur qui ouvre la porte
  
  
  
  
  }      else {
            digitalWrite(led_rouge, HIGH);
            delay(1000);
            digitalWrite(led_rouge, LOW);
           }
      monModuleRFID.halt();
    }
    delay(1);    
    }
    }
}

Si vous avez des questions ou autres, je repondrais le plus vite possible

Merci :smiley:

corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)


ici on ne code pas pour les autres... mettez votre meilleure tentative pour ajouter le servo et on vous aidera

D'accord
Ma meilleure tentative c'est sa :

#include <SPI.h>
#include <RFID.h>
#define trigPin 7
#define echoPin 6
#define led 3
#include <Servo.h> 
  
Servo monservo;  
const char led_rouge = 2;

RFID monModuleRFID(10,9);

int UID[5]={};
int MASTERKEY[5]={144,34,225,135,212};

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);
  
  Serial.begin(9600);
  SPI.begin();
  monModuleRFID.init();  
  pinMode(led_rouge, OUTPUT);
  digitalWrite(led_rouge, LOW);

  monservo.attach(1); 
  monservo.write(0); 
}
void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

 digitalWrite(trigPin, LOW);
 {
    if (monModuleRFID.isCard()) { 
      digitalWrite(trigPin,HIGH); 
          if (monModuleRFID.readCardSerial()) {        
            Serial.print("L'UID est: ");
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
            Serial.println("");
          }
          
    {  if (distance <= 15){
          (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4]);
          
             digitalWrite(led, HIGH);
             delay(1000);
             digitalWrite(led, LOW);
              monservo.write(80); 
  delay(1000); 
  monservo.write(180); 
  delay(1000); 
 //ici mettre moteur qui ouvre la porte
  
  
  
  
  }      else {
            digitalWrite(led_rouge, HIGH);
            delay(1000);
            digitalWrite(led_rouge, LOW);
           }
      monModuleRFID.halt();
    }
    delay(1);    
    }
    }
}

je lirai si vous mettez les tags et que vous indentez, virez les blancs là où il n'y en a pas besoin etc - là c'est illisible


ils servent à quoi les trucs en rouge?

[color=red] digitalWrite(trigPin, LOW);
 {[/color]
    if (monModuleRFID.isCard()) { 
[color=red]      digitalWrite(trigPin,HIGH);[/color]

    if (distance <= 15) {
      [color=red](UID[0] == MASTERKEY[0]
       && UID[1] == MASTERKEY[1]
       && UID[2] == MASTERKEY[2]
       && UID[3] == MASTERKEY[3]
       && UID[4] == MASTERKEY[4])[/color];

Les TRIGPIN LOW et HIGH c'etait pour eteindre le capteur ultrason mais sa ne marche pas :confused: , j'ai oublié de l'enlever :sweat_smile:

Pour les MASTERKEY, c'est un code que j'ai récupéré sur Internet et je crois que c'est les chiffres de l'iud du badge :smiley:

Phile39:
Pour les MASTERKEY, c'est un code que j'ai récupéré sur Internet et je crois que c'est les chiffres de l'iud du badge :smiley:

ben oui mais ils ne sont pas dans le if...

il faut restructurer votre code pour le moment

--> a-t-on besoin de regarder s'il y a une lettre tant qu'on n'a pas passé le badge?
--> que voulez vous faire quand on passe le badge?

C'est quoi le if ?

je suis vraiment débutant dsl :slight_smile:

    [color=red]if[/color] (distance <= 15) {
      (UID[0] == MASTERKEY[0]
       && UID[1] == MASTERKEY[1]
       && UID[2] == MASTERKEY[2]
       && UID[3] == MASTERKEY[3]
       && UID[4] == MASTERKEY[4]);

ce code il dit: "si la distance est inférieure à 15 alors ..."

il ne dit pas "si la distance est inférieure à 15 ET si la carte présentée est bonne"

pouvez vous donner un lien sur la librairie RFID que vous utilisez?

Je veux que quand on passe le badge, la led verte s'allume et le servomoteur tourne pour libérer la porte

Pour les MASTERKEY, je ne sais pas quoi faire

j'ai trouver la librairie sur ce site

voilà un début de structuration de votre boucle

void loop()
{
  if (monModuleRFID.isCard()) { // si une carte est présentée
    if (monModuleRFID.readCardSerial()) { // on essaye de lire la carte et si ça fonctionne
      if ( 
        (monModuleRFID.serNum[0] == MASTERKEY[0]) && // on compare chacune des clés
        (monModuleRFID.serNum[1] == MASTERKEY[1]) &&
        (monModuleRFID.serNum[2] == MASTERKEY[2]) &&
        (monModuleRFID.serNum[3] == MASTERKEY[3]) &&
        (monModuleRFID.serNum[4] == MASTERKEY[4])
      ) {
        // on a trouvé la bonne carte, on lit la distance
        long duration, distance;

        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = (duration / 2) / 29.1;

        if (distance <= 15) {
          // distance inférieure à 15


        } else {
          // distance supérieure à 15

        }
      }
    } // fin de readCardSerial()
    monModuleRFID.halt();
  } // fin de isCard()
  delay(100); // on attend un peu
}

Merci :smiley:

faut finir de remplir hein - là ça ne fait rien :slight_smile:

Maintenant, la led s'allume mais le servo ne tourne pas :confused:

#include <SPI.h>
#include <RFID.h>
#define trigPin 7
#define echoPin 6
#define led 3
#include <Servo.h>

Servo monservo;
const char led_rouge = 2;

RFID monModuleRFID(10, 9);

int UID[5] = {};
int MASTERKEY[5] = {144, 34, 225, 135, 212};

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);

  Serial.begin(9600);
  SPI.begin();
  monModuleRFID.init();
  pinMode(led_rouge, OUTPUT);
  digitalWrite(led_rouge, LOW);

  monservo.attach(1);
  monservo.write(0);
}
void loop()
{
  if (monModuleRFID.isCard()) {
    if (monModuleRFID.readCardSerial()) {
      if (
        (monModuleRFID.serNum[0] == MASTERKEY[0]) &&
        (monModuleRFID.serNum[1] == MASTERKEY[1]) &&
        (monModuleRFID.serNum[2] == MASTERKEY[2]) &&
        (monModuleRFID.serNum[3] == MASTERKEY[3]) &&
        (monModuleRFID.serNum[4] == MASTERKEY[4]) ) {

        long duration, distance;

        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = (duration / 2) / 29.1;

        if (distance <= 15) {
          digitalWrite(led, HIGH);
          delay(1000);
          digitalWrite(led, LOW);
          monservo.write(80);
          delay(1000);
          monservo.write(180);
          delay(1000);

        } else {
          digitalWrite(led_rouge, HIGH);
          delay(1000);
          digitalWrite(led_rouge, LOW);

        }

        monModuleRFID.halt();
      }
    } // fin de readCardSerial()
  } // fin de isCard()
  delay(100); // on attend un peu
}
monservo.attach([color=red]1[/color]);

il y a quoi de branché sur la pin #1 de votre Arduino?? et elle sert à quoi généralement cette pin? je vous laisse chercher dans la doc ou sur cette image

J'ai changer de pin et ca marche Merci !!!! :smiley: ;D

Phile39:
J'ai changer de pin et ca marche Merci !!!! :smiley: ;D

oui mais faut pas le faire bêtement... merci de répondre à la question... à quoi servent les pins 0 et 1 d'habitude?

Je ne sais pas du tout :o :confused: je l'ai choisi au hasard

faut chercher ! certaines pins ont certaines fonctions bien définies

j'aimerais savoir comment je peux demander a l'arduino que quand le servomoteur est a 70°, si la distance repasse au dessus de 15, qu'elle remette le servo en position initiale

#include <SPI.h>
#include <RFID.h>
#define trigPin 7
#define echoPin 6
#define led 3
#include <Servo.h>

Servo monservo;
const char led_rouge = 2;

RFID monModuleRFID(10, 9);

int UID[5] = {};
int MASTERKEY[5] = {144, 34, 225, 135, 212};

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led, OUTPUT);

  Serial.begin(9600);
  SPI.begin();
  monModuleRFID.init();
  pinMode(led_rouge, OUTPUT);
  digitalWrite(led_rouge, LOW);

  monservo.attach(5);
  monservo.write(70);
}
void loop()
{
  long duration, distance;

        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = (duration / 2) / 29.1;
  
 
  if (monModuleRFID.isCard()) {
    if (monModuleRFID.readCardSerial()) {
      if (
        (monModuleRFID.serNum[0] == MASTERKEY[0]) &&
        (monModuleRFID.serNum[1] == MASTERKEY[1]) &&
        (monModuleRFID.serNum[2] == MASTERKEY[2]) &&
        (monModuleRFID.serNum[3] == MASTERKEY[3]) &&
        (monModuleRFID.serNum[4] == MASTERKEY[4]) ) {
       
        

        if (distance <= 15) {
         digitalWrite(led,HIGH);
         monservo.write(170);
         delay(500);
         digitalWrite(led,LOW);
          
            
         
        }
        
         else {
          digitalWrite(led_rouge,HIGH);
          delay(1000);
          digitalWrite(led_rouge,LOW);

        }
 
        monModuleRFID.halt();
      }
    } // fin de readCardSerial()
  } // fin de isCard()
  delay(100); // on attend un peu
}