Programme RFID avec switch

Bonjour,
J’ai deux programmes pour le RFID le premier permet de lire l’Identifiant Unique du Badge sur le Moniteur Série tandis que le deuxième programme permet de savoir le badge est accepté ou pas.
Les deux codes fonctionnent mais mon prof m’a dit d’en faire qu’un seul en utilisant la fonction ‘‘switch’’ mais je ne la comprends pas donc si certains peuvent m’aider pour m’expliquer Merci.

Voici le premier code:

#include <SoftwareSerial.h>

SoftwareSerial RFID(2, 3); // RX and TX
int i;
void setup()
{
RFID.begin(9600); // start serial to RFID reader
Serial.begin(9600); // start serial to PC
}
void loop()
{
if (RFID.available() > 0)
{
i = RFID.read();
Serial.print(i, DEC);
Serial.print(" ");
}
}

Voici le deuxième code:

#include <SoftwareSerial.h>


SoftwareSerial RFID(2, 3); // RX and TX
const int led=7;
int data1 = 0;
int ok = -1;
int yes = 13;
int no = 12;
// use first sketch in http://wp.me/p3LK05-3Gk to get your tag numbers
int tag1[14] = {2,48,54,48,48,48,68,65,66,50,56,56,56,3};
int tag2[14] = {2,49,67,48,48,54,66,69,49,66,69,50,56,3};
int tag3[14] = {2,48,54,48,48,48,68,65,66,50,56,56,56,3};
int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // used for read comparisons

void setup()
{
 


  pinMode(led,OUTPUT);
RFID.begin(9600); // start serial to RFID reader
Serial.begin(9600); // start serial to PC
pinMode(yes, OUTPUT); // for status LEDs
pinMode(no, OUTPUT);
}
boolean comparetag(int aa[14], int bb[14])
{
boolean ff = false;
int fg = 0;
for (int cc = 0 ; cc < 14 ; cc++)
{
if (aa[cc] == bb[cc])
{
fg++;
}
}
if (fg == 14)
{
ff = true;
}
return ff;
}
void checkmytags() // compares each tag against the tag just read
{
ok = 0; // this variable helps decision-making,
// if it is 1 we have a match, zero is a read but no match,
// -1 is no read attempt made
if (comparetag(newtag, tag1) == true)
{
ok++;
}
if (comparetag(newtag, tag2) == true)
{
ok++;
}
if (comparetag(newtag, tag3) == true)
{
ok++;
}
}
void readTags()
{
ok = -1;
if (RFID.available() > 0)
{
// read tag numbers
delay(100); // needed to allow time for the data to come in from the serial buffer.
for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
{
data1 = RFID.read();
newtag[z] = data1;
}
RFID.flush(); // stops multiple reads
// do the tags match up?
checkmytags();
}
// now do something based on tag type
if (ok > 0) // if we had a match
{
Serial.println("Bienvenue");
digitalWrite(yes, HIGH);
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(yes, LOW);
ok = -1;
digitalWrite(led,LOW);
}
else if (ok == 0) // if we didn't have a match
{
Serial.println("Rejected");
digitalWrite(no, HIGH);
delay(1000);
digitalWrite(no, LOW);
ok = -1;
digitalWrite(led,LOW);
}
}
void loop()
{
readTags();


}

bonjour, tu veux faire quoi exactement?

parce que là, le coup du switch , je vois pas l'utilité.

Je voudrais réussir à ne créer qu'un seul programme en combinant les deux et mon prof m'a dit d'utiliser le switch pour y arriver. Puisqu'il s'agit de mon projet de Terminale où le RFID doit me permettre de badger et si le badge est correcte alors le portail doit s'ouvrir.

Cobrafox34: Je voudrais réussir à ne créer qu'un seul programme en combinant les deux et mon prof m'a dit d'utiliser le switch pour y arriver. Puisqu'il s'agit de mon projet de Terminale où le RFID doit me permettre de badger et si le badge est correcte alors le portail doit s'ouvrir.

si tu combine les deux, ca va pas faire ouvrir un portail le deuxième code, si tu l'as bien lu et compris permet d'allumer une led pour yes, donc sers toi de ces lignes

if (ok > 0) // if we had a match
{
Serial.println("Bienvenue");
digitalWrite(yes, HIGH);
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(yes, LOW);
ok = -1;
digitalWrite(led,LOW);
}

et le switch case ne sert a rien dans ce cas.

le premier code sert a lire le badge et afficher ses données simplement

Oui je sais j’ai mis une LED mais normalement c’est pour un moteur mais je voulais essayer avec une LED pour savoir si cela marchait.
Donc je vais essayait de faire fonctionner un shield motor puis de combiner les deux ^^

Bonjour j’ai combiné les deux programmes à l’aide du switch ainsi quand je passe un badge qui est valide la LED s’allume puis sur le Moniteur Série ça me dit ‘’ Bienvenue " si le badge est valide ou “rejeced” si il n’est pas valide
. Puis la fonction else doit normalement me permettre lorsque je passe le badge devant le lecteur RFID de m’indique l’IDE sauf que j’ai essayé de nombreuses fois et cela n’a fonctionné qu’à deux reprises et je ne comprends pas pourquoi.

#include <SoftwareSerial.h>


int switchPin = 5;              // switch is connected to pin 2
int val;                        // variable for reading the pin status
int buttonState;                // variable to hold the last button state
int i;
SoftwareSerial RFID(2, 3); // RX and TX
const int led=7;
int data1 = 0;
int ok = -1;
int yes = 13;
int no = 12;
// use first sketch in http://wp.me/p3LK05-3Gk to get your tag numbers
int tag1[14] = {2,48,54,48,48,48,68,65,66,50,56,56,56,3};
int tag2[14] = {2,49,67,48,48,54,66,69,49,66,69,50,56,3};
int tag3[14] = {2,48,54,48,48,48,68,65,66,50,56,56,56,3};
int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // used for read comparisons






void setup() {
 pinMode(switchPin, INPUT);    // Set the switch pin as input

 Serial.begin(9600);           // Set up serial communication at 9600bps
 buttonState = digitalRead(switchPin);   // read the initial state
 RFID.begin(9600); // start serial to RFID reader
 pinMode(led,OUTPUT);
 pinMode(yes, OUTPUT); // for status LEDs
pinMode(no, OUTPUT);
}
boolean comparetag(int aa[14], int bb[14])
{
boolean ff = false;
int fg = 0;
for (int cc = 0 ; cc < 14 ; cc++)
{
if (aa[cc] == bb[cc])
{
fg++;
}
}
if (fg == 14)
{
ff = true;
}
return ff;
}
void checkmytags() // compares each tag against the tag just read
{
ok = 0; // this variable helps decision-making,
// if it is 1 we have a match, zero is a read but no match,
// -1 is no read attempt made
if (comparetag(newtag, tag1) == true)
{
ok++;
}
if (comparetag(newtag, tag2) == true)
{
ok++;
}
if (comparetag(newtag, tag3) == true)
{
ok++;
}
}
void readTags()
{
ok = -1;
if (RFID.available() > 0)
{
// read tag numbers
delay(100); // needed to allow time for the data to come in from the serial buffer.
for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
{
data1 = RFID.read();
newtag[z] = data1;
}
RFID.flush(); // stops multiple reads
// do the tags match up?
checkmytags();
}
// now do something based on tag type
if (ok > 0) // if we had a match
{
Serial.println("Bienvenue");
digitalWrite(yes, HIGH);
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(yes, LOW);
ok = -1;
digitalWrite(led,LOW);
}
else if (ok == 0) // if we didn't have a match
{
Serial.println("Rejected");
digitalWrite(no, HIGH);
delay(1000);
digitalWrite(no, LOW);
ok = -1;
digitalWrite(led,LOW);
}
}

void loop()
{

val = digitalRead(switchPin);      // read input value and store it in val

 if (val != buttonState) {          // the button state has changed!
   if (val == LOW) {                // check if the button is pressed
     readTags();
   } else
   {  
     // the button is -not- pressed...
     if (RFID.available() > 0)   
{
i = RFID.read();
Serial.print(i, DEC);
Serial.print(" ");
}
   }
 }
}

Donc j’aimerais si possible que vous m’indiquiez si il y a un problème dans le code ou pas parce que je ne comprends pas pourquoi a fonctionné deux fois puis plus du tout sachant que je n’ai modifié entre temps.

code entre balise code </>

il est ou le switch case?

Je n'utilise pas le switch case finalement mais un if et else