Рфид моргает лампочка

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

День добрый. Подскажите дельным советом. Уже намучался знаний явно нехватает. Проблема в следующем - Подношу Рфид метку к считывателю лампочка должна включаться, убрал метку лампочка должна отключаться. Вот только лампочка у меня мерцает вместо стабильной работы((

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
 SPI.begin();  // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522 card
 Serial.println("Ready to read a PICC Card ");
for(int def=5;def<8;def++){
 pinMode(def,OUTPUT); 
}

}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
     State=true; 
  }
  else{
     State=false; 
     i=5;
  }
  }
}

void loop() {
  // put your main code here, to run repeatedly: 
   if ( ! mfrc522.PICC_IsNewCardPresent()) {
  return;
 }

 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
 }
  
  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
 for (byte i = 0; i < mfrc522.uid.size; i++) {
     card_ID[i]=mfrc522.uid.uidByte[i];
     Serial.print(" - ");
     Serial.print( card_ID[i],HEX);
     Serial.print(" - ");
   
}

cmp_id();
if(State==true){ Serial.println("Accepted, Valid card"); digitalWrite(GreenLed,HIGH);digitalWrite(RedLed,LOW);  }
if(State==true){ Serial.println("OFF, Valid card"); digitalWrite(GreenLed,LOW);digitalWrite(RedLed,LOW);    }
if(State==false){Serial.println("denied! unValid card ! ");digitalWrite(RedLed,HIGH);digitalWrite(GreenLed,LOW);   }



}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Какая лампочка?

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

Светодиод

sadman41
Offline
Зарегистрирован: 19.10.2016

Бл... по коду их две - которая мерцает?

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

Зеленая мерцает. Когда подношу метку.

Догадываюсь мерцание происходит когда заканчивается выполнение кода и снова по новой выполняется. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Условия в строка #58 и #59 внимательно сравните.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Там ещё и бузер орать непрерывно должен, который в 48 строке включается и нигде не выключается.

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

Может подскажите что нужно дописать? Сидел думал неполучается(

sadman41
Offline
Зарегистрирован: 19.10.2016

Чтобы подсказать - нужно знать идею. Идея в вашей голове, а не в нашей.

b707
Offline
Зарегистрирован: 26.05.2017

Advan пишет:

Вот только лампочка у меня мерцает вместо стабильной работы((

А как ей не мерцать, если при поднесенной карте в строке 58 вы ее включаете и тут же, в строке 59 - выключаете?

Выключайте лампочку только тогда, когда убрали карту со считывателя.

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

b707 пишет:

А как ей не мерцать, если при поднесенной карте в строке 58 вы ее включаете и тут же, в строке 59 - выключаете?

Выключайте лампочку только тогда, когда убрали карту со считывателя.

59 получается удаляем. Добавить что?

 

 

 

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

Заплачу. 250 руб 

sadman41
Offline
Зарегистрирован: 19.10.2016

Заплатите за телепатический сеанс? Ответьте для себя на простые вопросы - что должно происходить со светодиодом и при каких событиях.

b707
Offline
Зарегистрирован: 26.05.2017

Advan пишет:

b707 пишет:

А как ей не мерцать, если при поднесенной карте в строке 58 вы ее включаете и тут же, в строке 59 - выключаете?

Выключайте лампочку только тогда, когда убрали карту со считывателя.

59 получается удаляем. Добавить что?

Пилять! :) Вы совсем читать не умеете или как?

Вы же даже мой ответ процитировали - так прочитайте его ВНИМАТЕЛЬНО! в первой строчке - что удаляем, во второй - что добавляем.

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

sadman41 пишет:

Заплатите за телепатический сеанс? Ответьте для себя на простые вопросы - что должно происходить со светодиодом и при каких событиях.

В описании темы все написано.

Вот такая задумка:

1. Приподносим метку - светодиод зеленый загорается (без мерцаний)

2. Убираем метку - светодиод зеленый отключается

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

b707 пишет:

Advan пишет:

b707 пишет:

А как ей не мерцать, если при поднесенной карте в строке 58 вы ее включаете и тут же, в строке 59 - выключаете?

Выключайте лампочку только тогда, когда убрали карту со считывателя.

59 получается удаляем. Добавить что?

Пилять! :) Вы совсем читать не умеете или как?

Вы же даже мой ответ процитировали - так прочитайте его ВНИМАТЕЛЬНО! в первой строчке - что удаляем, во второй - что добавляем.

Я лишь интересущийся.. 

"Выключайте лампочку только тогда, когда убрали карту со считывателя" - Выразить в коде пока-что проблема

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

убери ты строку 59, а между 38 и 39 вставь

digitalWrite(GreenLed,LOW);

kalapanga
Offline
Зарегистрирован: 23.10.2016

Advan, здесь на форуме специальный раздел есть, где деньги предлагать нужно Ищу исполнителя называется. Писали бы лучше сразу туда, вдруг кто позарится.

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

DetSimen пишет:

убери ты строку 59, а между 38 и 39 вставь

digitalWrite(GreenLed,LOW);

Проделал. Мерцает также(

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

kalapanga пишет:

Advan, здесь на форуме специальный раздел есть, где деньги предлагать нужно Ищу исполнителя называется. Писали бы лучше сразу туда, вдруг кто позарится.

Подумал может так знатоки помогут но готов заплатить

b707
Offline
Зарегистрирован: 26.05.2017

Advan пишет:

Подумал может так знатоки помогут но готов заплатить

так вам уже помогли "за так" - но не в коня корм, вы ж ни черта не понимаете.

Либо сначала книжки почитайте и прриходите, когда код начнете понимать, либо в платный раздел.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А, ну да, так и должно быть. 

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

b707 пишет:

Advan пишет:

Подумал может так знатоки помогут но готов заплатить

так вам уже помогли "за так" - но не в коня корм, вы ж ни черта не понимаете.

Либо сначала книжки почитайте и прриходите, когда код начнете понимать, либо в платный раздел.

Тогда логично было-бы назвать раздел Программирование для специалистов. Новички бы понимали что ждут их только в платном разделе.

Всем пытающимся помочь очень благодарен.

 

b707
Offline
Зарегистрирован: 26.05.2017

Advan пишет:

Тогда логично было-бы назвать раздел Программирование для специалистов.

 

Местный раздел "программирование" - для программистов. Форум "для полных чайников" где-то в другом месте :)

sadman41
Offline
Зарегистрирован: 19.10.2016

Вообще, мне кажется, что вариант DetSimen верный. Но ридер я только вечером смогу в руки взять.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={
  0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
  SPI.begin();  // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522 card
  Serial.println("Ready to read a PICC Card ");
  for(int def=5;def<8;def++){
    pinMode(def,OUTPUT); 
  }
}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
      State=true; 
    }
    else{
      State=false; 
      i=5;
    }
  }
}

void loop() {
  // put your main code here, to run repeatedly: 
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    card_ID[i]=mfrc522.uid.uidByte[i];
    Serial.print(" - ");
    Serial.print( card_ID[i],HEX);
    Serial.print(" - ");

  }

  cmp_id();
  if(State==true){
    Serial.println("Accepted, Valid card");
    digitalWrite(GreenLed,HIGH);
    digitalWrite(RedLed,LOW);  
  }
  if(State==false){
    Serial.println("denied! unValid card ! ");
    digitalWrite(RedLed,HIGH);
    digitalWrite(GreenLed,LOW);   
  }
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну немного не по теме #27  но там уже похожее решение.

ПС: Фишка в решении по теме что светодиод должен включаться по карточке, а выключаться самостоятельно по времени, если сигнала с карточки не пришло.

gfx125
Offline
Зарегистрирован: 27.05.2017

А если так?

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
 SPI.begin();  // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522 card
 Serial.println("Ready to read a PICC Card ");
for(int def=5;def<8;def++){
 pinMode(def,OUTPUT); 
}

}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
     State=true; 
  }
  else{
     State=false; 
     i=5;
  }
  }
}

void loop() {
  // put your main code here, to run repeatedly: 
   if ( ! mfrc522.PICC_IsNewCardPresent()) {
    digitalWrite(GreenLed,LOW);digitalWrite(RedLed,LOW);
    
  return;
 }

else if(State==true) {
    digitalWrite(GreenLed,HIGH);
        }
    else {
   digitalWrite(RedLed,HIGH);}
   

 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
 }
  
  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
 for (byte i = 0; i < mfrc522.uid.size; i++) {
     card_ID[i]=mfrc522.uid.uidByte[i];
     Serial.print(" - ");
     Serial.print( card_ID[i],HEX);
     Serial.print(" - ");
   
}

cmp_id();
if(State==true){ Serial.println("Accepted, Valid card"); digitalWrite(RedLed,LOW);  }

if(State==false){Serial.println("denied! unValid card ! ");}

}

 

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

vosara пишет:

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={
  0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
  SPI.begin();  // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522 card
  Serial.println("Ready to read a PICC Card ");
  for(int def=5;def<8;def++){
    pinMode(def,OUTPUT); 
  }
}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
      State=true; 
    }
    else{
      State=false; 
      i=5;
    }
  }
}

void loop() {
  // put your main code here, to run repeatedly: 
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    card_ID[i]=mfrc522.uid.uidByte[i];
    Serial.print(" - ");
    Serial.print( card_ID[i],HEX);
    Serial.print(" - ");

  }

  cmp_id();
  if(State==true){
    Serial.println("Accepted, Valid card");
    digitalWrite(GreenLed,HIGH);
    digitalWrite(RedLed,LOW);  
  }
  if(State==false){
    Serial.println("denied! unValid card ! ");
    digitalWrite(RedLed,HIGH);
    digitalWrite(GreenLed,LOW);   
  }
}

 

В Вашем варианте приподнеся метку загорается светодиод без мерцания, вот только убирая метку он продолжает бесконечно светиться. А нужно чтобы он затухал.

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

gfx125 пишет:

А если так?

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
 SPI.begin();  // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522 card
 Serial.println("Ready to read a PICC Card ");
for(int def=5;def<8;def++){
 pinMode(def,OUTPUT); 
}

}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
     State=true; 
  }
  else{
     State=false; 
     i=5;
  }
  }
}

void loop() {
  // put your main code here, to run repeatedly: 
   if ( ! mfrc522.PICC_IsNewCardPresent()) {
    digitalWrite(GreenLed,LOW);digitalWrite(RedLed,LOW);
    
  return;
 }

else if(State==true) {
    digitalWrite(GreenLed,HIGH);
        }
    else {
   digitalWrite(RedLed,HIGH);}
   

 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
 }
  
  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
 for (byte i = 0; i < mfrc522.uid.size; i++) {
     card_ID[i]=mfrc522.uid.uidByte[i];
     Serial.print(" - ");
     Serial.print( card_ID[i],HEX);
     Serial.print(" - ");
   
}

cmp_id();
if(State==true){ Serial.println("Accepted, Valid card"); digitalWrite(RedLed,LOW);  }

if(State==false){Serial.println("denied! unValid card ! ");}

}

 

Я примерно это и хотел. Куда оплачивать труд?

Ньюанс в этом коде приподнеся левую метку зеленый светодиод 1 раз моргает, в идеале было-бы убрать и это моргание.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Advan пишет:

Ньюанс в этом коде приподнеся левую метку зеленый светодиод 1 раз моргает, в идеале было-бы убрать и это моргание.

qwone пишет:
ПС: Фишка в решении по теме что светодиод должен включаться по карточке, а выключаться самостоятельно по времени, если сигнала с карточки не пришло.
Моргание возникает потому что loop чаще чем опрос карты, хоть delay loop вешай.

gfx125
Offline
Зарегистрирован: 27.05.2017

Advan пишет:

Куда оплачивать труд?

Ну если действительно есть такое желание - пишите на почту wex7008b@gmail.com, обсудим.

Цитата:

Ньюанс в этом коде приподнеся левую метку зеленый светодиод 1 раз моргает, в идеале было-бы убрать и это моргание.

Хм... действительно есть такое если сначала поднести правильную карту, я тестил на двухцветном светике и как-то сразу не заметил этого.

 

 

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

qwone пишет:

Advan пишет:

Ньюанс в этом коде приподнеся левую метку зеленый светодиод 1 раз моргает, в идеале было-бы убрать и это моргание.

qwone пишет:
ПС: Фишка в решении по теме что светодиод должен включаться по карточке, а выключаться самостоятельно по времени, если сигнала с карточки не пришло.
Моргание возникает потому что loop чаще чем опрос карты, хоть delay loop вешай.

Я не понимаю 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
 SPI.begin();  // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522 card
 Serial.println("Ready to read a PICC Card ");
for(int def=5;def<8;def++){
 pinMode(def,OUTPUT); 
}

}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
     State=true; 
  }
  else{
     State=false; 
     i=5;
  }
  }
}

void loop() {
  delay(500);//<- как вариант сюда
  // put your main code here, to run repeatedly: 
   if ( ! mfrc522.PICC_IsNewCardPresent()) {
    digitalWrite(GreenLed,LOW);digitalWrite(RedLed,LOW);
    
  return;
 }

else if(State==true) {
    digitalWrite(GreenLed,HIGH);
        }
    else {
   digitalWrite(RedLed,HIGH);}
   

 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
 }
  
  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
 for (byte i = 0; i < mfrc522.uid.size; i++) {
     card_ID[i]=mfrc522.uid.uidByte[i];
     Serial.print(" - ");
     Serial.print( card_ID[i],HEX);
     Serial.print(" - ");
   
}

cmp_id();
if(State==true){ Serial.println("Accepted, Valid card"); digitalWrite(RedLed,LOW);  }

if(State==false){Serial.println("denied! unValid card ! ");}

}

 

Advan
Advan аватар
Offline
Зарегистрирован: 20.09.2018

qwone пишет:

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 8
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
byte card_ID[4];
byte First_card_ID[4]={0xED,0xAA,0xD7,0x73};
boolean State=false;
int RedLed=6;
int GreenLed=5;
int Buzzer=7;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // Initialize serial communications with the PC
 SPI.begin();  // Init SPI bus
 mfrc522.PCD_Init(); // Init MFRC522 card
 Serial.println("Ready to read a PICC Card ");
for(int def=5;def<8;def++){
 pinMode(def,OUTPUT); 
}

}

void cmp_id(){
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    if(card_ID[i]==First_card_ID[i]){
     State=true; 
  }
  else{
     State=false; 
     i=5;
  }
  }
}

void loop() {
  delay(500);//<- как вариант сюда
  // put your main code here, to run repeatedly: 
   if ( ! mfrc522.PICC_IsNewCardPresent()) {
    digitalWrite(GreenLed,LOW);digitalWrite(RedLed,LOW);
    
  return;
 }

else if(State==true) {
    digitalWrite(GreenLed,HIGH);
        }
    else {
   digitalWrite(RedLed,HIGH);}
   

 // Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
  return;
 }
  
  Serial.print("Card UID:");
  digitalWrite(Buzzer,HIGH);
 for (byte i = 0; i < mfrc522.uid.size; i++) {
     card_ID[i]=mfrc522.uid.uidByte[i];
     Serial.print(" - ");
     Serial.print( card_ID[i],HEX);
     Serial.print(" - ");
   
}

cmp_id();
if(State==true){ Serial.println("Accepted, Valid card"); digitalWrite(RedLed,LOW);  }

if(State==false){Serial.println("denied! unValid card ! ");}

}

 

Приподнеся метку светодиод начинает моргать. Приподнеся левую метку светодиод мигает один раз.