Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Робот
- #include <SPI.h>
- #include "nRF24L01.h"
- #include "RF24.h"
- #include <Servo.h>
- #include "PCF8574.h"
- // Адрес для модуля датчиков линии
- PCF8574 pcf8574(0x20);
- // Переменные для серв
- Servo servoOne;
- Servo servoTwo;
- Servo servoThree;
- Servo servoFour;
- Servo servoFive;
- Servo servoDat;
- // Драйвер 1-го мотора
- const uint8_t OEN = 3;
- const uint8_t OL_PWM = 4;
- const uint8_t OR_PWM = 5;
- const uint8_t TEN = 6;
- const uint8_t TL_PWM = 7;
- const uint8_t TR_PWM = 8;
- // Переменная для логотипа
- const int led = 2;
- // Переменные для джостика
- int valueTwoY;
- int valueTwoX;
- // Переменная для скорости робота во время движения по линии
- int speed = 50;
- // Подключение nrf2401
- RF24 radio(9, 10);
- // массив принятых данных
- byte recieved_data[13];
- byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
- void setup() {
- // открываем порт для связи с ПК
- Serial.begin(9600);
- // Настройка пинов сервоприводов
- servoOne.attach(A0);
- servoTwo.attach(A1);
- servoThree.attach(A2);
- servoFour.attach(A3);
- servoFive.attach(A6);
- servoDat.attach(A7);
- // Настройка пинов моторов(драйверов)
- pinMode(OEN, OUTPUT);
- pinMode(OL_PWM, OUTPUT);
- pinMode(OR_PWM, OUTPUT);
- pinMode(TEN, OUTPUT);
- pinMode(TL_PWM, OUTPUT);
- pinMode(TR_PWM, OUTPUT);
- // Настройка переменной для подсветки
- pinMode(led, OUTPUT);
- //Настройка переменных на модуле датчиков линии
- pcf8574.pinMode(P0, INPUT);
- pcf8574.pinMode(P1, INPUT);
- //активировать модул
- radio.begin();
- radio.setAutoAck(1); // режим подтверждения приёма, 1 вкл 0 выкл
- radio.setRetries(0, 15); // (время между попыткой достучаться, число попыток)
- radio.enableAckPayload(); // разрешить отсылку данных в ответ на входящий сигнал
- radio.setPayloadSize(32); // размер пакета, в байтах
- radio.openReadingPipe(1, address[0]); // хотим слушать трубу 0
- radio.setChannel(0x60); // выбираем канал (в котором нет шумов!)
- radio.setPALevel (RF24_PA_MAX); // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
- radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
- //должна быть одинакова на приёмнике и передатчике!
- //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
- radio.powerUp(); // начать работу
- radio.startListening(); // начинаем слушать эфир, мы приёмный модуль
- }
- void loop() {
- byte pipeNo;
- while ( radio.available(&pipeNo))
- {
- radio.read(&recieved_data, sizeof(recieved_data));
- if (recieved_data[3] == 0)
- {
- // Блок вывода данных в Монитор-порта
- Serial.print(recieved_data[0]); Serial.print(" ");
- Serial.print(recieved_data[1]); Serial.print(" ");
- Serial.print(recieved_data[2]); Serial.print(" ");
- Serial.print(recieved_data[3]); Serial.print(" ");
- Serial.print(recieved_data[4]); Serial.print(" ");
- Serial.print(recieved_data[5]); Serial.print(" ");
- Serial.print(recieved_data[6]); Serial.print(" ");
- Serial.print(recieved_data[7]); Serial.print(" ");
- Serial.print(recieved_data[8]); Serial.print(" ");
- Serial.print(recieved_data[9]); Serial.print(" ");
- Serial.print(recieved_data[10]); Serial.print(" ");
- Serial.print(recieved_data[11]); Serial.print(" ");
- Serial.print(recieved_data[12]); Serial.print(" ");
- Serial.println();
- int valueOneY = recieved_data[12];
- int valueOneX = recieved_data[11];
- // ------------------- Сервоприводы -------------------
- servoOne.write(map(recieved_data[5], 0, 255, 0, 270));
- servoTwo.write(map(recieved_data[6], 0, 255, 0, 270));
- servoThree.write(map(recieved_data[7], 0, 255, 0, 270));
- servoFour.write(map(recieved_data[8], 0, 255, 0, 270));
- servoFive.write(map(recieved_data[10], 0, 255, 0, 270));
- // ------------------- ЧАСТЬ ОСИ Y -------------------
- if (valueOneY > 140)
- {
- valueTwoY = map(valueOneY, 140, 255, 0, 255);
- // Левая часть
- digitalWrite(OL_PWM, LOW );
- digitalWrite(OR_PWM, HIGH);
- analogWrite (OEN, valueTwoY );
- // Правая часть
- digitalWrite(TL_PWM, HIGH );
- digitalWrite(TR_PWM, LOW);
- analogWrite (TEN, valueTwoY );
- }
- else if (valueOneY < 120)
- {
- valueTwoY = map(valueOneY, 120, 0, 0, 255);
- // Левая часть
- digitalWrite(OL_PWM, HIGH );
- digitalWrite(OR_PWM, LOW);
- analogWrite (OEN, valueTwoX);
- // Правая часть
- digitalWrite(TL_PWM, LOW);
- digitalWrite(TR_PWM, HIGH );
- analogWrite (TEN, valueTwoY);
- }
- else if (valueOneX > 140)
- {
- valueTwoX = map(valueOneX, 140, 255, 0, 255);
- // Левая часть
- digitalWrite(OL_PWM, LOW);
- digitalWrite(OR_PWM, HIGH );
- analogWrite (OEN, valueTwoX);
- // Правая часть
- digitalWrite(TL_PWM, LOW);
- digitalWrite(TR_PWM, HIGH );
- analogWrite (TEN, valueTwoX);
- }
- else if (valueOneX < 120)
- {
- valueTwoX = map(valueOneX, 120, 0, 0, 255);
- // Левая часть
- digitalWrite(OL_PWM, HIGH);
- digitalWrite(OR_PWM, LOW );
- analogWrite (OEN, valueTwoX);
- // Правая часть
- digitalWrite(TL_PWM, HIGH);
- digitalWrite(TR_PWM, LOW );
- analogWrite (TEN, valueTwoX);
- }
- else
- {
- // Левая часть
- digitalWrite(OL_PWM, HIGH);
- digitalWrite(OR_PWM, HIGH);
- analogWrite (OEN, 100 );
- // Правая часть
- digitalWrite(TL_PWM, HIGH);
- digitalWrite(TR_PWM, HIGH);
- analogWrite (TEN, 100);
- }
- // Подсветка логотипа
- if (recieved_data[2] == 1)
- {
- digitalWrite(led, HIGH);
- }
- if (recieved_data[2] == 0)
- {
- digitalWrite(led, LOW);
- }
- servoDat.write(10);
- }
- else
- {
- servoDat.write(115);
- uint8_t valLeftDat = pcf8574.digitalRead(P0);
- uint8_t valRightDat = pcf8574.digitalRead(P1);
- Serial.print(valLeftDat); Serial.print(" ");
- Serial.print(valRightDat); Serial.print(" ");
- Serial.println();
- if (valRightDat == 0 && valLeftDat == 0)
- {
- Serial.print("Вперед");
- Serial.println();
- // Левая часть
- digitalWrite(OL_PWM, LOW );
- digitalWrite(OR_PWM, HIGH);
- analogWrite (OEN, speed);
- // Правая часть
- digitalWrite(TL_PWM, LOW );
- digitalWrite(TR_PWM, HIGH);
- analogWrite (TEN, speed);
- }
- else if (valLeftDat == 1 && valRightDat == 0)
- {
- Serial.print("Вправо");
- Serial.println();
- // Левая часть
- digitalWrite(OL_PWM, HIGH );
- digitalWrite(OR_PWM, LOW);
- analogWrite (OEN, speed);
- // Правая часть
- digitalWrite(TL_PWM, LOW );
- digitalWrite(TR_PWM, HIGH);
- analogWrite (TEN, speed);
- }
- else if (valLeftDat == 0 && valRightDat == 1)
- {
- Serial.print("Влево");
- Serial.println();
- digitalWrite(OL_PWM, LOW );
- digitalWrite(OR_PWM, HIGH);
- analogWrite (OEN, speed);
- // Правая часть
- digitalWrite(TL_PWM, HIGH );
- digitalWrite(TR_PWM, LOW);
- analogWrite (TEN, speed);
- }
- Serial.print("Стоп");
- Serial.println();
- delay(50);
- }
- }
- }
- // ПУльт -----------------------------------------------------------
- // TEXNIK Пульт
- #include "U8glib.h"
- #include <SPI.h>
- #include "nRF24L01.h"
- #include "RF24.h"
- U8GLIB_ST7920_128X64_4X u8g(10);
- RF24 radio(8, 9); // "создать" модуль на пинах 9 и 10 Для Уно
- //RF24 radio(9,53); // для Меги
- byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
- // Кнопки
- byte buttonOne = 6;
- byte buttonTwo = 5;
- // Джостик
- byte stickX = A6;
- byte stickY = A7;
- // Тумблер
- byte tumblerOne = 4;
- byte tumblerTwo = 3;
- byte tumblerThree = 2;
- // Потенциометры
- byte potOne = A0;
- byte potTwo = A1;
- byte potThree = A3;
- byte potFour = A2;
- byte potFive = A5;
- byte potSix = A4;
- byte transmit_data[13]; // массив, хранящий передаваемые данные
- byte latest_data[13]; // массив, хранящий последние переданные данные
- boolean flag; // флажок отправки данных
- void next(void) {
- u8g.setFont(u8g_font_unifont);
- //u8g.setFont(u8g_font_osb18);
- u8g.drawStr( 07, 18, "Interfacing");
- u8g.drawStr( 07, 38, "Graphical LCD");
- u8g.drawStr( 07, 58, "with Arduino");
- }
- void val(void)
- {
- u8g.setColorIndex(1);
- u8g.drawBox(0, 0, 128, 10);
- u8g.setFont(u8g_font_5x8);
- u8g.setColorIndex(0);
- u8g.setPrintPos(8, 8); u8g.print(transmit_data[0]);
- u8g.setPrintPos(28, 8); u8g.print(transmit_data[1]);
- u8g.setPrintPos(48, 8); u8g.print(transmit_data[2]);
- u8g.setPrintPos(68, 8); u8g.print(transmit_data[3]);
- u8g.setPrintPos(88, 8); u8g.print(transmit_data[4]);
- u8g.setPrintPos(108, 8); u8g.print("On");
- u8g.setColorIndex(1);
- u8g.setFont(u8g_font_10x20);
- u8g.setPrintPos(8, 34); u8g.print("Y:");
- u8g.setPrintPos(8, 50); u8g.print("X:");
- u8g.setPrintPos(28, 34); u8g.print(transmit_data[11]);
- u8g.setPrintPos(28, 50); u8g.print(transmit_data[12]);
- u8g.setColorIndex(1);
- u8g.setFont(u8g_font_6x10);
- u8g.setPrintPos(80, 29); u8g.print(transmit_data[5]);
- u8g.setPrintPos(102, 29); u8g.print(transmit_data[6]);
- u8g.setPrintPos(80, 40); u8g.print(transmit_data[7]);
- u8g.setPrintPos(102, 40); u8g.print(transmit_data[8]);
- u8g.setPrintPos(80, 50); u8g.print(transmit_data[9]);
- u8g.setPrintPos(102, 50); u8g.print(transmit_data[10]);
- u8g.setColorIndex(1);
- u8g.setFont(u8g_font_6x10);
- u8g.setPrintPos(46, 64); u8g.print("TEXNIK");
- }
- void clearLCD(){
- u8g.firstPage();
- do {
- } while( u8g.nextPage() );
- }
- void setup() {
- Serial.begin(9600); //открываем порт для связи с ПК
- // Настройка Дисплея
- // инициализируем значения цвета по умолчанию
- if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
- u8g.setColorIndex(255); // белый
- }
- else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
- u8g.setColorIndex(3); // максимальная интенсивность
- }
- else if ( u8g.getMode() == U8G_MODE_BW ) {
- u8g.setColorIndex(1); // включить пиксель
- }
- else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
- u8g.setHiColorByRGB(255,255,255);
- }
- // Настройка пинов джостика
- pinMode(stickX, INPUT);
- pinMode(stickY, INPUT);
- // Настройка пинов кнопок
- pinMode(buttonOne, INPUT_PULLUP);
- pinMode(buttonTwo, INPUT_PULLUP);
- // Настройка пинов тумблеров
- pinMode(tumblerOne, INPUT_PULLUP);
- pinMode(tumblerTwo, INPUT_PULLUP);
- pinMode(tumblerThree, INPUT_PULLUP);
- // Настройка пинов потенциометров
- pinMode(potOne, INPUT);
- pinMode(potTwo, INPUT);
- pinMode(potThree, INPUT);
- pinMode(potFour, INPUT);
- pinMode(potFive, INPUT);
- pinMode(potSix, INPUT);
- radio.begin(); // активировать модуль
- radio.setAutoAck(1); // режим подтверждения приёма, 1 вкл 0 выкл
- radio.setRetries(0, 15); // (время между попыткой достучаться, число попыток)
- radio.enableAckPayload(); // разрешить отсылку данных в ответ на входящий сигнал
- radio.setPayloadSize(32); // размер пакета, в байтах
- radio.openWritingPipe(address[0]); // мы - труба 0, открываем канал для передачи данных
- radio.setChannel(0x60); // выбираем канал (в котором нет шумов!)
- radio.setPALevel (RF24_PA_MAX); // уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
- radio.setDataRate (RF24_250KBPS); // скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
- //должна быть одинакова на приёмнике и передатчике!
- //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
- radio.powerUp(); //начать работу
- radio.stopListening(); //не слушаем радиоэфир, мы передатчик
- }
- void loop() {
- // инвертированный (!) сигнал с кнопки
- // инвертированный сигнал с кнопкок
- transmit_data[0] = !digitalRead(buttonOne);
- transmit_data[1] = !digitalRead(buttonTwo);
- // Инвертированный сигнал с тумблера
- transmit_data[2] = !digitalRead(tumblerOne);
- transmit_data[3] = !digitalRead(tumblerTwo);
- transmit_data[4] = !digitalRead(tumblerThree);
- // Сигнал с потенциометров
- transmit_data[5] = map(analogRead(potOne), 0, 1023, 255, 0);
- transmit_data[6] = map(analogRead(potTwo), 0, 1023, 0, 255);
- transmit_data[7] = map(analogRead(potThree), 0, 1023, 255, 0);
- transmit_data[8] = map(analogRead(potFour), 0, 1023, 255, 0);
- transmit_data[9] = map(analogRead(potFive), 0, 1023, 255, 0);
- transmit_data[10] = map(analogRead(potSix), 0, 1023, 255, 0);
- // Сигнал с пинов джостика
- transmit_data[11] = map(analogRead(stickX), 0, 1023, 0, 255);
- transmit_data[12] = map(analogRead(stickY), 0, 1023, 0, 255);
- radio.powerUp(); // включить передатчик
- radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
- // Вывод данных в Монитор порта
- Serial.print(transmit_data[0]); Serial.print(" ");
- Serial.print(transmit_data[1]); Serial.print(" ");
- Serial.print(transmit_data[2]); Serial.print(" ");
- Serial.print(transmit_data[3]); Serial.print(" ");
- Serial.print(transmit_data[4]); Serial.print(" ");
- Serial.print(transmit_data[5]); Serial.print(" ");
- Serial.print(transmit_data[6]); Serial.print(" ");
- Serial.print(transmit_data[7]); Serial.print(" ");
- Serial.print(transmit_data[8]); Serial.print(" ");
- Serial.print(transmit_data[9]); Serial.print(" ");
- Serial.print(transmit_data[10]); Serial.print(" ");
- Serial.print(transmit_data[11]); Serial.print(" ");
- Serial.print(transmit_data[12]); Serial.print(" ");
- Serial.println();
- u8g.firstPage();
- do {
- val();
- } while(u8g.nextPage() );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement