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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.