#include <SPI.h>
#include "RF24.h"
#include <SoftwareSerial.h>
#include <Servo.h>
/*Разное*/
#define SERVO_MID 90
#define SERVO_BOT 0
#define SERVO_TOP 180
#define Gaz_Stop_Porog 15
#define GAZ_BOT 0
#define GAZ_MID 512
#define GAZ_TOP 1024
/*Переменная передачи данных*/
#define D_Y 1
#define D_X 0
/******************************************************************
Переменные и подключение
*******************************************************************/
//SCK -> 13 52
//MISO -> 12 50
//MOSI -> 11 51
//CSN -> 10 53
//CE -> 9 48
RF24 radio(9,10);
// адреса каналов приема и передачи
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
/******************************************************************
Переменные
*******************************************************************/
int IN1=6, IN2=5;//перенести в define
int data[2]; //Переменная для передачи данных.
/*Переменные*/
int JoyX, JoyY, GazX, GazY, absX, absY;
Servo servoLeft;
Servo servoRight;
/**********************************************************************/
void setup() {
Serial.begin(9600);
/*инициализация радиомодуля*/
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
radio.setDataRate(RF24_2MBPS);
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
radio.startListening(); // Начинаем слушать эфир
//radio.writeAckPayload (1, &ackData, sizeof(ackData) );
/*настройка пинов*/
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
/*инициализация серв*/
servoLeft.attach(IN1);
servoRight.attach(IN2);
servoLeft.write(SERVO_MID);
servoRight.write(SERVO_MID);
} // <======Конец сетапа.
void loop() {
if(radio.available()){// Если в буфере приёма имеются принятые данные от передатчика, то ...
radio.read(&data,sizeof(data)); // Читаем данные из буфера приёма в массив myData указывая сколько всего байт может поместиться в массив.
//radio.writeAckPayload (1, &ackData, sizeof(ackData) );
/****************************************************************
ЕЗДА
*****************************************************************/
JoyX = data[D_X];
JoyY = data[D_Y];
GazX = map(JoyX, GAZ_BOT, GAZ_TOP, SERVO_BOT, SERVO_TOP);
GazY = map(JoyY, GAZ_BOT, GAZ_TOP, SERVO_BOT, SERVO_TOP);
Serial.print("X = ");
Serial.println(data[D_X]);
Serial.print("Y = ");
Serial.println(JoyY);
//Определение направления и скорости
//Стоит
if (GazX >= SERVO_MID - Gaz_Stop_Porog && GazX <= SERVO_MID + Gaz_Stop_Porog
&& GazY >= SERVO_MID - Gaz_Stop_Porog && GazY <= SERVO_MID + Gaz_Stop_Porog){
set_speed (SERVO_MID, SERVO_MID);
}
//Вперёд
else if (GazX >= SERVO_MID + Gaz_Stop_Porog && GazY >= SERVO_MID - Gaz_Stop_Porog
&& GazY <= SERVO_MID + Gaz_Stop_Porog){
set_speed (GazX, GazX);
}
//Вперёд вправо
if (GazX >= SERVO_MID + Gaz_Stop_Porog &&
GazY >= SERVO_MID + Gaz_Stop_Porog){
set_speed (GazX, GazX - (GazY - (SERVO_MID + Gaz_Stop_Porog)));
//null_nap();
}
//Вперёд влево
if (GazX >= SERVO_MID + Gaz_Stop_Porog &&
GazY <= SERVO_MID - Gaz_Stop_Porog){
set_speed (GazX - ((SERVO_MID - Gaz_Stop_Porog) - GazY), GazX);
//null_nap();
}
//Назад
else if (GazX <= SERVO_MID - Gaz_Stop_Porog && GazY >= SERVO_MID - Gaz_Stop_Porog
&& GazY <= SERVO_MID + Gaz_Stop_Porog){
set_speed (GazX, GazX);
//null_nap();
}
//Назад влево
if (GazX <= SERVO_MID - Gaz_Stop_Porog &&
GazY <= SERVO_MID - Gaz_Stop_Porog){
set_speed (GazX + ((SERVO_MID - Gaz_Stop_Porog) - GazY), GazX);
//null_nap();
}
//Назад вправо
if (GazX <= SERVO_MID - Gaz_Stop_Porog &&
GazY >= SERVO_MID + Gaz_Stop_Porog){
set_speed (GazX, GazX + (GazY - (SERVO_MID + Gaz_Stop_Porog)));
//null_nap();
}
//Налево
else if (GazX <= SERVO_MID + Gaz_Stop_Porog && GazX >= SERVO_MID - Gaz_Stop_Porog
&& GazY <= SERVO_MID - Gaz_Stop_Porog){
set_speed (SERVO_TOP - GazY, GazY);
//null_nap();
}
//Направо
else if (GazX <= SERVO_MID + Gaz_Stop_Porog && GazX >= SERVO_MID - Gaz_Stop_Porog
&& GazY >= SERVO_MID + Gaz_Stop_Porog){
set_speed (SERVO_TOP - GazY, GazY);
//null_nap();
}
}}
void set_speed(int _left, int _right){
servoLeft.write(_left);
servoRight.write(_right);
}