Вопрос по аналоговым входам и rfid

Protez1999
Offline
Зарегистрирован: 08.07.2012

Читаю ардуинкой мини RC 522

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

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);       // объект MFRC522
unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате
byte bCounter, readBit;
unsigned long ticketNumber;
int ledPin7 = 7;

void setup() {
  pinMode(ledPin7, OUTPUT);
        Serial.begin(9600);     
        SPI.begin();            // инициализация SPI
        mfrc522.PCD_Init();     // инициализация MFRC522
        Serial.println("Waiting for card...");
}

void loop() {
        // Поиск новой карточки
        if ( ! mfrc522.PICC_IsNewCardPresent()) {
      digitalWrite(7,0);
                return;
        }

        // Выбор карточки
        if ( ! mfrc522.PICC_ReadCardSerial()) {
                return;
        }

        uidDec = 0;

        // Выдача серийного номера карточки
        Serial.print("Card UID: ");
        for (byte i = 0; i < mfrc522.uid.size; i++) {
          
                uidDecTemp=mfrc522.uid.uidByte[i];
                uidDec=uidDec*256+uidDecTemp;
        } 
        
        int id=uidDec-3732680251;
        if(id!=0) { int var=0;
        while (var<4){
         
          var++;
          delay(1000);
          digitalWrite(7,1);
      Serial.println("Odobreno ");}}
      else{Serial.println("STOP ");
   digitalWrite (7,0);}
        Serial.println(id);
        Serial.println(uidDec);
        Serial.println();
       delay(500);
}

В принципе по нему нет вопросов .

Дальше 4 ардуинки мини подключены к uno по питанию и на аналоговые разьемы 14-17;

так вот в чем проблема. Аналог читает тока 1 пин а остальные нет. Если читать как цифру то все нормально 1 ил 0 в зависимости от состояни. Но проблема в том что rfid при повторном чтении перезагружается и при читке цифры высока пероятность ошибки а при аналого проще отфильтровать результат.В чем может быть проблема что не читает больше 1 аналогового порта.

int analogPin14 = 14;
int analogPin15 = 15;
int analogPin16 = 16;
int analogPin17 = 17; //  читаем состояние диода А0
int rele=11;
 

void setup()
{
  Serial.begin(9600);
  pinMode(analogPin7,INPUT);
  pinMode(analogPin8,INPUT);
  pinMode(analogPin9,INPUT);
  pinMode(analogPin10,INPUT);
  pinMode(rele,OUTPUT);
}
 
void loop()
{    
  digitalWrite(11,0);
    val5=val1+val6;
   
  val1 = digitalRead(analogPin7);  // считываем значение с порта, подключенному к диоду аппы
  val2 = digitalRead(analogPin10);
   val3 = digitalRead(analogPin9);
   val4 = digitalRead(analogPin10);
  
   Serial.print(val1); Serial.println(" v1");
    Serial.print(val2); Serial.println(" v2");
 Serial.print(val3); Serial.println(" v3");
  Serial.print(val4); Serial.println(" v4");
  
   
 delay(500);
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Откуда взято число 3732680251?

Я вижу несовпадение имён переменных в строках 1-4 и 11-14. Если это аналоговые, то так и пиши: А0, А1.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Tomasina пишет:
Откуда взято число 3732680251?

Я вижу несовпадение имён переменных в строках 1-4 и 11-14. Если это аналоговые, то так и пиши: А0, А1.


Да ты вообще ниче не понимаешь. Если переменная названа analogPin все блин. Сразу любой пин становиться АЦП. Гыыы

Protez1999
Offline
Зарегистрирован: 08.07.2012

Когда сюда вкидывал код не посмотрел просто это урезаный. Часа 3 мудохался и так и сяк пробовал аналог тока 1 канал работает. ЦИфра 4 работают. Просто уже и пины менял че тока не делал. 

int analogPin7 = 14;
int analogPin8 = 15;
int analogPin9 = 16;
int analogPin10 = 17; //  читаем состояние диода А0
int rele=11;
 

void setup()
{
  Serial.begin(9600);
  pinMode(analogPin7,INPUT);
  pinMode(analogPin8,INPUT);
  pinMode(analogPin9,INPUT);
  pinMode(analogPin10,INPUT);
  pinMode(rele,OUTPUT);
}
 
void loop()
{    
  digitalWrite(11,0);
    val5=val1+val6;
   
  val1 = digitalRead(analogPin7);  // считываем значение с порта, подключенному к диоду аппы
  val2 = digitalRead(analogPin10);
   val3 = digitalRead(analogPin9);
   val4 = digitalRead(analogPin10);
  
   Serial.print(val1); Serial.println(" v1");
    Serial.print(val2); Serial.println(" v2");
 Serial.print(val3); Serial.println(" v3");
  Serial.print(val4); Serial.println(" v4");
  
   
 delay(500);
}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

попробую с А0-А4  мож и в правду заработает.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Тогда поясни это:

Но проблема в том что rfid при повторном чтении перезагружается и при читке цифры высока пероятность ошибки а при аналого проще отфильтровать результат.

Чем проще? Почему не использовать цифровой вход, если изначально Mini у тебя выдает логический сигнал (0 В или 5 В)?

GND  всех плат объединены?

#define PIN_RFID1 A0 //  читаем состояние диода А0
#define PIN_RFID2 A1
#define PIN_RFID3 A2
#define PIN_RFID4 A3
#define PIN_RELAY 11 

void setup()
{
  Serial.begin(9600);
  pinMode(PIN_RELAY,OUTPUT);
}
 
void loop()
{    
  digitalWrite(PIN_RFID4,LOW);
  val5=val1+val6;
   
  val1 = digitalRead(PIN_RFID1);  // считываем значение с порта, подключенному к диоду аппы
  val2 = digitalRead(PIN_RFID2);
  val3 = digitalRead(PIN_RFID3);
  val4 = digitalRead(PIN_RFID4);
  
  Serial.print(val1); Serial.println(" v1");
  Serial.print(val2); Serial.println(" v2");
  Serial.print(val3); Serial.println(" v3");
  Serial.print(val4); Serial.println(" v4");  
  
  delay(500);
}

 

Protez1999
Offline
Зарегистрирован: 08.07.2012

аналог дает значения  750-750-750-750-0-0(нули перегнужается рфид) мы считает среднее  3000/6=500 все значит врублено

цифра 1-1-1-1-0-0 со средней небольшая проблема из-за запятой. в этом и проще.

Питание на мини идет с пинов основной платы

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Protez1999 пишет:

цифра 1-1-1-1-0-0 со средней небольшая проблема из-за запятой. в этом и проще.


Умножаешь результат средней на 100 и проблема отпадает.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Protez1999 пишет:

цифра 1-1-1-1-0-0 со средней небольшая проблема из-за запятой. в этом и проще.


Умножаешь результат средней на 100 и проблема отпадает.