Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. /* Данный скетч делает следующее: передатчик (TX) отправляет массив
  2. данных, который генерируется согласно показаниям с кнопки и с
  3. двух потенциомтеров. Приёмник (RX) получает массив, и записывает
  4. данные на реле, сервомашинку и генерирует ШИМ сигнал на транзистор.
  5. by AlexGyver 2016
  6. */
  7.  
  8. #include <SPI.h>
  9. #include "nRF24L01.h"
  10. #include "RF24.h"
  11.  
  12. RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
  13. //RF24 radio(9,53); // для Меги
  14.  
  15. byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
  16.  
  17. byte button = 3; // кнопка на 3 цифровом
  18. byte potent = 0; // потенциометр на 0 аналоговом
  19. byte slider = 1; // движковый потенциометр на 1 аналоговом пине
  20.  
  21. byte transmit_data[3]; // массив, хранящий передаваемые данные
  22. byte latest_data[3]; // массив, хранящий последние переданные данные
  23. boolean flag; // флажок отправки данных
  24.  
  25. void setup() {
  26. Serial.begin(9600); //открываем порт для связи с ПК
  27.  
  28. pinMode(button, INPUT_PULLUP); // настроить пин кнопки
  29.  
  30. radio.begin(); //активировать модуль
  31. radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
  32. radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
  33. radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
  34. radio.setPayloadSize(32); //размер пакета, в байтах
  35.  
  36. radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных
  37. radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)
  38.  
  39. radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  40. radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  41. //должна быть одинакова на приёмнике и передатчике!
  42. //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  43.  
  44. radio.powerUp(); //начать работу
  45. radio.stopListening(); //не слушаем радиоэфир, мы передатчик
  46. }
  47.  
  48. void loop() {
  49.  
  50. transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки
  51. transmit_data[1] = map(analogRead(potent), 418, 618, 0, 180); // получить значение
  52. // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
  53. transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);
  54.  
  55. for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
  56. if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
  57. flag = 1; // поднять флаг отправки по радио
  58. latest_data[i] = transmit_data[i]; // запомнить последнее изменение
  59. }
  60. }
  61.  
  62. if (flag == 1) {
  63. radio.powerUp(); // включить передатчик
  64. radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
  65. flag = 0; //опустить флаг
  66. radio.powerDown(); // выключить передатчик
  67. }
  68.  
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement