Hallo , ich bin relativ neu in der Programmierung und brauche hilfe.
ich habe ein arduino auto zusammengebastelt , habe ein Mega, 5 TCRT5000 Linenfolge sensoren, 2 dc motoren über l298n und ein pn532 Nfc modul.
alles einzeln getestet , funktioniert. allerdings ist meine hauptaufgabe jetzt dass er normal fährt bzw der linienfolgt und dabei kontinuierlich nfc tags die unter der linie geklebt wurden einscannt, damit er ein betimmtes befehl ausführt. ich kann leider kein code erzeugen der das Schaft.
meistens kommt da ein code der nur fährt sobald ein nfc tag eingescannt wird unabhäging von den liniensensoren.
könnt ihr mir dabei helfen. zur vereinfachung habe ich nur einen sensor benutzt.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>
// NFC-Modul definieren
#define PN532_IRQ (2)
#define PN532_RESET (3)
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
// Motortreiber-Pins
#define enA 5
#define in1 6
#define in2 7
#define in3 8
#define in4 9
#define enB 10
// Sensor-Pin
#define sensor 32
// Piezo-Lautsprecher-Pin
#define piezo 22
// Variablen für die Zeitsteuerung
unsigned long lastNfcScanTime = 0;
const unsigned long nfcScanInterval = 500; // NFC Scan alle 500 ms
void setup() {
// Pins als Ausgang definieren
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(piezo, OUTPUT);
// Sensor-Pin als Eingang definieren
pinMode(sensor, INPUT);
// NFC-Modul initialisieren
Serial.begin(115200);
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Firmware Version ausgeben
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
// In den normalen Modus konfigurieren
nfc.SAMConfig();
}
void loop() {
// Sensor lesen
int sensorValue = digitalRead(sensor);
// Fahren, wenn der Sensor die Linie erkennt
if (sensorValue == HIGH) {
vorwaerts();
} else {
anhalten();
delay(3000); // 3 Sekunden warten
}
// NFC-Tag erkennen (alle 500 ms einmal prüfen)
if (millis() - lastNfcScanTime >= nfcScanInterval) {
lastNfcScanTime = millis();
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer für die UID
uint8_t uidLength; // UID-Länge
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
Serial.println("NFC-Tag gefunden!");
tone(piezo, 1000, 100); // Ton ausgeben
anhalten();
delay(3000); // 3 Sekunden warten
}
}
}
// Motorfunktionen
void vorwaerts() {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enA, 200); // Geschwindigkeit anpassen
analogWrite(enB, 200); // Geschwindigkeit anpassen
}
void anhalten() {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
analogWrite(enA, 0);
analogWrite(enB, 0);
}