Skocz do zawartości

Problem z odbieraniem modułem nRF24l01 podłączonym z Arduino Uno.


Rifflord

Pomocna odpowiedź

Dzień dobry,

robię projekt otwierania zamka dzięki czytnikowi linii papilarnych zdalnie, do tego używam modułów nrf24l01. Wysyłanie odbywa się zawsze, widzę to dzięki ustawieniu na konsoli napisu gdy to się wykonuje. Natomiast problem jest z odbieraniem danych, gdy uruchomię programy to na odbiorniku na początku działa to sprawnie i dobrze, natomiast jak poczekam kilka minut nic nie zmieniając, to informację przestają być odbierane, a wysyłanie dalej działa poprawnie. Z czym może być to związane?

 

//NADAJNIK

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Fingerprint.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9,10);


SoftwareSerial mySerial(2, 3);

LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);


unsigned long ostatniMillis = 0; // czas ostatniego on/off
const long interval = 3000; // czas akcji, postoju

int wyslana[1]={000}; //przechowuje 
const uint64_t pipe = 0xE6E6E6E6E6E6; //komunikacja miedzy nrf24l01

void setup()
{

  radio.begin();
  radio.openWritingPipe(pipe);
  //radio.setPALevel(RF24_PA_MIN);

  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("   INICJALIZACJA "); //pierwszy wiersz
  lcd.setCursor(0, 1); // 0,1 drugi wiersz
  lcd.print("   PROSZE CZEKAC  ");

  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // set the data rate for the sensor serial port
  finger.begin(57600);

  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
  radio.stopListening();
}

void loop()                     // run over and over again
{

  unsigned long poczMillis = millis(); // czas od początku programu (w loop musi być bo wtedy startuje)

  if (getFingerprintIDez() != -1) {              //funkcja wysyłająca dane do drugiego modułu
        wyslana[0] = 111;
        radio.write(wyslana, 1);
        delay(100);

        Serial.println("Dziala");
  }
  else {
    wyslana[0] = 000;
    radio.write(wyslana, 1);
  }


 if (poczMillis - ostatniMillis >= interval) {
    // przypisujemy ostatniemu czasowi czas obecny millis (zapis czasu) aby mógł dalej odliczać i odejmować
    ostatniMillis = poczMillis;
lcd.clear();
 }
 
  delay(50);   //don't ned to run this at full speed.

  //lcd.clear();
  lcd.setCursor(0, 0); // pierwszy wiersz
  lcd.print("Kontrola dostepu");
  lcd.setCursor(0, 1); // drugi wiersz
  lcd.print("Przyloz palec");

  

}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }

  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);

  return finger.fingerID;
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;

  // found a match!

  
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);


  if (finger.fingerID == 127) //We have found a valid fingerprint with the id 127
  {
    lcd.clear();
    lcd.setCursor(0, 0); // pierwszy wiersz
    lcd.print("Witaj Marcin 127");

    lcd.setCursor(0, 1); // drugi wiersz
    lcd.print("Dokladnosc = ");
    lcd.print(finger.confidence);
 
  }

  return finger.fingerID;
}
//ODBIORNIK

#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>

RF24 radio(9,10);

int odebrana[1] = {000}; //przechowuje dane otrzymane
const uint64_t pipe = 0xE6E6E6E6E6E6; //komunikacja miedzy dwoma nrf24l01

void setup() {

 pinMode(6, OUTPUT);
 digitalWrite(6, HIGH);
 radio.begin();
 radio.openReadingPipe(1, pipe);
 //radio.setPALevel(RF24_PA_MIN);
 radio.startListening();
}

void loop() {
  
 if (radio.available()) {
 
    radio.read(odebrana, 1);
    if (odebrana[0] == 111) {
    digitalWrite(6, LOW);
    delay(5000);
    digitalWrite(6, HIGH);
    Serial.println("Wypelniona akcja");
    }
  }
}

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.