Wie erfolgt die Programmierung eines Arduino?
Guten Tag, ich habe ein Problem: Es werden Fehlercodes angezeigt, und ich erhalte fortlaufend Fehlermeldungen, obwohl die Bibliothek eingebunden wurde. Ist eine bloße Einbindung ausreichend? Script : #include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h>
// LCD setup
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD I2C-Adresse: 0x27
// Ultraschallsensor Pins
const int trigPin = 9;
const int echoPin = 10;
// Servo setup
Servo doorServo;
const int servoPin = 3;
// RFID setup
#define RST_PIN 5
#define SS_PIN 10
MFRC522 rfid(RST_PIN, SS_PIN); //
// Variablen
long duration;
int distance;
// RFID-Karte UID
byte allowedUID[] = {0xDE, 0xAD, 0xBE, 0xEF}; // Ersetze mit deiner Karte
void setup() {
// LCD starten
lcd.begin(); // ()
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Init...");
// Ultraschallsensor
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Servo
doorServo.attach(servoPin);
doorServo.write(90); //
// RFID
SPI.begin();
rfid.PCD_Init();
// Serial Monitor
Serial.begin(115200); //
lcd.setCursor(0, 1);
lcd.print("Ready!");
delay(2000);
lcd.clear();
}
void loop() {
// Distanz messen
digitalWrite(trigPin, LOW);
delayMicroseconds(5); //
digitalWrite(trigPin, HIGH);
delayMicroseconds(15); //
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 1.5; //
// Distanz auf LCD anzeigen
lcd.setCursor(0, 0);
lcd.print("Distanz: ");
lcd.print(distance);
lcd.print("cm");
// RFID prüfen
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
if (checkRFID(rfid.uid.uidByte, rfid.uid.size)) {
lcd.setCursor(0, 1);
lcd.print("Access Granted!");
openDoor();
} else {
lcd.setCursor(0, 1);
lcd.print("Access Denied!"); //
}
delay(500); //
rfid.PICC_HaltA();
}
}
// RFID-Kartenprüfung
bool checkRFID(byte *uid, byte size) {
for (byte i = 0; i <= size; i++) { //
if (uid[i] != allowedUID[i]) {
return false;
}
}
return true;
}
// Tür öffnen und schließen
void openDoor() {
doorServo.write(180); //
delay(2000); //
doorServo.write(90); //
}
Was ist da der Fehler Vielen Dank!
2 Antworten
Include Statements: Die Bibliotheken scheinen korrekt eingebunden zu sein.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h>
LCD Setup:
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD I2C-Adresse: 0x27
Ultraschallsensor Pins:
const int trigPin = 9;
const int echoPin = 10;
Servo- Setup:
const int trigPin = 9; const int echoPin = 10;
RFID- Setup:
#define RST_PIN 5
#define SS_PIN 10
MFRC522 rfid(RST_PIN, SS_PIN);
Setup- Funktion:
void setup() {
lcd.init(); // Korrektur: init() statt begin()
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Init...");
// Ultraschallsensor Pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Servo initialisieren
doorServo.attach(servoPin);
doorServo.write(90); // Servo initial in der Mittelstellung
// RFID initialisieren
SPI.begin();
rfid.PCD_Init();
// Serial Monitor starten
Serial.begin(115200);
lcd.setCursor(0, 1);
lcd.print("Ready!");
delay(2000);
lcd.clear();
}
Loop- Funktion:
void loop() {
// Distanz messen
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // Korrigiert: Zeit ist nun korrekt
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // Korrigiert: Zeit ist nun korrekt
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2; // Korrektur: Formel zur Distanzberechnung
// Distanz auf dem LCD anzeigen
lcd.setCursor(0, 0);
lcd.print("Distanz: ");
lcd.print(distance);
lcd.print(" cm "); // Korrektur: Leerzeichen vor "cm"
// RFID prüfen
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
if (checkRFID(rfid.uid.uidByte, rfid.uid.size)) {
lcd.setCursor(0, 1);
lcd.print("Access Granted!");
openDoor();
} else {
lcd.setCursor(0, 1);
lcd.print("Access Denied!");
}
delay(2000); // Korrektur: Zeit verlängert, um den Text zu lesen
lcd.clear(); // Text nach Anzeige löschen
rfid.PICC_HaltA();
}
}
RFID- Kartenüberprüfung:
bool checkRFID(byte *uid, byte size) {
for (byte i = 0; i < size; i++) { // Korrektur: Vergleich sollte i < size sein
if (uid[i] != allowedUID[i]) {
return false;
}
}
return true;
}
Türe öffnen & schliessen:
void openDoor() {
doorServo.write(0); // Korrektur: Wert für Servo-Position angepasst
delay(2000); // Zeit, die die Tür offen bleibt
doorServo.write(90); // Tür wieder schließen
}
Kleiner Tipp für die Zukunft, einfach mal die Fehlermeldungen mit in die Fragestellung kopieren, so sparen wir uns das Rätsel raten und können dir gezielt das Problem beschreiben ohne dir, wie meine Vorredner es getan haben, irgendeinen eventuell funktionierenden Code zusammenzubasteln der dir letztendlich aber auch nicht hilft dein ursprüngliches Problem zu verstehen ;)