Wie erfolgt die Programmierung eines Arduino?

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

}


Tomfragt57 
Beitragsersteller
 15.12.2024, 14:31

Danke für die Antwort

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 ;)