RFID-RC522 модуль. Как установить режим ожидания?

Тема в разделе "Arduino & Shields", создана пользователем Suro, 28 июн 2017.

  1. Suro

    Suro Нерд

    Здравствуйте дорогие. Сразу же скажу что у меня есть и в чем проблема.

    Вот у меня Arduino Uno,RFID модуль (MFRC522),2 метки для модуля,светодиод.
    Моя задача:
    1. когда Arduino получает 10 импульсов и на модуле первая метка - отправить на светодиод 11 импульсов.
    2. когда Arduino получает 10 импульсов и на модуле вторая метка - отправить на светодиод 12 импульсов.
    3. когда Arduino получает 10 импульсов и на модуле нет метки - отправить на светодиод 10 импульсов.

    Варианты 1 и 2 у меня работают,но а когда на модуле нет никокой метки,получает импульсы но не отправляет.
    Как обьяснить Arduino,что дорогой,если на модуле нет никокой метки,сколько импульсов получаешь столько и отправь на светодиод ??

    Помогите пожалуйста если можете)

    Код (C++):
    #include <SPI.h>                                              
    #include <MFRC522.h>                                    
    MFRC522 rfid(10, 9); // пины SDA, RST                      
    unsigned long Key, KeyTemp;  // для храниения № ключа      

    const int buttonPin = 6; // номер входа, подключенный к кнопке
    const int ledPin = 7; // номер выхода светодиода

    boolean lastButten = LOW; // предыдущее состояние кнопки
    boolean currentButten = LOW; // текущее состояние кнопки
    int status = 0; // текущий статус

    void setup() {
     
      pinMode(buttonPin, INPUT);
      pinMode(ledPin, OUTPUT);
      Serial.begin(9600); // скорость порта
      SPI.begin();  //  инициализация SPI
      rfid.PCD_Init();}     // инициализация rfid модуля
     
    boolean debvance (boolean last) //убираем дребизг
    {
    boolean current = digitalRead (buttonPin); // считываем данные с кнопки
    if (last != current) // Если текущее состояни еотличететься от предыдущего
    {
    delay (5); // Ждем 5 милисек.
    current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки
    return current;
    }
    }

    void tas(){

    currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
    if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
    {
    status = ++status; // инвертируем Статус
    }
    lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки

    if (status == 10) //если статус 5
    {
    for (int i=0; i<11; i++){
    digitalWrite(ledPin,HIGH);
    delay(500);
    digitalWrite(ledPin,LOW);
    delay(500);
    }
    status = 0;
    }
    else // усди нажали не 5 раз выключаем светодиод
    {
    digitalWrite(ledPin,LOW);
    delay(20); // Ждем
    }
    }

    void qsan(){
    currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
    if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
    {
    status = ++status; // инвертируем Статус
    }
    lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки

    if (status == 10) //если статус 5
    {
    for (int i=0; i<12; i++){
    digitalWrite(ledPin,HIGH);
    delay(500);
    digitalWrite(ledPin,LOW);
    delay(500);
    }
    status = 0;
    }
    else // усди нажали не 5 раз выключаем светодиод
    {
    digitalWrite(ledPin,LOW);
    delay(20); // Ждем
    }
    }


    void loop() {
      if ( ! rfid.PICC_IsNewCardPresent()) {return;}// Поиск нового ключа
      if ( ! rfid.PICC_ReadCardSerial()) {return;}// Выбор ключа
      Key = 0;
    for (byte i = 0; i < rfid.uid.size; i++){// Выдача серийного № ключа
    KeyTemp = rfid.uid.uidByte[i];
        Key = Key * 256 + KeyTemp;}
      Serial.print("Card №: ");
      Serial.println(Key); // Выводим № ключа в консоль


    if( Key == 515280555){
    tas();
    }

    if( Key == 1459297918){
    qsan();
    }



    }
     

     
  2. mcureenab

    mcureenab Гуру

    Код (C++):
    void loop() {
      Key = 0;
      if ( ! rfid.PICC_IsNewCardPresent()) {goto empty;}// Поиск нового ключа
      if ( ! rfid.PICC_ReadCardSerial()) {goto empty;}// Выбор ключа
    for (byte i = 0; i < rfid.uid.size; i++){// Выдача серийного № ключа
    KeyTemp = rfid.uid.uidByte[i];
        Key = Key * 256 + KeyTemp;}
    empty:
      Serial.print("Card №: ");
      Serial.println(Key); // Выводим № ключа в консоль


    if( Key == 515280555){
    tas();
    }

    if( Key == 1459297918){
    qsan();
    }

    if (0 == Key){
    // делаем когда метки нет
    }

    }
     
     
  3. Suro

    Suro Нерд

    Все работает брат спосибо очень ,, но есть еще один маленький нюанс подскажи пожалуйста если сможешь ,, как можно это делать:

    1. когда Arduino получает 10 импульсов - отправить на светодиод 11 импульсов.
    2. а когда Arduino получает 20 импульсов - отправить на светодиод 12 импульсов.
     
  4. Suro

    Suro Нерд


    брат работает некорректно не понимаю в чем проблема ,,

    когда нет метки - должен вызвать функцию in();
    когда первая метка - функцию tas();
    когда вторая метка - функцию qsan();

    бывает , что когда есть один из меток но вызывает функцию in();
     
  5. Suro

    Suro Нерд

    ???????