Chatière automatique sous contrôle RIFD

Bonjour à tous, il y de cela 1 ans j’ai découvert cette merveilleuse invention hautement addictive qui est l’Arduino bien que n’ayant aucune connaissance de base en Electronique et en programmation !! :smiley:
Depuis 1000 projet trotte dans ma caboche, dont certain que j’ai pu concrétiser et d’autre non faute de temps et de connaissance.
En ce moment, je suis sur un projet qui me donne un peu de fil à retordre ( sans jeux de mot) :stuck_out_tongue: !
Une chatière automatique activable avec un badge RFID, le dit chat porte le badge sur son collier évitant ainsi d’éventuelle animaux indésirable de prendre possession des lieux :twisted:
La machine est simple en elle même , un code du badge est reconnu par le programme et celui active des moteur commandé par relais ou transistor.
Pour la partit " hard ware " rien de bien hight teck , en gros, un disque )avec un trou , couplé à un moteur rotatif lui fait faire une révolution interrompue par deux contacteur , afin de laisser passer le chat sans encombre et fermer après son passage.
(Ne vous inquiétez pas le moteur est débrayable en cas de forçage , au cas ou le chat soit d’une extrême mollesse …
Un lecteur est prévus aussi pour la sortie … trop la classe l’agent chat avec son petit “badgounet” pour rentrer et sortir de chez lui sans harceler le mettre de maison.
Niveau Matos j’ai opté pour une Méga 2560 pour sa grande capacité de mémoire ( tres bien quand on est encore un peu sale dans sa programmation :oops: ) , la profusion de ses entrée sortie ( on peu mettre plein de truc qui serve a rien sans trop se prendre le choux , genre une led rouge et verte à l’entre de la chatière :roll: ) mais surtout 4 liaison serie pour brancher encore plus lecteur RFID.
Une machine a distribuer les croquette est en construction, activable avec le même badge RFID, oui oui oui !!
C’est ça quand on a un chat boulimique, la machine a distribuer les croquette classique ca dure pas longtemps …
Alors oui je pourrai mettre un timer mais deja c est moins classe, mais surtout je peut vérifier que le chat viens bien manger sa ration tout les jours en reliant le système à un Shield GPRS ^^ :geek:
Oui on a pensé a tout , que se passerai t il si le chat perd son badge ou si il ne fonctionne plus … la pauvre bête dépérirai
Voila, ca sauve pas des vies mais ca simplifie la vie ^^

Le lecteur RFID, c 'est un : grove 125 khz rfid reader de chez Seed studio !

Pour la partie Software, la ça pêche un peu plus :

à la base je me suis inspiré d’un programme que j’avais utilisé pour une fermeture Electronique activé par un clavier numérique de PC lui même relié par liaison série à l’arduino …
Ce programme marchais très bien, et vu que en me documentant sur les lecteur RFID, j’ai appris que les donnés étaient transmise via la liaison série, je me suis dit que cela fonctionnerai tout comme !
Erreur fatal !!

Voici le programme qui ne marche pas ( simplifié) :

char mot[20];                        //le mot lu sur la liaison série


void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
                                                    //On démarre la voie série avec une vitesse de 9600 bits/seconde
  
  Serial.println("Lecteur RIFD opérationelle");                    // test 
}

void loop()
{
                                  //s'il y a des données disponibles sur la liaison série (Serial.available() renvoi un nombre   supérieur à zero 
  if(Serial1.available())
  {
                                                            //alors on va lire le contenu de la réception
    recherchemotdepasse();  
  }

}

                                                          //lit un mot sur la liaison série (lit jusqu'à rencontrer le caractère '\n')

void recherchemotdepasse(void)
{
  int i = 0;                                         //variable locale pour l'incrémentation des données du tableau
                                                            //on lit les caractères tant qu'il y en a
                          //OU si jamais le nombre de caractères lus atteint 19 (limite du tableau stockant le mot - 1 caractère)

  while(Serial1.available() > 0 && i <= 19)
  {
    mot[i] = Serial1.read();            //on enregistre le caractère lu
    delay(10);                                    //laisse un peu de temps entre chaque accès a la mémoire
    i++;                                                //on passe à l'indice suivant

    mot[i] = '\0';                           //on supprime le caractère '\n' et on le remplace par celui de fin de chaine '\0'
  }



 Serial.println(mot);                                   // test pour récuperer le code du badge 
  int resultat = strcmp("0D00600883E6", mot); 
                                                                       //utilisation de lafonction strcmp(chaine1, chaine2) pour comparer des mots
  if(resultat == 0)
  {
    Serial.println(mot);
    Serial.println("Mot de passe correcte");
   ouverture();
    return;
  }

}
void ouverture(void)

{
                                     // action d'ouverture chatière 

  Serial.println("Le chat est dans la place");

}

Durant les teste, le badge est reconnu et le code s’affiche normalement sur le moniteur série :
0D00600883E6

Mais la fonction “strcmp” ne trouve pas “d’égalité” entre les deux chaines de caractère … ça ne “match” pas !!
J’ai beau lire la doc du lecteur, chercher sur les forum … essayer d’autre solution ( software série), je ne trouve pas de solution
et j ai besoin de toute tacon de plusieurs liaison série …
En plus je paris que mon erreur est tout bête, j’ai apprit sur le tas et certain concepts basique m’échappe encore …
je suis assez adepte du " Do it yourself " comme mon chat d’ailleurs … mais la je fait appelle à une âme bienveillante
qui pourrai me guider et m’aider à comprendre mon erreur .
Bien à vous et merci
Jeremy

Bonjour,

Edite ton message et remet le en forme selon la charte du forum (code entre les balises).

+1

Ca fait péter les index i entre crochet car ça reconnait la balise pour l'italique, du coup on ne peut pas comprendre ton code, en plus que c'est presque illisible ...

Voila, c'est fait ! avec même la correction de faute d'orthographe en prime !!
Désolé je ne sais pas qu'il y avait un format pour le code .

Djeek:
Voila, c'est fait ! avec même la correction de faute d'orthographe en prime !!
Désolé je ne sais pas qu'il y avait un format pour le code .

bonjour
si tu veux de l'aide , mets un code qui déjà ET aussi compile :grin:

Bonsoir, si j'ai bien compris vous me demander de mettre un code que j'aurai au préalable compilé ?
Il se trouve qu'il a été à de nombreuse reprise, l'IDE n'as pas relevé de bug, sinon je l'aurai noté ...
J'ai peut être fait une erreur lors du "copier/coller ... je m'en excuse encore une fois.

Djeek:
Bonsoir, si j'ai bien compris vous me demander de mettre un code que j'aurai au préalable compilé ?
Il se trouve qu'il a été à de nombreuse reprise, l'IDE n'as pas relevé de bug, sinon je l'aurai noté ...
J'ai peut être fait une erreur lors du "copier/coller ... je m'en excuse encore une fois.

bonjour,
non, il faut le code entier et non des bouts :wink:

Bonjour, en effet , il y a des erreurs sur ce programme, je l'ai donc corrigé et republié
mea-culpa .
On y arrive !

Bonjour,

Ajoute

	Serial.print ("caractere ");
	Serial.print (i, DEC);
	Serial.print (" : ");
	Serial.print (mot[i], HEX);
	Serial.print (" ( ");
	Serial.print (mot[i]);
	Serial.println (" ) ");

après

    mot[i] = Serial1.read();            //on enregistre le caractère lu

et on verra que les caractères renvoyés par le lecteur rfid ne correspondent pas à ce que tu compares.
Il y a probablement un préfixe et/ou un suffixe en plus du no .imprimé sur le badge, et le format avec lequel tu compares la chaîne lue me semble suspect aussi.

Affiche-nous le résultat du Serial Monitor pour qu'on voie ce que ça donne !

Bonsoir cbrandt.
Merci pour ton aide bien que le problème est résolu depuis peu , ca
Tu as en effet raison, il y a bien un suffixe et un préfixe en plus du numéro d’identification du badge.
J'ai donc fait une lecture à vide pour éliminer le première caractère .
puis la fonction compare seulement les douze première caractère et bingo ca marche.

Bonsoir cbrandt.
Merci pour ton aide bien que le problème est résolu depuis peu , ça fait plaisir de voir qu'on peut compté sur la communauté
Tu as en effet raison, il y a bien un suffixe et un préfixe en plus du numéro d’identification du badge.
J'ai donc fait une lecture à vide pour éliminer le première caractère .
puis la fonction compare seulement les douze première caractère et bingo ca marche.
Je vais quand même essayer ta manip, pour voir ce que ça donne ... j'imprimerai le résultat