Advertisement
_TEXNIK_

Untitled

Mar 13th, 2025
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 16.10 KB | None | 0 0
  1. // Робот
  2.  
  3. #include <SPI.h>
  4. #include "nRF24L01.h"
  5. #include "RF24.h"
  6. #include <Servo.h>
  7. #include "PCF8574.h"
  8.  
  9. // Адрес для модуля датчиков линии
  10. PCF8574 pcf8574(0x20);
  11.  
  12. // Переменные для серв
  13. Servo servoOne;
  14. Servo servoTwo;
  15. Servo servoThree;
  16. Servo servoFour;
  17. Servo servoFive;
  18. Servo servoDat;
  19.  
  20.  
  21. // Драйвер 1-го мотора
  22. const uint8_t OEN    = 3;      
  23. const uint8_t OL_PWM = 4;    
  24. const uint8_t OR_PWM = 5;
  25.  
  26. const uint8_t TEN    = 6;      
  27. const uint8_t TL_PWM = 7;        
  28. const uint8_t TR_PWM = 8;
  29.  
  30.  
  31.  
  32. // Переменная для логотипа
  33. const int led = 2;
  34.  
  35. // Переменные для джостика
  36. int valueTwoY;
  37. int valueTwoX;
  38.  
  39. // Переменная для скорости робота во время движения по линии
  40. int speed = 50;
  41.  
  42. // Подключение nrf2401
  43. RF24 radio(9, 10);
  44.  
  45. // массив принятых данных
  46. byte recieved_data[13];  
  47. byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
  48.  
  49.  
  50. void setup() {
  51.   // открываем порт для связи с ПК
  52.   Serial.begin(9600);      
  53.  
  54.   // Настройка пинов сервоприводов
  55.   servoOne.attach(A0);
  56.   servoTwo.attach(A1);
  57.   servoThree.attach(A2);
  58.   servoFour.attach(A3);
  59.   servoFive.attach(A6);
  60.   servoDat.attach(A7);
  61.  
  62.   // Настройка пинов моторов(драйверов)
  63.   pinMode(OEN,    OUTPUT);    
  64.   pinMode(OL_PWM, OUTPUT);    
  65.   pinMode(OR_PWM, OUTPUT);
  66.  
  67.   pinMode(TEN,    OUTPUT);    
  68.   pinMode(TL_PWM, OUTPUT);    
  69.   pinMode(TR_PWM, OUTPUT);
  70.  
  71.   // Настройка переменной для подсветки
  72.   pinMode(led, OUTPUT);
  73.  
  74.   //Настройка переменных на модуле датчиков линии
  75.   pcf8574.pinMode(P0, INPUT);      
  76.   pcf8574.pinMode(P1, INPUT);
  77.  
  78.   //активировать модул
  79.   radio.begin();
  80.   radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  81.   radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  82.   radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  83.   radio.setPayloadSize(32);   // размер пакета, в байтах
  84.  
  85.   radio.openReadingPipe(1, address[0]);     // хотим слушать трубу 0
  86.   radio.setChannel(0x60);  // выбираем канал (в котором нет шумов!)
  87.  
  88.   radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  89.   radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  90.   //должна быть одинакова на приёмнике и передатчике!
  91.   //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  92.  
  93.   radio.powerUp();          // начать работу
  94.   radio.startListening();   // начинаем слушать эфир, мы приёмный модуль
  95.  
  96. }
  97.  
  98. void loop() {
  99.   byte pipeNo;
  100.   while ( radio.available(&pipeNo))
  101.   {
  102.     radio.read(&recieved_data, sizeof(recieved_data));
  103.  
  104.     if (recieved_data[3] == 0)
  105.     {
  106.         // Блок вывода данных в Монитор-порта
  107.       Serial.print(recieved_data[0]); Serial.print("  ");
  108.       Serial.print(recieved_data[1]); Serial.print("  ");
  109.       Serial.print(recieved_data[2]); Serial.print("  ");
  110.       Serial.print(recieved_data[3]); Serial.print("  ");
  111.       Serial.print(recieved_data[4]); Serial.print("  ");
  112.       Serial.print(recieved_data[5]); Serial.print("  ");
  113.       Serial.print(recieved_data[6]); Serial.print("  ");
  114.       Serial.print(recieved_data[7]); Serial.print("  ");
  115.       Serial.print(recieved_data[8]); Serial.print("  ");
  116.       Serial.print(recieved_data[9]); Serial.print("  ");
  117.       Serial.print(recieved_data[10]); Serial.print("  ");
  118.       Serial.print(recieved_data[11]); Serial.print("  ");
  119.       Serial.print(recieved_data[12]); Serial.print("  ");
  120.       Serial.println();
  121.  
  122.       int valueOneY = recieved_data[12];
  123.       int valueOneX = recieved_data[11];
  124.  
  125.       // -------------------  Сервоприводы  -------------------
  126.       servoOne.write(map(recieved_data[5], 0, 255, 0, 270));
  127.       servoTwo.write(map(recieved_data[6], 0, 255, 0, 270));
  128.       servoThree.write(map(recieved_data[7], 0, 255, 0, 270));
  129.       servoFour.write(map(recieved_data[8], 0, 255, 0, 270));
  130.       servoFive.write(map(recieved_data[10], 0, 255, 0, 270));
  131.  
  132.  
  133.       // -------------------  ЧАСТЬ ОСИ Y  -------------------
  134.       if (valueOneY > 140)
  135.       {
  136.         valueTwoY = map(valueOneY, 140, 255, 0, 255);
  137.         // Левая часть
  138.         digitalWrite(OL_PWM, LOW );
  139.         digitalWrite(OR_PWM, HIGH);  
  140.         analogWrite (OEN, valueTwoY );
  141.  
  142.         // Правая часть
  143.         digitalWrite(TL_PWM, HIGH );
  144.         digitalWrite(TR_PWM, LOW);  
  145.         analogWrite (TEN, valueTwoY );
  146.       }
  147.    
  148.       else if (valueOneY < 120)
  149.       {
  150.       valueTwoY = map(valueOneY, 120, 0, 0, 255);
  151.  
  152.         // Левая часть
  153.         digitalWrite(OL_PWM, HIGH );
  154.         digitalWrite(OR_PWM, LOW);  
  155.         analogWrite (OEN,  valueTwoX);
  156.  
  157.         // Правая часть
  158.         digitalWrite(TL_PWM, LOW);  
  159.         digitalWrite(TR_PWM, HIGH );  
  160.         analogWrite (TEN, valueTwoY);
  161.       }
  162.  
  163.       else if (valueOneX > 140)
  164.       {
  165.         valueTwoX = map(valueOneX, 140, 255, 0, 255);
  166.  
  167.         // Левая часть
  168.         digitalWrite(OL_PWM, LOW);  
  169.         digitalWrite(OR_PWM, HIGH );  
  170.         analogWrite (OEN, valueTwoX);
  171.  
  172.         // Правая часть
  173.         digitalWrite(TL_PWM, LOW);  
  174.         digitalWrite(TR_PWM, HIGH );  
  175.         analogWrite (TEN, valueTwoX);
  176.       }
  177.  
  178.       else if (valueOneX < 120)
  179.       {
  180.         valueTwoX = map(valueOneX, 120, 0, 0, 255);
  181.  
  182.         // Левая часть
  183.         digitalWrite(OL_PWM, HIGH);  
  184.         digitalWrite(OR_PWM, LOW );  
  185.         analogWrite (OEN, valueTwoX);
  186.  
  187.         // Правая часть
  188.         digitalWrite(TL_PWM, HIGH);  
  189.         digitalWrite(TR_PWM, LOW );  
  190.         analogWrite (TEN, valueTwoX);
  191.       }
  192.    
  193.       else
  194.       {
  195.         // Левая часть
  196.         digitalWrite(OL_PWM, HIGH);  
  197.         digitalWrite(OR_PWM, HIGH);  
  198.         analogWrite (OEN,    100 );
  199.  
  200.         // Правая часть
  201.         digitalWrite(TL_PWM, HIGH);  
  202.         digitalWrite(TR_PWM, HIGH);  
  203.         analogWrite (TEN,     100);
  204.       }
  205.  
  206.       // Подсветка логотипа
  207.       if (recieved_data[2] == 1)
  208.       {
  209.         digitalWrite(led, HIGH);
  210.       }
  211.  
  212.       if (recieved_data[2] == 0)
  213.       {
  214.         digitalWrite(led, LOW);
  215.       }
  216.  
  217.       servoDat.write(10);
  218.     }
  219.  
  220.     else
  221.     {
  222.       servoDat.write(115);
  223.  
  224.       uint8_t valLeftDat = pcf8574.digitalRead(P0);            
  225.       uint8_t valRightDat = pcf8574.digitalRead(P1);
  226.  
  227.       Serial.print(valLeftDat); Serial.print("  ");
  228.       Serial.print(valRightDat); Serial.print("  ");
  229.       Serial.println();
  230.  
  231.       if (valRightDat == 0 && valLeftDat == 0)
  232.       {
  233.         Serial.print("Вперед");
  234.         Serial.println();
  235.  
  236.         // Левая часть
  237.         digitalWrite(OL_PWM, LOW );
  238.         digitalWrite(OR_PWM, HIGH);  
  239.         analogWrite (OEN, speed);
  240.  
  241.         // Правая часть
  242.         digitalWrite(TL_PWM, LOW );
  243.         digitalWrite(TR_PWM, HIGH);  
  244.         analogWrite (TEN, speed);
  245.       }
  246.  
  247.       else if (valLeftDat == 1 && valRightDat == 0)
  248.       {
  249.         Serial.print("Вправо");
  250.         Serial.println();
  251.  
  252.         // Левая часть
  253.         digitalWrite(OL_PWM, HIGH );
  254.         digitalWrite(OR_PWM, LOW);  
  255.         analogWrite (OEN, speed);
  256.  
  257.         // Правая часть
  258.         digitalWrite(TL_PWM, LOW );
  259.         digitalWrite(TR_PWM, HIGH);  
  260.         analogWrite (TEN, speed);
  261.       }
  262.  
  263.  
  264.       else if (valLeftDat == 0 && valRightDat == 1)
  265.       {
  266.         Serial.print("Влево");
  267.         Serial.println();
  268.  
  269.         digitalWrite(OL_PWM, LOW );
  270.         digitalWrite(OR_PWM, HIGH);  
  271.         analogWrite (OEN, speed);
  272.  
  273.         // Правая часть
  274.         digitalWrite(TL_PWM, HIGH );
  275.         digitalWrite(TR_PWM, LOW);  
  276.         analogWrite (TEN, speed);
  277.       }
  278.  
  279.       Serial.print("Стоп");
  280.       Serial.println();
  281.       delay(50);
  282.  
  283.     }        
  284.   }
  285. }
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295. // ПУльт -----------------------------------------------------------
  296.  
  297. // TEXNIK Пульт
  298.  
  299. #include "U8glib.h"
  300. #include <SPI.h>
  301. #include "nRF24L01.h"
  302. #include "RF24.h"
  303.  
  304. U8GLIB_ST7920_128X64_4X u8g(10);
  305.  
  306. RF24 radio(8, 9); // "создать" модуль на пинах 9 и 10 Для Уно
  307. //RF24 radio(9,53); // для Меги
  308.  
  309. byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
  310.  
  311. // Кнопки
  312. byte buttonOne = 6;
  313. byte buttonTwo = 5;
  314.  
  315. // Джостик
  316. byte stickX = A6;  
  317. byte stickY = A7;
  318.  
  319. // Тумблер
  320. byte tumblerOne = 4;
  321. byte tumblerTwo = 3;
  322. byte tumblerThree = 2;
  323.  
  324. // Потенциометры
  325. byte potOne = A0;  
  326. byte potTwo = A1;
  327. byte potThree = A3;
  328. byte potFour = A2;
  329. byte potFive = A5;
  330. byte potSix = A4;
  331.  
  332. byte transmit_data[13];  // массив, хранящий передаваемые данные
  333. byte latest_data[13];    // массив, хранящий последние переданные данные
  334. boolean flag;           // флажок отправки данных
  335.  
  336. void next(void) {
  337.   u8g.setFont(u8g_font_unifont);
  338.   //u8g.setFont(u8g_font_osb18);
  339.   u8g.drawStr( 07, 18, "Interfacing");
  340.   u8g.drawStr( 07, 38, "Graphical LCD");
  341.   u8g.drawStr( 07, 58, "with Arduino");
  342. }
  343.  
  344. void val(void)
  345. {
  346.   u8g.setColorIndex(1);
  347.   u8g.drawBox(0, 0, 128, 10);
  348.   u8g.setFont(u8g_font_5x8);
  349.   u8g.setColorIndex(0);
  350.  
  351.   u8g.setPrintPos(8, 8); u8g.print(transmit_data[0]);
  352.   u8g.setPrintPos(28, 8); u8g.print(transmit_data[1]);
  353.   u8g.setPrintPos(48, 8); u8g.print(transmit_data[2]);
  354.   u8g.setPrintPos(68, 8); u8g.print(transmit_data[3]);
  355.   u8g.setPrintPos(88, 8); u8g.print(transmit_data[4]);
  356.   u8g.setPrintPos(108, 8); u8g.print("On");
  357.  
  358.   u8g.setColorIndex(1);
  359.   u8g.setFont(u8g_font_10x20);
  360.   u8g.setPrintPos(8, 34); u8g.print("Y:");
  361.   u8g.setPrintPos(8, 50); u8g.print("X:");
  362.   u8g.setPrintPos(28, 34); u8g.print(transmit_data[11]);
  363.   u8g.setPrintPos(28, 50); u8g.print(transmit_data[12]);
  364.  
  365.   u8g.setColorIndex(1);
  366.   u8g.setFont(u8g_font_6x10);
  367.   u8g.setPrintPos(80, 29); u8g.print(transmit_data[5]);
  368.   u8g.setPrintPos(102, 29); u8g.print(transmit_data[6]);
  369.   u8g.setPrintPos(80, 40); u8g.print(transmit_data[7]);
  370.   u8g.setPrintPos(102, 40); u8g.print(transmit_data[8]);
  371.   u8g.setPrintPos(80, 50); u8g.print(transmit_data[9]);
  372.   u8g.setPrintPos(102, 50); u8g.print(transmit_data[10]);
  373.  
  374.   u8g.setColorIndex(1);
  375.   u8g.setFont(u8g_font_6x10);
  376.   u8g.setPrintPos(46, 64); u8g.print("TEXNIK");
  377. }
  378.  
  379. void clearLCD(){
  380.   u8g.firstPage();  
  381.   do {
  382.   } while( u8g.nextPage() );
  383. }
  384. void setup() {
  385.   Serial.begin(9600);   //открываем порт для связи с ПК
  386.  
  387.   // Настройка Дисплея
  388.   // инициализируем значения цвета по умолчанию
  389.   if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
  390.     u8g.setColorIndex(255);     // белый
  391.   }
  392.   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
  393.     u8g.setColorIndex(3);         // максимальная интенсивность
  394.   }
  395.   else if ( u8g.getMode() == U8G_MODE_BW ) {
  396.     u8g.setColorIndex(1);         // включить пиксель
  397.   }
  398.   else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
  399.     u8g.setHiColorByRGB(255,255,255);
  400.   }
  401.  
  402.   // Настройка пинов джостика
  403.   pinMode(stickX, INPUT);
  404.   pinMode(stickY, INPUT);
  405.  
  406.   // Настройка пинов кнопок
  407.   pinMode(buttonOne, INPUT_PULLUP);
  408.   pinMode(buttonTwo, INPUT_PULLUP);
  409.  
  410.   // Настройка пинов тумблеров
  411.   pinMode(tumblerOne, INPUT_PULLUP);
  412.   pinMode(tumblerTwo, INPUT_PULLUP);
  413.   pinMode(tumblerThree, INPUT_PULLUP);
  414.  
  415.   // Настройка пинов потенциометров
  416.   pinMode(potOne, INPUT);
  417.   pinMode(potTwo, INPUT);
  418.   pinMode(potThree, INPUT);
  419.   pinMode(potFour, INPUT);
  420.   pinMode(potFive, INPUT);
  421.   pinMode(potSix, INPUT);
  422.  
  423.   radio.begin();              // активировать модуль
  424.   radio.setAutoAck(1);        // режим подтверждения приёма, 1 вкл 0 выкл
  425.   radio.setRetries(0, 15);    // (время между попыткой достучаться, число попыток)
  426.   radio.enableAckPayload();   // разрешить отсылку данных в ответ на входящий сигнал
  427.   radio.setPayloadSize(32);   // размер пакета, в байтах
  428.  
  429.   radio.openWritingPipe(address[0]);  // мы - труба 0, открываем канал для передачи данных
  430.   radio.setChannel(0x60);     // выбираем канал (в котором нет шумов!)
  431.  
  432.   radio.setPALevel (RF24_PA_MAX);   // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  433.   radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  434.   //должна быть одинакова на приёмнике и передатчике!
  435.   //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  436.  
  437.   radio.powerUp();        //начать работу
  438.   radio.stopListening();  //не слушаем радиоэфир, мы передатчик
  439.  
  440.  
  441. }
  442.  
  443. void loop() {
  444.  
  445.   // инвертированный (!) сигнал с кнопки
  446.   // инвертированный сигнал с кнопкок
  447.   transmit_data[0] = !digitalRead(buttonOne);
  448.   transmit_data[1] = !digitalRead(buttonTwo);
  449.  
  450.   // Инвертированный сигнал с тумблера
  451.   transmit_data[2] = !digitalRead(tumblerOne);
  452.   transmit_data[3] = !digitalRead(tumblerTwo);
  453.   transmit_data[4] = !digitalRead(tumblerThree);
  454.  
  455.   // Сигнал с потенциометров
  456.   transmit_data[5] = map(analogRead(potOne), 0, 1023, 255, 0);
  457.   transmit_data[6] = map(analogRead(potTwo), 0, 1023, 0, 255);
  458.   transmit_data[7] = map(analogRead(potThree), 0, 1023, 255, 0);
  459.   transmit_data[8] = map(analogRead(potFour), 0, 1023, 255, 0);
  460.   transmit_data[9] = map(analogRead(potFive), 0, 1023, 255, 0);
  461.   transmit_data[10] = map(analogRead(potSix), 0, 1023, 255, 0);
  462.  
  463.   // Сигнал с пинов джостика
  464.   transmit_data[11] = map(analogRead(stickX), 0, 1023, 0, 255);
  465.   transmit_data[12] = map(analogRead(stickY), 0, 1023, 0, 255);
  466.  
  467.  
  468.   radio.powerUp();    // включить передатчик
  469.   radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
  470.  
  471.   // Вывод данных в Монитор порта
  472.  
  473.   Serial.print(transmit_data[0]); Serial.print("  ");
  474.   Serial.print(transmit_data[1]); Serial.print("  ");
  475.   Serial.print(transmit_data[2]); Serial.print("  ");
  476.   Serial.print(transmit_data[3]); Serial.print("  ");
  477.   Serial.print(transmit_data[4]); Serial.print("  ");
  478.   Serial.print(transmit_data[5]); Serial.print("  ");
  479.   Serial.print(transmit_data[6]); Serial.print("  ");
  480.   Serial.print(transmit_data[7]); Serial.print("  ");
  481.   Serial.print(transmit_data[8]); Serial.print("  ");
  482.   Serial.print(transmit_data[9]); Serial.print("  ");
  483.   Serial.print(transmit_data[10]); Serial.print("  ");
  484.   Serial.print(transmit_data[11]); Serial.print("  ");
  485.   Serial.print(transmit_data[12]); Serial.print("  ");
  486.  
  487.   Serial.println();
  488.  
  489.   u8g.firstPage();
  490.   do {
  491.     val();
  492.   } while(u8g.nextPage() );
  493.  
  494. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement