Hallo zusammen,
ich habe da ein Problem und hoffe ihr könnt mir helfen.
Ich möchte gerne ein Art Türöffnungssytem bauen.
Die Kinder haben ein Display zwischen zwei Kellertüren, wo sie eine Auswahl treffen können.
Entweder beide Türen, linke Tür oder rechte Tür.
Nach der Auswahl, wird die Auswahl im Display angezeigt und muss mit der RFID-Karte bestätigt werden.
Nach der Bestätigung öffnet sich die ausgewählte Tür/Türen.
Hier erstmal der Code, der mich in den Wahnsinn treibt...
#include <Elegoo_GFX.h>
#include <Elegoo_TFTLCD.h>
#include <TouchScreen.h>
#include <SPI.h>
#include <MFRC522.h>
MFRC522 mfrc522(53, 49);
String tagUID = "F7 FC D0 3B";
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif
#define YP A3
#define XM A2
#define YM 9
#define XP 8
#define TS_MINX 120
#define TS_MAXX 900
#define TS_MINY 70
#define TS_MAXY 920
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_RESET A4
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define GRAY 0xDEFB
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
#define PENRADIUS 3
const int led1Pin = 22;
const int led2Pin = 23;
const int led3Pin = 24;
int screen_id = 0;
void fbutton1 ();
void fbutton2 ();
void fbutton3 ();
void setup(void)
{
Serial.begin(9600);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
tft.reset();
tft.begin(0x9341);
tft.setRotation(2);
screen_main();
SPI.begin();
mfrc522.PCD_Init();
}
#define MINPRESSURE 10
#define MAXPRESSURE 1000
void loop()
{
TSPoint p = ts.getPoint();
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
{
p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
if (screen_id == 0)
{
if (p.x > 20 && p.x < 220 && p.y > 140 && p.y < 190) // Beide Türen Button
{
fbutton1();
}
else if (p.x > 130 && p.x < 200 && p.y > 200 && p.y < 310) // Linke Tür Button
{
fbutton2 ();
}
else if (p.x > 20 && p.x < 110 && p.y > 200 && p.y < 310) // Rechte Tür Button
{
fbutton3 ();
}
}
}
}
void fbutton1 () // Funktion zum öffnen beider Türen
{
tft.fillRect(20, 70, 200, 50, WHITE);
tft.setCursor(80, 90);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Beide!");
Serial.println(F("Beide Türen wurde gewählt"));
if (! mfrc522.PICC_IsNewCardPresent())
{
Serial.print("Karte gefunden");
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
Serial.print("Karte gelesen");
return;
}
String tag = "";
for (byte j = 0; j < mfrc522.uid.size; j++)
{
tag.concat(String(mfrc522.uid.uidByte[j] < 0x10 ? " 0" : " "));
tag.concat(String(mfrc522.uid.uidByte[j], HEX));
}
tag.toUpperCase();
if (tag.substring(1) == tagUID)
{
digitalWrite(led1Pin, HIGH);
delay(3500);
digitalWrite(led1Pin, LOW);
tft.fillRect(20, 70, 200, 50, WHITE);
}
else
{
Serial.print("nix da");
tft.fillRect(20, 70, 200, 50, WHITE);
delay(3500);
}
}
void fbutton2 () // Funktion zum öffnen der linken Tür
{
tft.fillRect(20, 70, 200, 50, WHITE); // Wahlfeld
tft.setCursor(55, 90);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Linke Tuer!");
Serial.println(F("Linke Tür wurde gewählt"));
digitalWrite(led2Pin, HIGH);
delay(3500);
digitalWrite(led2Pin, LOW);
tft.fillRect(20, 70, 200, 50, WHITE); // Wahlfeld
}
void fbutton3 () // Funktion zum öffnen der linken Tür
{
tft.fillRect(20, 70, 200, 50, WHITE); // Wahlfeld
tft.setCursor(50, 90);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Rechte Tuer!");
Serial.println(F("Rechte Tür wurde gewählt"));
digitalWrite(led3Pin, HIGH);
delay(3500);
digitalWrite(led3Pin, LOW);
tft.fillRect(20, 70, 200, 50, WHITE); // Wahlfeld
}
// Hauptbildschirm
void screen_main()
{
screen_id = 0;
tft.fillScreen(BLACK);
tft.setCursor(60, 15); // Textanzeigebereich
tft.setTextColor(BLUE);
tft.setTextSize(2);
tft.println("Welche Tuer");
tft.setCursor(20, 35);
tft.setTextColor(BLUE);
tft.setTextSize(2);
tft.println("soll ich oeffnen?");
tft.fillRect(20, 70, 200, 50, WHITE); // Wahlfeld
tft.fillRect(20, 140, 200, 50, YELLOW); // Beide Türen
tft.setCursor(80, 160);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Beide?");
tft.fillRect(20, 200, 90, 110, YELLOW); // Linke Türe
tft.setCursor(37, 230);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Linke");
tft.setCursor(38, 270);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Tuer?");
tft.fillRect(130, 200, 90, 110, YELLOW); // Rechte Türe
tft.setCursor(141, 230);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Rechte");
tft.setCursor(148, 270);
tft.setTextColor(BLACK);
tft.setTextSize(2);
tft.println("Tuer?");
}
Das Programm läuft und macht was es soll...
Außer in der Funktion "void fbutton1 ()".
Dort habe ich mal die RFID Abfrage eingebaut.
Nach der Auswahl "Beide Türen" schreibt er sofort "Karte gefunden" in den seriellen Monitor,
ohne das die Karte nur in der Nähe des Readers war.
Ich denke, dass ist auch das Problem weil er die Karte nicht einlesen konnte
Aber denken, ist nicht wissen, und ich hoffe ihr wisst es besser ![]()
Ich hoffe, ihr könnt mir helfen und das Programm zum laufen zu bringen.
Lieben Gruß ![]()