Гусеничные шасси для робота

Код из видео

 


леонардо на платформе
// леонардо на платформе 

#include <EasyTransfer.h>

EasyTransfer ET;  

#define DIRA_PIN 12                            // ноги L298
#define DIRB_PIN 13
#define PWMA_PIN 3
#define PWMB_PIN 11

struct RECEIVE_DATA_STRUCTURE{        
  boolean DIRA;
  boolean DIRB;
  uint8_t PWMA;
  uint8_t PWMB;
  
};
 
RECEIVE_DATA_STRUCTURE data;

void setup() {
  Serial1.begin(115200);                      // Serial для радиомодуля HC11
                                              //   аппаратный в леонардо
  pinMode(DIRA_PIN, OUTPUT);                  // конфигурируем выходы
  pinMode(DIRB_PIN, OUTPUT); 
  analogWrite(PWMA_PIN, 0);                   // выключаем L298
  analogWrite(PWMB_PIN, 0);

  ET.begin(details(data), &Serial1);          // заводим EasyTransfer на Serial1

}

void loop() {
  if (ET.receiveData()) {                    // если пришли данные от HC11
      analogWrite(PWMA_PIN, data.PWMA);      // сопостовляем их  
      analogWrite(PWMB_PIN, data.PWMB);
      digitalWrite(DIRA_PIN, data.DIRA);
      digitalWrite(DIRB_PIN, data.DIRB);
 
  }
 

}

леонардо в качестве пульта
// леонардо в качестве пульта

#include <EasyTransfer.h>

#define RA A0                         // ноги для подключения резисторов
#define RB A1 

//create object
EasyTransfer ET; 

struct SEND_DATA_STRUCTURE{           // эту структуру будем передавать
  boolean DIRA;                       // тут ноги шилда на L298
  boolean DIRB;
  uint8_t PWMA;
  uint8_t PWMB;
  
};
 
SEND_DATA_STRUCTURE data;


void setup() {
  Serial1.begin(115200);              // UART для HC11
  ET.begin(details(data), &Serial1);
}

void loop() {
  int RAValue = analogRead(RA);                           // читаем аналоговые входы 
  int RBValue = analogRead(RB);
                                                          // разделяем валуе пополам, для движения вперед\назад
  if (RAValue > 512){                                     // если значение больше 512
    data.DIRA = 0;                                        // это вперед
    data.PWMA = map(RAValue+5, 0, 512, 0, 255);           // мапим аналог, приводим значения для ШИМ, +5 это гистерезис
  }
  else {                                                  // тоже для назад
    data.DIRA = 1;
    data.PWMA = map(RAValue-5, 1023, 512, 0, 255);
  }


  if (RBValue > 512){                                     // тоже для второй гусиницы
    data.DIRB = 0;
    data.PWMB = map(RBValue+5, 0, 512, 0, 255);
  }
  else {
    data.DIRB = 1;
    data.PWMB = map(RBValue-5, 1023, 512, 0, 255);
  } 

 
  ET.sendData();                                           // отпраляем значения
 

}