Guten Abend allerseits.
Ich habe die letzten Stunden damit verbracht.... einen Countdown in meinen bestehenden Sketch einzubauen.... ABSOLUT erfolglos. Aber fangen wir vorne an:
Ich will einen Fressnapf bauen, der per RFID geöffnet wird.
Die Katze hat also ein Halsband mit Tag an. Sobald sie an den Napf geht, öffnet sich eine Klappe und sie kann fressen.
Damit will ich verhindern dass meine Fette Katze, meiner kleinen Mietze alles wegfrisst
Die Materialien habe ich. Ein grundsätzlicher Sketch steht schon....allerdings habe ich das Problem, dass ich gerne einen Countdown einfügen möchte. Aktuell mache ich es mit einem Delay, sodass die Klappe beim auslesen des Tags öffnet und anschließend nach "x" sekunden wieder schließt.
Wenn dann jedoch die Katze noch am fressen ist, schließt sich die Klappe vor Ihrer Nase....
Daher würde ich gerne einen Countdown einfügen, der Quasi bei auslesen des Tags startet. Sobald der Tag erneut (bzw immernoch) gelesen wird, soll der Countdown reseted werden, damit die Katze noch Zeit zum fressen hat.
Sollte der Tag dann irgendwann nicht mehr erkannt werden (weil die Katze satt ist) und der Countdown abgelaufen sein, soll die Klappe schließen.
Ich habe allerdings KEINE Ahnung, wie ich einen Countdown in Arduino schreibe, genauso wenig weiß ich, wie ich das auslesen des Tags mit dem Reseten in Verbindung bringe....
Ich habe mir von hier den Sketch eines "einfachen" Countdowns genommen und versucht in meinen Sketch einzufügen. Aber entweder schaffe ich es nicht in fehlerfrei zu kompilieren, oder aber er wird hochgeladen, funktioniert aber nicht.
Es wäre super wenn mir jemand sagen könnte, wie ich da nun einen Countdown einfügen soll. Ich weiß leider nicht mal wo, da ich mittlerweile soviel herumprobiert habe, dass ich mit meinen schleifen total durcheinander komme
Anbei mal mein bisheriger Sketch (OHNE Countdown):
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
Servo myServo; //define servo name
void setup()
{
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
myServo.attach(2); //servo pin
myServo.write(0); //servo start position
Serial.println("Put your card to the reader...");
Serial.println();
}
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
while (content.substring(1) == "36 7A A3 79") //change here the UID of the card/cards that you want to give access
{
Serial.println("Authorized access");
Serial.println();
myServo.write(90);
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
}
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i]));
}
delay(50);
}
delay(2500);
myServo.write(0);
}