Передать 2 числа по XBee или как дистанционно управлять Ардуино

Тема в разделе "Arduino & Shields", создана пользователем yayayat, 26 фев 2013.

  1. yayayat

    yayayat Нуб

    Задача - управлять роботом с двумя моторами через XBee с помощью Serial команд. XBee прошиты на AT команды. Нужно передать данные с двух потенциометров так чтобы на приемнике эти два числа отправились туда куда нужно. Я решил передавать данные в зашифрованном формате а на приемнике расшифровывать и отправлять на нужный мотор.
    Вот мои скетчи:
    Для передатчика:
    Для приёмника:
    Как вы поняли для левого мотора данные отправляются после пропускания через map(x,0,1023,0,127) , а к правым помимо map() прибавляется 128 . В таком виде данные должны идти на приемник и там сравниваться с 127 и 128, если меньше 128 значит данные для левого мотора, а если больше 127 то нужно вычесть 128 и отправить в правый мотор.

    Но когда ардуино поработает около 5 сек он внезапно теряет сигнал от XBee и лампочка rssi гаснет, затем ещё через 5 сек он вновь начинает работать . То есть появляется ощущение что дуни работают асинхронно, но если заменить задержки на передатчике на 4000 мс все работает как надо за исключением очень долгого получения данных на приемнике. Подскажите что исправить. Есть вопросы - спрашивайте:)
     
  2. yayayat

    yayayat Нуб

    Ух, оказалось проблема была не в скетче а в прошивке XBee, так что код рабочий.☺
     
  3. _Ev_

    _Ev_ Нерд

    А можешь поподробней рассказать в чем там дело, у меня приблизительно такая же проблема?
     
  4. yayayat

    yayayat Нуб

    А что именно описать подробнее, если можно опишите вашу проблему.
     
  5. _Ev_

    _Ev_ Нерд

    В чем заключалась проблема прошивки XBee?
    У меня правда не XBee, а APC220, но симптомы похожие: платформа ездит секунд 10-15, потом останавливается, мигает лампочками и едет дальше.
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Лампочками мигает - как при перезагрузке?
     
  7. _Ev_

    _Ev_ Нерд

    да
     
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Динамическую память используете в программе? Покажите код.
     
  9. _Ev_

    _Ev_ Нерд

    Код (Text):
    #include <Servo.h>
     
    int M1 = 4;
    int E1 = 5;
    int E2 = 6;
    int M2 = 7;
    int speed_Left, speed_Right, ServoPos;
    Servo myservo;
     
    void setup()
    {
      Serial1.begin(9600);
      myservo.attach(3);
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);
    }
     
    void loop()
    {
        while (Serial1.read() != '!');
        speed_Left = Serial1.parseInt();
        speed_Right = Serial1.parseInt();
        ServoPos=map(Serial1.parseInt(), -255, 255, 20,160);
        if (speed_Left > 50)                      //вперед
        {
          analogWrite (E1,abs(speed_Left));   //PWM Speed Control
          digitalWrite(M1,HIGH);
        }
        else if (speed_Left < -50)              //назад
        {
          analogWrite (E1,abs(speed_Left));   //PWM Speed Control
          digitalWrite(M1,LOW);
        }
        else
        {
          digitalWrite(E1,LOW);             //стоп
        }
        if (speed_Right > 50)                     //вперед
        {
          analogWrite (E2,abs(speed_Right));      //PWM Speed Control
          digitalWrite(M2,HIGH);
        }
        else if (speed_Right < -50)             //назад
        {
          analogWrite (E2,abs(speed_Right));      //PWM Speed Control
          digitalWrite(M2,LOW);
        }
        else
        {
          digitalWrite(E2,LOW);               //стоп
        }
        myservo.write(ServoPos);
    }
     
    Плата DFRobot Romeo v.2
    С компьютера передаю 3 числа через запятую. В начале строки '!'.
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор

    В коде ничего преступного на первый взгляд не видно.
    Попробуйте отладочный вывод повтыкать повсюду - узнаете, в каком месте и в какой момент программа слетает. Еще можно кусками комментировать программу и смотреть, изменится ли поведение - так найдете часть кода с глюком.