* gelöst *Ich schnalle es nicht If else Arduino IDE

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

* gelöst *Ich schnalle es nicht If else Arduino IDE

Beitrag von Jojo »

Servus,
ist zwar nicht direkt openhab, der vielleicht kann mir ja einer den Wald zeigen, den ich vor lauter Bäumen nicht sehe:

ich habe folgenden Code erfolgreich kopiert und der geht auch.
Dann habe ich den Teil unten "Void umschalten()" ergänzt und oben die alten auskommentiert ( 98-100 und 104-106 ).
Der Sketch läuft, aber die LED bleibt aus.Über serial.println lasse ich mir den Zustand des Pin auslesen.
Da kommt "0" die If Schleife startet mit der "0" Anweisung aber der Pin bleibt auf "0". Warum ??????

Code: Alles auswählen

*
 * ----------------------------------------------------------------------
 * Example program showing how to read new NUID from a PICC to serial.
 * ----------------------------------------------------------------------
 * https://circuits4you.com
 * 
 * RC522 Interfacing with NodeMCU
 * 
 * Typical pin layout used:
 * ----------------------------------
 *             MFRC522      Node     
 *             Reader/PCD   MCU      
 * Signal      Pin          Pin      
 * ----------------------------------
 * RST/Reset   RST          D1 (GPIO5)        
 * SPI SS      SDA(SS)      D2 (GPIO4)       
 * SPI MOSI    MOSI         D7 (GPIO13)
 * SPI MISO    MISO         D6 (GPIO12)
 * SPI SCK     SCK          D5 (GPIO14)
 * 3.3V        3.3V         3.3V
 * GND         GND          GND
 */
 
#include <SPI.h>
#include <MFRC522.h>
 
constexpr uint8_t RST_PIN = 5;     // Configurable, see typical pin layout above
constexpr uint8_t SS_PIN = 4;     // Configurable, see typical pin layout above
const int ledPin=D4;
const int pinRelais=D8;

int state = digitalRead(4);

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
 
MFRC522::MIFARE_Key key; 
 
// Init array that will store new NUID 
byte nuidPICC[4];
 
void setup() { 
  Serial.begin(115200);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 
 
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;

  pinMode(ledPin, OUTPUT);
  pinMode(pinRelais, OUTPUT);
  }
 
  Serial.println(F("This code scan the MIFARE Classsic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
 
void loop() {
 
  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
 
  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;
 
  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));
 
  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }
 
  if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));
 
    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    //digitalWrite(ledPin,HIGH);
    //delay(1000);
    //digitalWrite(ledPin,LOW);
    umschalten(); 
  }
  else Serial.println(F("Card read previously."));
    //digitalWrite(ledPin,HIGH);
    //delay(1000);
    //digitalWrite(ledPin,LOW);
    umschalten();
    
  // Halt PICC
  rfid.PICC_HaltA();
 
  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}
 
 
/**
 * Helper routine to dump a byte array as hex values to Serial. 
 */
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}
 
/**
 * Helper routine to dump a byte array as dec values to Serial.
 */
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}
void umschalten ()
{
  state = digitalRead(ledPin);
  Serial.println(state);
  if (state = 0){
    digitalWrite(ledPin, HIGH);
    state = digitalRead (ledPin);
    Serial.println(state);
  }  
  else {
     digitalWrite(ledPin,LOW);
     Serial.println(state);
  }    
}
Prinzipielles Ziel ist es per RFID ein Relais zu schalten, das ging gestern auch schon. Heute nicht mehr ????
Also RFID Kontakt => ein, nächster Kontakt aus dann wieder ein ...

Vielen Dank

Jojo
Zuletzt geändert von Jojo am 21. Mär 2019 19:31, insgesamt 1-mal geändert.
--

Gruß

Jojo

Jojo
Beiträge: 206
Registriert: 5. Mär 2019 21:13
Answers: 2
Wohnort: Ingolstadt

gelöst: Re: Ich schnalle es nicht If else Arduino IDE

Beitrag von Jojo »

läuft !
Ich habe keinenPlan warum, aber mit einem neuen void umschalten()
gehts nun:

Code: Alles auswählen

void umschalten (){
  if (ledState == 1){
    ledState = 0;
    Serial.println(ledState);
  } else {
    ledState = 1;
  }
  digitalWrite(ledPin , ledState );
--

Gruß

Jojo

Antworten