Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // projekt zamek szyfrowy sterowany bezprzewodowo przez NRF24L01
- // sterowanie klawiaturą 4x3
- // komunikacja pomiedzy NANO z klawiatura i NANO z servo
- // versja v0.1 realizuje wyłącznie sterowanie serwem przez klawiaturę na jednym NANO, bez komunikacji RF
- // wersja v0.11 realizuje dodatkowo usypianie diód LED dla oszczędności prądu. stan zamka odczytuje #
- // wersja v0.111 realizuje dodatkowo zamykanie i otwieranie z klawiiszy w domu oraz stałe świecenie LED w domu oznaczających otwarcie lub zamknięcie zamka
- // wersja v1.0 realizuje wszystkie funkcje wcześniejszych wersji v0.111 oraz komunikację RF
- // wersja v1.0 podzielona jest na plik TX (transmisja - płytka z klawiaturą i przyciskiem) oraz RX (odbiornik - płytka z serwem)
- //---------- biblioteki
- #include <SPI.h>
- #include <nRF24L01.h>
- #include <RF24.h>
- #include <Servo.h>
- #include <avr/sleep.h>
- RF24 radio(9, 10); // piny CE, CSN na płytce Nano #9 i#10
- const byte addresses[6] = "00001"; // kanał komunikacji
- Servo myservo;
- int otwarte = 0; //serwo kąt otwarcia
- int posrodku = 45; // serwo kąt początkowy
- int zamkniete = 90; //serwo kąt zamknięcia
- int stan_oz = zamkniete; //serwo stan otwarcia zamknięcia
- volatile int count = 0;
- int pCount = 0;
- void setup() {
- myservo.attach(3); //serwo do pin 3
- myservo.write(zamkniete); //ustawienie serwa w początkowej pozycji zamknięte
- delay(2000);
- myservo.write(posrodku); //ustawienie serwa w początkowej pozycji środkowej
- radio.begin(); //uruchomienie radia
- //radio.setAutoAck(1); // Ensure autoACK is enabled so rec sends ack packet to let you know it got the transmit packet payload
- //radio.enableAckPayload(); //allows you to include payload on ack packet
- //radio.maskIRQ(1,1,0); //mask all IRQ triggers except for receive (1 is mask, 0 is no mask)
- radio.openReadingPipe(0, addresses); //ustawienie jako odbiornik
- radio.setPALevel(RF24_PA_MIN); //ustawienie mocy nadawania na minimum
- set_sleep_mode(SLEEP_MODE_PWR_DOWN);
- sleep_enable();
- radio.startListening(); //nasłuchiwanie
- attachInterrupt(0, interruptFunction, FALLING); //Create interrupt: 0 for pin 2 or 1 for pin 3, the name of the interrupt function or ISR, and condition to trigger interrupt
- }
- void loop() {
- if(pCount < count) { //If this is true it means count was interated and another interrupt occurred
- Serial.begin(57600); //start serial to communicate process
- Serial.print("Receive packet number ");
- Serial.println(count);
- Serial.end(); //have to end serial since it uses interrupts
- pCount = count;
- }
- }
- void interruptFunction(){
- count++;
- delay(5);
- if ( radio.available()) {
- radio.read(&stan_oz, sizeof(stan_oz)); //odczytaj i zapisz do zmiennej
- if (stan_oz == otwarte){
- myservo.write(otwarte);
- delay(500);
- myservo.write(posrodku); //wykonaj na serwo z zadaną wartością zmiennej
- }
- else if (stan_oz == zamkniete){
- myservo.write(zamkniete);
- delay(500);
- myservo.write(posrodku);
- }
- }
- sleep_cpu();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement