Advertisement
_TEXNIK_

Untitled

Jan 5th, 2024
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.52 KB | None | 0 0
  1. // Передаткик
  2. #include <SPI.h>
  3. #include "nRF24L01.h"
  4. #include "RF24.h"
  5.  
  6. RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
  7. //RF24 radio(9,53); // для Меги
  8.  
  9. byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
  10.  
  11. byte button = 2;  // кнопка на 3 цифровом
  12. byte potent = 0;  // потенциометр на 0 аналоговом
  13. byte slider = 1;  // движковый потенциометр на 1 аналоговом пине
  14.  
  15. byte transmit_data[3];  // массив, хранящий передаваемые данные
  16. byte latest_data[3];    // массив, хранящий последние переданные данные
  17. boolean flag;           // флажок отправки данных
  18.  
  19. void setup() {
  20.   Serial.begin(9600);   //открываем порт для связи с ПК
  21.  
  22.   pinMode(button, INPUT_PULLUP); // настроить пин кнопки
  23.  
  24.   radio.begin();              // активировать модуль
  25.   radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  26.   radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  27.   radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  28.   radio.setPayloadSize(32);   // размер пакета, в байтах
  29.  
  30.   radio.openWritingPipe(address[0]);  // мы - труба 0, открываем канал для передачи данных
  31.   radio.setChannel(0x60);     // выбираем канал (в котором нет шумов!)
  32.  
  33.   radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  34.   radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  35.   //должна быть одинакова на приёмнике и передатчике!
  36.   //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  37.  
  38.   radio.powerUp();        //начать работу
  39.   radio.stopListening();  //не слушаем радиоэфир, мы передатчик
  40. }
  41.  
  42. void loop() {
  43.   // инвертированный (!) сигнал с кнопки
  44.   transmit_data[0] = !digitalRead(button);
  45.  
  46.   transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 2550); // получить значение
  47.   // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
  48.   transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);
  49.  
  50.   for (int i = 0; i < 3; i++) {               // в цикле от 0 до числа каналов
  51.     if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
  52.       flag = 1;                               // поднять флаг отправки по радио
  53.       latest_data[i] = transmit_data[i];      // запомнить последнее изменение
  54.     }
  55.   }
  56.  
  57.   if (flag == 1) {
  58.     radio.powerUp();    // включить передатчик
  59.     radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
  60.     flag = 0;           //опустить флаг
  61.     radio.powerDown();  // выключить передатчик
  62.   }
  63. }
  64.  
  65.  
  66.  
  67.  
  68.  
  69. // Приемник
  70.  
  71. #include <SPI.h>
  72. #include "nRF24L01.h"
  73. #include "RF24.h"
  74. #include <Servo.h>
  75. #include <LiquidCrystal_I2C.h>  // подключаем библу
  76.  
  77. RF24 radio(9, 10);  // "создать" модуль на пинах 9 и 10 Для Уно
  78. //RF24 radio(9,53); // для Меги
  79. LiquidCrystal_I2C lcd(0x27, 16, 2);  // адрес, столбцов, строк
  80.  
  81. byte recieved_data[3];  // массив принятых данных
  82. byte relay = 2;         // реле на 2 цифровом
  83. byte servo = 3;         // сервопривод на 3 цифровом
  84. byte mosfet = 5;        // мосфет на 5 цифровом (ТУТ ЕСТЬ ШИМ!!!)
  85.  
  86. Servo myservo;
  87.  
  88. byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
  89.  
  90. void setup() {
  91.   Serial.begin(9600);       // открываем порт для связи с ПК
  92.   lcd.init();           // инициализация
  93.   lcd.backlight();
  94.  
  95.   pinMode(relay, OUTPUT);   // настроить пин реле как выход
  96.   pinMode(mosfet, OUTPUT);  // настроить пин мосфета как выход
  97.  
  98.   myservo.attach(servo);
  99.  
  100.   radio.begin(); //активировать модуль
  101.   radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  102.   radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  103.   radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  104.   radio.setPayloadSize(32);   // размер пакета, в байтах
  105.  
  106.   radio.openReadingPipe(1, address[0]);     // хотим слушать трубу 0
  107.   radio.setChannel(0x60);  // выбираем канал (в котором нет шумов!)
  108.  
  109.   radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  110.   radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  111.   //должна быть одинакова на приёмнике и передатчике!
  112.   //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  113.  
  114.   radio.powerUp();          // начать работу
  115.   radio.startListening();   // начинаем слушать эфир, мы приёмный модуль
  116. }
  117.  
  118. void loop() {
  119.   byte pipeNo;
  120.   while ( radio.available(&pipeNo)) { // есть входящие данные
  121.     // чиатем входящий сигнал
  122.     radio.read(&recieved_data, sizeof(recieved_data));
  123.  
  124.     lcd.setCursor(1, 0);  // столбец 1 строка 0
  125.     lcd.print(recieved_data[0]);
  126.  
  127.     lcd.setCursor(6, 0);  // столбец 1 строка 0
  128.     lcd.print(recieved_data[1]);
  129.   }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement