Arduino RFID reader mit Timer?

Ich habe folgendes Problem, ich versuche eine maschine in arduino zu bauen, welche die zeit misst wo keine RFID karte auf dem reader liegt. Nun habe ich aber folgendes Problem, wenn ich die karte auflege wird der Timer schon gesartet, dieser soll aber erst gesartet werden, wenn der user die karte vom reader entpfernt. kann mir da jemand helfen.

#include <SPI.h>
#include <MFRC522.h>


#define SS_PIN D4  // SDA Pin (Slave Select)
#define RST_PIN D3 // Reset Pin


MFRC522 mfrc522(SS_PIN, RST_PIN);  // RFID-Instanz


unsigned long startTime;
bool timerActive = false;
bool cardDetected = false;


void setup() {
  Serial.begin(115200);  // Initialisiere die serielle Kommunikation
  SPI.begin();           // Initialisiere den SPI-Bus
  mfrc522.PCD_Init();   // Initialisiere den RFID-Leser


  Serial.println("RFID-Leser bereit. Halten Sie eine Karte an den Leser.");
}


void loop() {
  bool cardPresent = mfrc522.PICC_IsNewCardPresent();
  
  if (cardPresent) {
    if (mfrc522.PICC_ReadCardSerial()) {
      // Karte wird erkannt
      if (timerActive) {
        // Timer stoppen und Zeit ausgeben
        unsigned long elapsedTime = millis() - startTime;
        Serial.print("Zeit gemessen: ");
        Serial.print(elapsedTime);
        Serial.println(" ms");
        timerActive = false;  // Timer zurücksetzen
      }
      cardDetected = true; // Karte wurde erkannt
      mfrc522.PICC_HaltA();  // Halt das Leseverfahren
      mfrc522.PCD_StopCrypto1();
    }
  } else {
    // Wenn keine Karte mehr vorhanden ist
    if (cardDetected && !timerActive) {
      // Timer starten, wenn der Timer nicht aktiv ist
      startTime = millis();
      timerActive = true;
      Serial.println("Timer gestartet.");
    }
    cardDetected = false; // Karte wurde entfernt
  }
}


Computer, Elektrik, Arduino, Elektrizität, Schaltung, Arduino Uno, ESP8266, Arduino IDE
IR Sensor mit Arduino Nano?

Hi, ich hab mir einen Arduino nano zugelegt um damit ein kleines Auto mit paar Sensoren und Aktoren zu betreiben.

Ich hab mir zur Hinderniserkennung IR Sensoren gekauft (Link unten) diese funktionen mit folgendem Code auch so wie sie sollen mit meinem Arduino Uno R3. Hierfür habe ich die einzelnen Sensoren direkt an 3,3V, GND und dem Arduino pin angeschlossen.

int sensorPin = 2;

int sensorValue = 0;

void setup() {

 Serial.begin(9600);

 pinMode(sensorPin, INPUT);

}

void loop() {

 sensorValue = digitalRead(sensorPin);

 if (sensorValue == LOW) {

  Serial.println("Hindernis erkannt!");

 } else {

  Serial.println("Kein Hindernis.");

 }

 delay(500);

}

Wenn ich nun den Nano abänder anschließe funktioniert der Sensor nicht mehr.

Ich benutze die Arduino IDE und habe als ich den Nano angeschlossen nur den USB Anschluss geändert (muss ich hier villt noch etwas anderes ändern?).

Weiß jemand wo das Problem liegen könnte?

Hinderniserkennung IR Sensoren:

https://www.ebay.de/itm/174942182964?_nkw=4+Kanal+IR+Infrarot+Tracking+Sensor+Modul+-+Hindernisserkennung+f%C3%BCr+Smart+Car&itmmeta=01J79NGC6KKJ439FSTJ9GG99QT&hash=item28bb5dde34:g:5TkAAOSwbLRjD1yt&itmprp=enc%3AAQAJAAABMHoV3kP08IDx%2BKZ9MfhVJKmC%2BPVC644mrcLgtwu5qPGjT1WwbPKL1n9u5px2XO2JuR83QNbwP1BuCqzHOZQzE%2BpO%2FwcR8C3YkZyWkMqbCX9WOTPRueH5JMxyq%2FqCbJqgj%2BMP%2FVdpjXVrh3tzWdZ7UsNYUIrsBNzkkdXK7lpfXju9zNJJJZg7%2FbvYnoASrwTAfg%2FwWH7cGK4pPb%2BVN6wLOajIwAXGuxxM1flqu30XY%2F1584jTCKZ--05Lu471fI%2FX%2FYcnjaIuVY%2Bhi9eLqUAd2L%2FiwKwQwz8HfLosxRffuNm5wUKa0HLwKc%2Bh%2Fk6xeeKJ0DX3b1ar%2BOYa%2BuCYAhZ28efA3oeQqgIaRDpzHeN%2Fy9ehTJDgysBu4kqMO4sOd9QwgWbI8hpnmaKgiqZ%2B8VhbD0k%3D%7Ctkp%3ABFBMuMPBtbpk&edge=1

Elektrotechnik, Mikrocontroller, Arduino, Schaltung, Sensor, Arduino Uno, Arduino IDE
Warum funktioniert mein Arduino Code nicht?

Ich möchte mit einem Sensor einen Sound abspielen und wenn der Sensor ausgeht, soll ein Verabschiedungssound gespielt werden.

Ich benutze Arduino Nano und DfPlayer Mini.

Es wird kein Sound abgespielt.

Danke im Voraus.

Der Code lautet:

#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>

// DFPlayer Mini setup
SoftwareSerial mySoftwareSerial(2, 3); // RX, TX for DFPlayer Mini
DFRobotDFPlayerMini dfPlayer;

const int seatMatPin = 7; // Pin connected to seat occupancy mat
bool wasSeated = false;

void setup()
{
  // Start serial communication for debugging
  Serial.begin(9600); // Start serial communication at 9600 baud rate

  // Initialize serial for DFPlayer Mini
  mySoftwareSerial.begin(9600);

  // Try to start DFPlayer Mini
  if (!dfPlayer.begin(mySoftwareSerial)) {
    Serial.println("DFPlayer Mini konnte nicht gestartet werden."); // Print error message
    while (true); // Stop execution here if DFPlayer Mini fails to start
  }

  Serial.println("DFPlayer Mini bereit."); // Print success message

  // Initialize seat mat pin
  pinMode(seatMatPin, INPUT_PULLUP); // Assuming mat signal is active LOW
}

void loop()
{
  // Read seat mat state
  bool isSeated = digitalRead(seatMatPin) == LOW; // LOW means seat is occupied

  if (isSeated && !wasSeated) {
    // Seat was just occupied
    Serial.println("Sitz wurde besetzt. Begrüßungsmelodie abspielen."); // Print message
    dfPlayer.play(1); // Play greeting sound
    wasSeated = true;
  }
  else if (!isSeated && wasSeated) {
    // Seat was just vacated
    Serial.println("Sitz wurde verlassen. Verabschiedungsmelodie abspielen."); // Print message
    dfPlayer.play(2); // Play farewell sound
    wasSeated = false;
  }

  delay(100); // Small delay for stability
}
Arduino, Code, Programmiersprache, Arduino Nano, Arduino IDE
Fehlermeldung Esp8266 01?

Wenn ich versuche über Arduino das Programm auf die Esp zu spielen bekomme ich folgende Fehlermeldung: A fatal esptool.py error occured: Failed to Connect to ESP8266: Invalid Head of packen (0×72)

Hier ist der Code den ich benutze:

#define BLYNK_TEMPLATE_ID "steht drinne"

#define BLYNK_TEMPLATE_NAME "Bot1"

#include <Arduino.h>

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include "fauxmoESP.h"

#include <Servo.h>

// Dein Blynk-Auth-Code

char auth[] = "code steht drinne";

// Deine WLAN SSID und Passwort

char WIFI_SSID[] = "MagentaWLAN-43FZ";

char WIFI_PASS[] = "Passwort steht drinne";

// Initialisierung des Servo und fauxmoESP

Servo servo;

fauxmoESP fauxmo;

// Blynk-Steuerungslogik für virtuellen Pin V1

BLYNK_WRITE(V1) {

if (param.asInt() == 1) {

servo.write(0);

delay(500);

servo.write(70);

}

}

// Blynk-Steuerungslogik für virtuellen Pin V2

BLYNK_WRITE(V2) {

if (param.asInt() == 2) {

servo.write(70);

} else if (param.asInt() == 3) {

servo.write(0);

}

}

// WLAN-Verbindung einrichten

void wifiSetup() {

WiFi.mode(WIFI_STA);

WiFi.begin(WIFI_SSID, WIFI_PASS);

while (WiFi.status() != WL_CONNECTED) {

delay(100);

}

}

// Setup-Funktion, die einmal beim Start ausgeführt wird

void setup() {

servo.attach(0); // Servo an GPIO0 anschließen

Serial.begin(115200);

Blynk.begin(auth, WIFI_SSID, WIFI_PASS);

wifiSetup();

// fauxmoESP-Einstellungen

fauxmo.addDevice("Bot1");

fauxmo.setPort(80);

fauxmo.enable(true);

fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {

if (state) {

servo.write(0);

} else {

servo.write(70);

}

});

}

// Loop-Funktion, die wiederholt ausgeführt wird

void loop() {

fauxmo.handle();

Blynk.run();

}

Bild zum Beitrag
Elektronik, Arduino, ESP8266
Arduino Uno Wifi Rev.2 verbindet sich nicht mit dem Internet?

Ich versuche meinen Arduino Uno Wifi Rev.2 mit dem WLAN zu verbinden. Der Code (Beispiel Code WiFi Nina ConnectWithWPA) lässt sich kompilieren und hochladen, keine Fehlermeldung. Alle "Werte" (Passwort, SSID) stimmen. Der Arduino hat die neuste Firmware. Wenn das Programm dann aber hochgeladen ist, entsteht eine Endlosschleife, in der der Arduino immer wieder "Attempting to connect to WPA SSID: XXXXXX" ausgibt, er sich aber nicht mit dem WLAN verbindet, da er sonst "You´re connected with the network" ausgeben würde.

Danke schonmal für eure Hilfe

Mein Code:
/*
 This example connects to an unencrypted WiFi network.
 Then it prints the MAC address of the WiFi module,
 the IP address obtained, and other network details.


 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe
 */
#include <SPI.h>
#include <WiFiNINA.h>


#include "arduino_secrets.h" 
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = SECRET_SSID;        // your network SSID (name)
char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as key for WEP)
int status = WL_IDLE_STATUS;     // the WiFi radio's status


void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // check for the WiFi module:
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println("Communication with WiFi module failed!");
    // don't continue
    while (true);
  }


  String fv = WiFi.firmwareVersion();
  if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
    Serial.println("Please upgrade the firmware");
  }


  // attempt to connect to WiFi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass);


    // wait 10 seconds for connection:
    delay(10000);
  }


  // you're connected now, so print out the data:
  Serial.print("You're connected to the network");
  printCurrentNet();
  printWifiData();


}


void loop() {
  // check the network connection once every 10 seconds:
  delay(10000);
  printCurrentNet();
}


void printWifiData() {
  // print your board's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.println(ip);


  // print your MAC address:
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  printMacAddress(mac);
}


void printCurrentNet() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());


  // print the MAC address of the router you're attached to:
  byte bssid[6];
  WiFi.BSSID(bssid);
  Serial.print("BSSID: ");
  printMacAddress(bssid);


  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.println(rssi);


  // print the encryption type:
  byte encryption = WiFi.encryptionType();
  Serial.print("Encryption Type:");
  Serial.println(encryption, HEX);
  Serial.println();
}


void printMacAddress(byte mac[]) {
  for (int i = 5; i >= 0; i--) {
    if (mac[i] < 16) {
      Serial.print("0");
    }
    Serial.print(mac[i], HEX);
    if (i > 0) {
      Serial.print(":");
    }
  }
  Serial.println();
}
WLAN, Arduino, C (Programmiersprache)
Arduino Code funktioniert nicht?

IRremote und JoyStick funktionieren nicht

#include <SPI.h> // Bibliothek für SPI-Kommunikation

#include <Mirf.h> // Bibliothek für nRF24L01

#include <nRF24L01.h> // Treiber für nRF24L01

#include <MirfHardwareSpiDriver.h> // Hardware-SPI-Treiber für Mirf

#include <IRremote.h> // Bibliothek für IR-Kommunikation

// Pin-Definitionen

int receiver = 4; // Pin für den IR-Empfänger

const int SW = 2; // Pin für den Schalter

const int X = A0; // Analog-Pin für X-Achse

const int Y = A1; // Analog-Pin für Y-Achse

// Initialisierung des IR-Empfängers

IRrecv irrecv(receiver);

IRsend results;

uint32_t last_decodedRawData = 0; // Variable zum Speichern des letzten IR-Codes

// Funktion zur Verarbeitung des empfangenen IR-Codes

void translateIR() {

 if (irrecv.decodedIRData.flags) {

  // Wenn ein Wiederholungscode empfangen wird, den letzten empfangenen Code verwenden

  irrecv.decodedIRData.decodedRawData = last_decodedRawData;

 } else {

  // Den empfangenen Code im seriellen Monitor ausgeben

  Serial.print("Empfangener IR-Code: 0x");

  Serial.println(irrecv.decodedIRData.decodedRawData, HEX);

 }

}

// Setup-Funktion, die einmal beim Starten des Programms ausgeführt wird

void setup() {

 Serial.begin(9600); // Startet die serielle Kommunikation mit 9600 Baud

 irrecv.enableIRIn(); // Aktiviert den IR-Empfänger

 pinMode(SW, INPUT); // Setzt den Schalter-Pin als Eingang

 digitalWrite(SW, HIGH); // Aktiviert den Pull-up-Widerstand für den Schalter

 Mirf.cePin = 9; // Setzt den Chip Enable (CE) Pin für den nRF24L01

 Mirf.csnPin = 10; // Setzt den Chip Select Not (CSN) Pin für den nRF24L01

 Mirf.spi = &MirfHardwareSpi; // Setzt den SPI-Treiber für Mirf

 Mirf.init(); // Initialisiert den nRF24L01

 Mirf.setRADDR((byte *)"Sen01"); // Setzt die Adresse des Senders

 Mirf.payload = sizeof(unsigned int); // Setzt die Payload-Größe auf die Größe eines unsigned int

 Mirf.channel = 3; // Setzt den Kommunikationskanal auf 3

 Mirf.config(); // Konfiguriert den nRF24L01

}

unsigned int adata = 0; // Variable zum Speichern der zu sendenden Daten

// Hauptschleife, die kontinuierlich ausgeführt wird

void loop() {

 // Überprüfen, ob ein IR-Signal empfangen wurde

 if (irrecv.decode()) {

  translateIR(); // Verarbeitung des empfangenen IR-Codes

  irrecv.resume(); // Bereit zum Empfang des nächsten IR-Codes

 }

 // Lesen des Schalter- und Analogwerte

 int swValue = digitalRead(SW); // Lesen des Schalterzustands

 int xValue = analogRead(X); // Lesen des X-Achsen-Werts

 int yValue = analogRead(Y); // Lesen des Y-Achsen-Werts

 // Überprüfen der empfangenen IR-Codes und Setzen von adata entsprechend

 if (last_decodedRawData == 0xAD52FF00) {

  adata = 12006;

 } else if (last_decodedRawData == 0xBF40FF00) {

  adata = 12005;

 } else if (last_decodedRawData == 0xBC43FF00) {

  adata = 12004;

 } else if (last_decodedRawData == 0xBB44FF00) {

  adata = 12003;

 }

 // Überprüfen des Schalterwerts und Setzen von adata

 if (swValue == 0) {

  adata = 2103;

 }

 // Überprüfen der Analogwerte und Setzen von adata

 if (yValue < 1024 && yValue > 6 && xValue > 150 && xValue < 800) {

  adata = 213;

 } else if (yValue < 512 && yValue > -1 && xValue > 200 && xValue < 700) {

  adata = 312;

 } else if (xValue < 509 && xValue > -1 && yValue > 200 && yValue < 750) {

  adata = 231;

 } else if (xValue < 1024 && xValue > 515 && yValue > 450 && yValue < 750) {

  adata = 321;

 } else if (xValue < 514 && xValue > 510 && yValue < 511 && yValue > 507) {

  adata = 123;

 }

 // Senden der Daten über Mirf, wenn adata gesetzt wurde

 if (adata != 0) {

  byte data[Mirf.payload]; // Array zum Speichern der zu sendenden Daten

  data[0] = adata & 0xFF; // Niedriges Byte von adata

  data[1] = adata >> 8; // Hohes Byte von adata

  Mirf.setTADDR((byte *)"Rec01"); // Setzt die Adresse des Empfängers

  Mirf.send(data); // Sendet die Daten

  while (Mirf.isSending()) {} // Warten, bis das Senden abgeschlossen ist

  delay(20); // Kurze Pause, um das Senden zu beenden

  adata = 0; // Zurücksetzen von adata nach dem Senden

 }

}

Arduino, Code, Programmiersprache, Arduino Uno, Arduino IDE
Arduino 32 Segment Display Counter programmieren?

Hi,

wie kann ich bei einem Arduino 32 Segment Display einen Counter programmieren der von 9 auf 0 runter geht? Ich habe mir zuerst dieses Standart BSP von `Hello World `: Das ist der Script:

/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
modified 7 Nov 2016
by Arturo Guadalupi
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Motor startet in:");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(8,2);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
}

Danke im voraus :-).

programmieren, Arduino, Arduino Uno
Ersatz für delay(); in einem Arduino Nano gesucht?

ich benötige einen Ersatz für Delay, der die Ausführung von Subroutinen nicht behindert.

Es geht mir dabei nicht um das Blinken einer LED, sondern um die exakte Taktung mit der void loop() wiederholt wird.

hat hier jemand eine schlaue Idee

void loop() {
DateTime now = rtc.now();


// Delay-Ausgleich für den Countdown
if (Timer == 0) {
  Timer = Countdown;
  }
if (timeshift < 4)
  {
  timeshift++;
  }
else
  {
 timeshift = 0; 
 Timer--;
  }
Temperatur = rtc.getTemperature();
Temperatur = (float)Temperatur;


//Sonnenrichtungssensoren auslesen
LDR_up = analogRead(A0) + 20; // Sensorkalibrierung
LDR_west = analogRead(A2) + 45;  // Sensorkalibrierung
LDR_east = analogRead(A3); 
LDR_down = analogRead(A3);
Gesamtwert = LDR_up + LDR_west + LDR_east + LDR_down; // Gesamtmenge Licht

if (Helligkeitsglaettung > 0)
  {
  smooth_lumen();
  }
else
  {
  GM_Lumen = round(Gesamtwert / 10)*10;
  }

//Zeitformatierung Countdown
hours = floor(Timer/3600);
minutes = floor(Timer/60-(hours*60));
seconds = floor(Timer-((hours*3600)+(minutes*60)));

//Potiprozent berechnen
Potentiometerwert = analogRead(A6);
Potentiometerdifferenz = Potentiometerwert - Potentiometerminimum;
Potentiometerproz = 50.0 / Potentiometermax * Potentiometerdifferenz;
Potentiometeranz = 100 - (int)Potentiometerproz;

// Hinweise zur Richtungssteuerung:
 // digitalWrite(RELAISX, HIGH); // LOW = nach Osten HIGH = nach Westen
 // digitalWrite(RELAISZ, LOW); // LOW = nach Oben / HIGH = nach Unten

//  digitalWrite(RELAIS_PowerX, LOW); // LOW = Power On / HIGH = Power off
//  digitalWrite(RELAIS_PowerZ, LOW); //LOW Power On / HIGH = Power off

anemometer(); // Anemometer auswerten

// Wetter- und Lichtabhängiger Algorithmus für die Solarsteuerung
if (now.hour() == 3 && now.minute() == 0 && now.second() == 0) // Zeitpunkt für Korrektur der horizontalen 0-Position
  {
  angel_reset = 1;
  }
if (Temperatur > Mindesttemperatur)
  {
  if (Windmaximum < rpm)
    {
    storm_protection();
    }
  else if(angel >= -30 && angel_reset == 1)
    {
    angle_reset();
    }  
  else if (GM_Lumen < Mindesthelligkeit) 
    {// zu wenig Licht - die Anlage soll in die Neutralstellung fahren
    neutral_position();
    }
  else // Nachfuehrung im Normalbetrieb
    {
    solar_move();
    }
  }
// Anzeige für HD44780 2004 LCD (i2c) Display formatieren
show_display();
delay(200);
}
Arduino, Code, Programmiersprache, Zeit, Delay, Taktung

Meistgelesene Beiträge zum Thema Arduino