Advertisement
Peet_Peet

NRF24L01 RX servo sleep

Apr 6th, 2020
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // projekt zamek szyfrowy sterowany bezprzewodowo przez NRF24L01
  2. //   sterowanie klawiaturą 4x3
  3. //   komunikacja pomiedzy NANO z klawiatura i NANO z servo
  4. //   versja v0.1 realizuje wyłącznie sterowanie serwem przez klawiaturę na jednym NANO, bez komunikacji RF
  5. //   wersja v0.11 realizuje dodatkowo usypianie diód LED dla oszczędności prądu. stan zamka odczytuje #
  6. //   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
  7. //   wersja v1.0 realizuje wszystkie funkcje wcześniejszych wersji v0.111 oraz komunikację RF
  8. //   wersja v1.0 podzielona jest na plik TX (transmisja - płytka z klawiaturą i przyciskiem) oraz RX (odbiornik - płytka z serwem)
  9.  
  10.  
  11. //---------- biblioteki
  12.  
  13. #include <SPI.h>
  14. #include <nRF24L01.h>
  15. #include <RF24.h>
  16. #include <Servo.h>
  17. #include <avr/sleep.h>
  18.    
  19. RF24 radio(9, 10);                              // piny CE, CSN na płytce Nano  #9 i#10
  20. const byte addresses[6] = "00001";              // kanał komunikacji
  21.  
  22. Servo myservo;
  23. int otwarte = 0;                              //serwo kąt otwarcia
  24. int posrodku = 45;                               // serwo kąt początkowy
  25. int zamkniete = 90;                            //serwo kąt zamknięcia
  26. int stan_oz = zamkniete;                        //serwo stan otwarcia zamknięcia
  27. volatile int count = 0;    
  28. int pCount = 0;        
  29.  
  30. void setup() {
  31.      myservo.attach(3);                         //serwo do pin 3
  32.      myservo.write(zamkniete);                  //ustawienie serwa w początkowej pozycji zamknięte
  33.      delay(2000);
  34.      myservo.write(posrodku);                  //ustawienie serwa w początkowej pozycji środkowej
  35.      radio.begin();                             //uruchomienie radia
  36.        //radio.setAutoAck(1);                    // Ensure autoACK is enabled so rec sends ack packet to let you know it got the transmit packet payload
  37.        //radio.enableAckPayload();         //allows you to include payload on ack packet
  38.        //radio.maskIRQ(1,1,0);               //mask all IRQ triggers except for receive (1 is mask, 0 is no mask)
  39.      radio.openReadingPipe(0, addresses);       //ustawienie jako odbiornik
  40.      radio.setPALevel(RF24_PA_MIN);             //ustawienie mocy nadawania na minimum
  41.       set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  42.       sleep_enable();
  43.      radio.startListening();                    //nasłuchiwanie
  44.      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
  45.      
  46.     }
  47. void loop() {
  48.  
  49.   if(pCount < count) {                                                 //If this is true it means count was interated and another interrupt occurred
  50.        Serial.begin(57600);                                              //start serial to communicate process
  51.        Serial.print("Receive packet number ");
  52.        Serial.println(count);
  53.        Serial.end();                                                        //have to end serial since it uses interrupts
  54.        pCount = count;
  55.    }
  56. }
  57.  
  58.  
  59. void interruptFunction(){
  60.   count++;  
  61.      delay(5);
  62.      if ( radio.available()) {
  63.          radio.read(&stan_oz, sizeof(stan_oz)); //odczytaj i zapisz do zmiennej
  64.          if (stan_oz == otwarte){
  65.             myservo.write(otwarte);
  66.             delay(500);
  67.             myservo.write(posrodku);               //wykonaj na serwo z zadaną wartością zmiennej
  68.             }
  69.          else if (stan_oz == zamkniete){
  70.             myservo.write(zamkniete);
  71.             delay(500);
  72.             myservo.write(posrodku);  
  73.             }
  74.     }
  75.  
  76.   sleep_cpu();
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement