hey, ich will die void loop() fuktion in einer if schleife frühzeitig neu starten (per Befehl). Von dem goto Befehl den ich anderen Beiträgen gefunden habe wird nur abgeraten.
Habt ihr gute Ideen?
Beispielcode:
if (uidvergleich()) //change here the UID of the card/cards that you want to give access
{
digitalWrite(green_led, HIGH);
delay(1000);
digitalWrite(green_led,LOW);
delay(1000
// Hier soll Void loop neugestartet werden
}
... wenn du "fast" einen Reset machen willst.
Alle Globalen Variablen sind weg, aber die Hardware wird nicht richtig zurückgesetzt. Davon wird daher in der Regel abgeraten. Der Sketch startet wieder vor setup().
michael_x:
... wenn du "fast" einen Reset machen willst.
Alle Globalen Variablen sind weg, aber die Hardware wird nicht richtig zurückgesetzt. Davon wird daher in der Regel abgeraten. Der Sketch startet wieder vor setup().
#include <SPI.h> // Inklusion der Bibeleothek
#include <MFRC522.h>// Inklusion der Bibeleothek
#define RST_PIN 9 // SPI Reset Pin
#define SS_PIN 10 // SPI Slave Select Pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // Instanz des MFRC522 erzeugen
int a = 0; // Durchgang erste uid 1 abfrage
int b = 0; // durgang zweite uid 2 abfrage
byte uid1[] = {0xC0, 0xDA, 0xC6, 0x35}; //uid^1
byte uid2[] = {0x6C, 0xD1, 0xDD, 0x21}; //uid^2
byte uid3[] = {0xD2, 0xFB, 0x2C, 0x5B}; //uid^3
byte geleseneuid[] = {0x00, 0x00, 0x00, 0x00}; //gelesene Uid
int green_led = 3; // Pin der blauen LED
int red_led = 5; // Pin der roten LED
int relais = 4; // Pin des Relais
int dauerueberfahrtsek = 10; // Dauer der Überfahrt in sek
int d = 0; //Testvariable
void setup() {
// Diese Funktion wird einmalig beim Start ausgeführt
Serial.begin(9600); // Serielle Kommunikation mit dem PC initialisieren
SPI.begin(); // Initialisiere SPI Kommunikation
mfrc522.PCD_Init(); // Initialisiere MFRC522 Lesemodul
pinMode(green_led, OUTPUT); // Defenierung der Pins
pinMode(red_led, OUTPUT);// Defenierung der Pins
pinMode(relais, OUTPUT); //Defenierung der Pins
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
delay(50); //schauen ob karte da ist
return;
}
// Now a card is selected. The UID and SAK is in mfrc522.uid.
// Dump UID
Serial.print(F("Card UID:"));
for (byte i = 0; i < mfrc522.uid.size; i++) { // Auslesen der Karte
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
geleseneuid[i] = mfrc522.uid.uidByte[i];
}
Serial.println();
Serial.println(geleseneuid[1], HEX);
Serial.println(uid1[1], HEX);
if (uidvergleich1() ) //change here the UID of the card/cards that you want to give access
{
digitalWrite(green_led, HIGH);
digitalWrite(relais, HIGH);
delay(dauerueberfahrtsek * 1000); // wenn erste uid true ist
digitalWrite(green_led, LOW);
digitalWrite(relais, LOW);
delay(1000);
// Hier soll Void loop neugestartet werden
}
else {
if (uidvergleich2()) //change here the UID of the card/cards that you want to give access
{
digitalWrite(green_led, HIGH);
digitalWrite(relais, HIGH);
delay(dauerueberfahrtsek * 1000); // wenn zweite uid true ist und erste false
digitalWrite(green_led, LOW);
digitalWrite(relais, LOW);
delay(1000);
// Hier soll Void loop neugestartet werden
}
else {
digitalWrite(red_led, HIGH);
delay(1000); // wenn uid 1 und uid2 false sind
digitalWrite(red_led, LOW);
}
}
delay(1000);
}
boolean uidvergleich1() { // uid 1 vergleich unterprogramm
switch (a) { // Für die erste UID
case 0:
if (mfrc522.uid.uidByte[a] != uid1[a]) {
return false;
Serial.print(d);
} else {
a++;
}
break;
case 1: if (mfrc522.uid.uidByte[a] != uid1[a]) {
return false;
Serial.print(d);
} else {
a++;
}
break;
case 2: if (mfrc522.uid.uidByte[a] != uid1[a]) {
return false;
Serial.print(d);
} else {
a++;
}
break;
case 3: if (mfrc522.uid.uidByte[a] != uid1[a]) {
return false;
Serial.print(d);
} else {
return true;
}
a = 0;
break;
}
}
boolean uidvergleich2() { // uid 2 vergleich unterprogramm
switch (b) { // Für die erste UID
case 0:
if (mfrc522.uid.uidByte[b] != uid2[b]) {
return false;
Serial.print(d);
} else {
b++;
}
break;
case 1: if (mfrc522.uid.uidByte[b] != uid2[b]) {
return false;
Serial.print(d);
} else {
b++;
}
break;
case 2: if (mfrc522.uid.uidByte[b] != uid2[b]) {
return false;
Serial.print(d);
} else {
b++;
}
break;
case 3: if (mfrc522.uid.uidByte[b] != uid2[b]) {
return false;
Serial.print(d);
} else {
return true;
}
b = 0;
break;
}
}
Der gesamte Code ^^^
if (uidvergleich1() ) //change here the UID of the card/cards that you want to give access
{
digitalWrite(green_led, HIGH);
digitalWrite(relais, HIGH);
delay(dauerueberfahrtsek * 1000); // wenn erste uid true ist
digitalWrite(green_led, LOW);
digitalWrite(relais, LOW);
delay(1000);
// Hier soll Void loop neugestartet werden
}
else {
if (uidvergleich2()) //change here the UID of the card/cards that you want to give access
{
digitalWrite(green_led, HIGH);
digitalWrite(relais, HIGH);
delay(dauerueberfahrtsek * 1000); // wenn zweite uid true ist und erste false
digitalWrite(green_led, LOW);
digitalWrite(relais, LOW);
delay(1000);
// Hier soll Void loop neugestartet werden
}
else {
digitalWrite(red_led, HIGH);
delay(1000); // wenn uid 1 und uid2 false sind
digitalWrite(red_led, LOW);
}
}