26-09-2018, 09:12
Witam.
Mam problem w uruchomieniu odbiornika nRf24L01 i RC522 na jednym Arduino Nano problem polega na tym gdy działa np. RC522 to nie działa nRF24L01 i na odwrót walczę już od jakiegoś czasu zatem zwracam się do Kolegów o pomoc.
Mam problem w uruchomieniu odbiornika nRf24L01 i RC522 na jednym Arduino Nano problem polega na tym gdy działa np. RC522 to nie działa nRF24L01 i na odwrót walczę już od jakiegoś czasu zatem zwracam się do Kolegów o pomoc.
Kod:
/*/Arduino NANO
Sterowanie zamkiem poprzez RFID RC522 Wiele TAGów breloczeków niebieskich
oraz radiowo poprzez nRF24L01 lub i RF RXB12
Januszek
// Typowy układ pinów:
*/
/* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro Pro Mini
* Signal Pin Pin Pin Pin Pin Pin Pin
* ------------------------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
Buzzer pasywny SD160701 D7
RXB12 zielony 1 3V3 3V3 5V
2 GND GND GND
3 D3 PIN2 2
Wyjscie na LED lub na Przekaznik D4 PIN4
//======================================================================================
*/
#include <RCSwitch.h> //Biblioteka dla RF RXB12
#include <SPI.h>
#include <MFRC522.h>
#include "nRF24L01.h" // Biblioteka dla nRF24L01
#include "RF24.h" // Biblioteka dla nRF24L01
#define przekaznik 8
#define ilosc_brelokow 6
const byte UID[ilosc_brelokow][6] = {
{0x24, 0xF8, 0xDD, 0x89}, // kod breloczka bez naklejki
{0xD6, 0xB0, 0xFA, 0x29}, // kod białej karty
{0x69, 0x04, 0xA6, 0xB9}, //1
{0x40, 0xD0, 0xA3, 0xB9}, //2
{0x63, 0xE7, 0xA5, 0xB9}, //3
{0x64, 0xC1, 0xA3, 0xB9} //4
};
const byte PRZEKAZNIKI[ilosc_brelokow] = {
8,
0,
0,
0
};
byte status=1;
int stan = 0;
int poprzedni_stan = 0;
//111111111111111111--nRF24l01--111111111111111111111
//Przechowuje dane przychodzące
int otrzymane[1]; //otrzymane
//Inicjuje planszę na piny Arduino 7 (CE) i 8 (CS)
RF24 radio(7,8);
//Ustawia adres do komunikacji między modułami
const uint64_t adres = 0xE14BC8F482LL;
//111111111111111111--nRF24l01--111111111111111111111
//Ustawia piny dla przekaźnika
//int Pk_zamka = 4; //D4 wsplne dla nrf RC522 RF - wyjście zamka
MFRC522 rfid(10, 9); // PINy podłączenia karty RFID do Nano
MFRC522::MIFARE_Key key;
//=======================================================
/*
//------------------------------RF RXB12 początek-----------------------------------------------------
RCSwitch mySwitch = RCSwitch();
//------------------------------RF RXB12 koniec------------------------------------------------------
*/
//============================================================
void setup() {
int i;
SPI.begin(); // Uruchom magistralę SPI
rfid.PCD_Init(); // Uruchom MFRC522
pinMode(4, OUTPUT); // wyjscie zamka i
// Ustawienie portu Jako wyjście tu jest port #D4 @zmiana 4 na Pk_zamka
//pinMode(LED_BUILTIN, OUTPUT);
pinMode(3, OUTPUT); //Buzzer port D3 pinMode(3, OUTPUT)
//111111111111111111--nRF24l01--111111111111111111111
//Określa piny dla przekaźnika i Buzzera jako wyjściowe
pinMode(4, OUTPUT); // Port D4 wyjście zamka ---zmiana Pk_zamka na 4
pinMode(3, OUTPUT); // Port D3 Buzzer na pinMode(3, OUTPUT)
//Inicjuje serial monitor // serial monitor niekonieczny
// Serial.begin(57600);
//Inicjuje komunikację
radio.begin();
// Wejdź do trybu odbioru
radio.openReadingPipe(i,adres);
radio.startListening();
//}
//111111111111111111--nRF24l01--111111111111111111111
/*
//------------------------------RF RXB12 początek-----------------------------------------------------
{
mySwitch.enableReceive(0); // Odbiornik na przerwaniu 1 => to jest pin #D2 mySwitch.enableReceive(0) /// Leonardo pin int 1 mySwitch.enableReceive(1)//Dla PRO MINI PIN2 (0),,PIN3(1)
}
//------------------------------RF RXB12 koniec-------------------
*/
for(i= 0; i < ilosc_brelokow; i++)
{
pinMode(PRZEKAZNIKI[i], OUTPUT);
digitalWrite(PRZEKAZNIKI[i], HIGH);
}
}
void wlacz_przekaznik(int ktory)
{
digitalWrite(PRZEKAZNIKI[ktory], LOW);
}
void wylacz_przekaznik(int ktory)
{
digitalWrite(PRZEKAZNIKI[ktory], HIGH);
}
// *
// * // Funkcja porównuje bieżący odczyt z czujnika z globalną tabelą z UID
// * // Jeśli którykolwiek z wpisów z tabeli jest zgodny, zwraca jego indeks
// * // Jeśli żaden z wpisów nie pasuje, zwraca -1
int checkUid(void){
int i;
for(i= 0; i < ilosc_brelokow; i++){
if( rfid.uid.uidByte[0] == UID[i][0] && rfid.uid.uidByte[1] == UID[i][1] && rfid.uid.uidByte[2] == UID[i][2] && rfid.uid.uidByte[3] == UID[i][3] )
return i;
}
return -1;
}
//oooooooooooooooooooooooooooooooo- VOID LOOP -ooooooooooooooooooooooooooooooo
void loop() {
//1111111111--void loop--11111111--nRF24l01--1111--jak włczona ta czesc to nie działa RC522 --11111111111111111
{
//Sprawdź sygnał radiowy
if (radio.available())
{
bool done = false;
while (!done)
{
done = radio.read(otrzymane, 1);
/// Serial.print("Dane otrzymane : ");
/// Serial.println(otrzymane[0]);
//Jeśli otrzymałeś numer 1, LED 1 czerwona // na porcie D4 wyjście zamka
if (otrzymane[0] == 1)
{
// delay(100);
digitalWrite(4, HIGH); // na porcie D4 wyjście zamka
tone(3, 4000); // Wygeneruj sygnał o częstotliwości 1000Hz na pinie D3 (to tone(3, 3000);
delay(100);
noTone(3); // Wyłącz generowanie sygnału
delay(5000);
digitalWrite(4, LOW); // na porcie D4 wyjście zamka
tone(3, 3000); // Wygeneruj sygnał o częstotliwości 1000Hz na pinie D3 (to tone(3, 3000);
delay(100);
noTone(3); // Wyłącz generowanie sygnału
delay(100);
tone(3, 500); // Wygeneruj sygnał o częstotliwości 1000Hz na pinie D3 (to tone(3, 3000);
delay(100);
noTone(3); // Wyłącz generowanie sygnału
delay(100);
}
//111111111111111111--nRF24l01--111111111111111111111
int karta;
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
{
karta= checkUid();
if ( karta >= 0)
{
if (digitalRead(PRZEKAZNIKI[karta]) == HIGH)
{
poprzedni_stan = 1;
stan = 1;
tone(3, 1000); // Wygeneruj sygnał o częstotliwości 1000Hz na pinie D3
delay(100);
noTone(3); // Wyłącz generowanie sygnału
digitalWrite(4, HIGH); //@ po odebtaniu sygnał z nadajnika port zostaje ustawiony za załącz stan wysoki
delay(5000); // czekaj 5000 ms czyli 5 sekund po tym czasie
digitalWrite(4, LOW); //@ ustaw port 4 na wyłącz stan niski
tone(3, 1000); // Wygeneruj sygnał o częstotliwości 1000Hz na pinie D3
delay(100);
noTone(3); // Wyłącz generowanie sygnału
}
else
{
digitalWrite(PRZEKAZNIKI[karta], LOW);
poprzedni_stan = 0;
stan = 0;
}
} else
{
tone(3, 1000); // Wygeneruj sygnał o częstotliwości 1000Hz na pinie D3
delay(500);
noTone(3); // Wyłącz generowanie sygnału
// po odebtaniu Błędnego kodu TAG niewłasciwy sygnał z karty RFID RC522 port zostaje ustawiony za załącz stan wysoki Zalacza Buzzer
// czekaj 3000 ms czyli 3 sekund po tym czasie
// ustaw port 3 na wyłącz stan niski wylacza Buzzer
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
} // nrf
} // nrf
} // nrf
// }