Advertisement
demoss

ПРИЕМНИК И ПЕРЕДАТЧИК

Jul 19th, 2021 (edited)
1,212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.69 KB | None | 0 0
  1. /*   Данный скетч делает следующее: передатчик (TX) отправляет массив
  2.      данных, который генерируется согласно показаниям с кнопки.
  3. Приёмник (RX) получает массив
  4. */
  5. #define STRIP_PIN 5     // пин ленты
  6. #define NUMLEDS 20      // кол-во светодиодов
  7. #define COLOR_DEBTH 3
  8.  
  9.  
  10.  // подключаем библу
  11. #include <SPI.h>
  12. #include "nRF24L01.h"
  13. #include "RF24.h"
  14. #include "printf.h"
  15. #include <microLED.h>  
  16. microLED<NUMLEDS, STRIP_PIN, MLED_NO_CLOCK, LED_WS2812, ORDER_GRB, CLI_AVER> strip;
  17. RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
  18. //RF24 radio(9,53); // для Меги
  19. uint32_t timer0,timer1,timer2,timer3;
  20.   int PUpin = 2;
  21.   int power_mesure = A6;
  22. uint16_t recieve_data[1]; // массив принятых данных
  23. uint16_t last_data[1];
  24. byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
  25.  
  26. void setup() {
  27. pinMode(PUpin, INPUT); //пинать питальник, чтоб не заснул
  28. pinMode(power_mesure, INPUT); // вход с делителя
  29.   Serial.begin(9600); //открываем порт для связи с ПК
  30.   recieve_data[0] = 0x0;
  31.   radio.begin(); //активировать модуль
  32.   radio.setAutoAck(true);         //режим подтверждения приёма, 1 вкл 0 выкл
  33.   radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  34.   radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  35.   radio.setPayloadSize(32);     //размер пакета, в байтах
  36.  
  37.   radio.openReadingPipe(1, address[0]);     //хотим слушать трубу 0
  38.   radio.setChannel(0x66);  //выбираем канал (в котором нет шумов!)
  39.  
  40.   radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  41.   radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  42.   //должна быть одинакова на приёмнике и передатчике!
  43.   //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  44.  
  45.   radio.powerUp(); //начать работу
  46.   radio.startListening();  //начинаем слушать эфир, мы приёмный модуль
  47.   strip.setBrightness(255); //яркость ленты 100%
  48.   delay(500);
  49. }
  50.  
  51. void loop() {
  52.    byte pipeNo;
  53.   float voltage = (float)(analogRead(power_mesure) * 3.3) / 1024/0.666; //получаем напряжение аккумулятора
  54.   static int bright = 255; //яркость сотка
  55.  while (millis() - timer0 <= 60000) { //рабочий цикл 60 сек
  56.   if (millis() - timer1 >= 20000) {   // таймер на 20 сек пинать питальник - прижать
  57.     pinMode(PUpin, OUTPUT);
  58.     Serial.println ("push");
  59.     timer1 = millis();
  60.   }
  61.      if (millis() - timer2 >= 20150) { // таймер на 150 мсек пинать питальник - отжать
  62.      pinMode(PUpin, INPUT_PULLUP);
  63.     timer2 = millis();
  64.     Serial.println ("unpush");
  65.   }
  66.     if (millis() - timer3 >= 10000) {   // таймер на 10 сек - замер напруги
  67.       Serial.println (voltage);
  68.     timer3 = millis();
  69.     }
  70.  }
  71.  
  72.   while ( radio.available(&pipeNo)) {  // слушаем эфир со всех труб
  73.     radio.read( &recieve_data, sizeof(recieve_data) );  
  74.     // чиатем входящий сигнал
  75.  if (recieve_data[0] == 0x1) { // если есть изменения в recieve_data
  76.       strip.setBrightness(255); //задаем яркость
  77.       strip.fill(mGreen);       //заливаем зеленым
  78.       strip.show();             //послали на ленту
  79.       Serial.println("green");
  80.       last_data[0] = recieve_data[0]; // запомнить последнее изменение
  81.  
  82.     }
  83.      if ((recieve_data[0] == 0x2) && (last_data[0] != 0x3) && (last_data[0] != 0x4))  { // затухание зеленого
  84.         bright = 255;
  85.               strip.fill(mGreen);
  86.         last_data[0] = recieve_data[0];
  87. while (bright > 0) {      //пока яркость выше 0
  88.     bright --;    // 5 - множитель скорости изменения
  89.   strip.setBrightness(bright); //присваиваем  значение яркости
  90.   strip.show();               //выводим на ленту
  91.  
  92. }
  93. }
  94.      if (recieve_data[0] == 0x3) { // если есть изменения в recieve_data
  95.       strip.setBrightness(255);   //задаем яркость
  96.       strip.fill(mRed);           //заливаем ленту красным
  97.       strip.show();              //послали на ленту
  98.       Serial.println("red");
  99.       last_data[0] = recieve_data[0]; // запомнить последнее изменение
  100.  
  101.     }
  102.      if ((recieve_data[0] == 0x4) && (last_data[0] != 0x1) && (last_data[0] != 0x2)) { // если есть изменения в recieve_data
  103.         bright = 255;
  104.               strip.fill(mRed);
  105.         last_data[0] = recieve_data[0];
  106. while (bright > 0) {      //пока яркость выше 0
  107.     bright --;    // 5 - множитель скорости изменения
  108.   strip.setBrightness(bright); //присваиваем  значение яркости
  109.   strip.show(); //
  110.   }
  111.   }
  112. }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement