Arduino + RC

Нет ответов
fortekom
Offline
Зарегистрирован: 19.02.2014

У меня есть RC   HK-T6A, решил подключить к простой машинке.

Использовать можно любую аппаратуру RC.

Приемник работает как сервоконтролер, и в принципе можно использовать библиотеку SERVO, но я воспользовался командой - pulseIn

Использовал Arduino mini 168, драйвер 2А.

Вот скетч который я сделал:

/*
Пульт HobbyKing HK-T6A V2
*/
// Моторы подключаются к клеммам M1+,M1-,M2+,M2-  
// Motor shield использует четыре контакта 6,5,7,4 для управления моторами 
#define M21      6 //мотор 2 +
#define M11      5 //мотор 1 +
#define M20      7 //мотор 2 -
#define M10      4 //мотор 1 -

const int CH1 = A1; // вперед назад
const int CH2 = A2; // вправо влево

void setup()
{
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

  pinMode(CH1, INPUT);
  pinMode(CH2, INPUT);
  Serial.begin(9600);
}

void loop()
{
  int chVal1 = 0;
  int chVal2 = 0;
  int ch11 = 0;//значение скорости от 0 до 254 для движения
  int ch22 = 0;//значение скорости от 0 до 254 для поворота

  chVal1 = pulseIn(CH2, true, 25000); 
  chVal2 = pulseIn(CH1, true, 25000); 
//  chVal1 = chVal1 / 3,7; // Округляем , значение влияет на плавность
//  chVal2 = chVal2 / 3,7; // Округляем

  if (chVal1 != 0 || chVal2 != 0)
  {
    if (chVal1 > 1550)
    {
      ch11=(chVal1-1550)*0.93;//результат должен быть от 0 до 254
      if (ch11>254) ch11 = 254;
      analogWrite(M11, ch11);
      digitalWrite(M10, LOW);
    }
    if (chVal2 > 1550)
    {
      ch22=(chVal2-1550)*0.82;
      if (ch22>254) ch22 = 254;
      analogWrite(M21, ch22);
      digitalWrite(M20, LOW);
    }
    if (chVal2 < 1450)
    {
      ch22=(chVal2-1150)*0.85;
      if (ch22<0) ch22 = 0;
      analogWrite(M21, ch22);
      digitalWrite(M20, HIGH);
    }
    if (chVal1 < 1450)
    {
      ch11=(chVal1-1210)*1.06;
      if (ch11<0) ch11 = 0;
      analogWrite(M11, ch11);
      digitalWrite(M10, HIGH);
    }
    if ((chVal1 > 1450 && chVal1 < 1550)&& (chVal2 > 1450 && chVal2 < 1550))
    {
      analogWrite(M11, 0);
      analogWrite(M21, 0);
      digitalWrite(M20, 0);
      digitalWrite(M10, 0);
    }
    Serial.print("chVal1 = ");
    Serial.print(chVal1); // Смотрим изменения значений
    Serial.print(" chVal2 = ");
    Serial.print(chVal2); // Смотрим изменения значений
    Serial.print("ch11 = ");
    Serial.print(ch11); // Смотрим изменения значений
    Serial.print(" ch22 = ");
    Serial.println(ch22); // Смотрим изменения значений

  }
  
}