Настройка Xbee

Тема в разделе "Arduino & Shields", создана пользователем Makhonin, 8 янв 2013.

  1. Makhonin

    Makhonin Гик

    Доброго времени суток! Давно мучаюсь с Xbee S2 передатчиками. Решил тут поменять прошивки и заодно, может быть, как-то более тонко настроить. Решил поискать примеры в интернете. Нашел вот этот: https://www.loveelectronics.co.uk/Tutorials/7/xbee-tutorial-how-to-set-up-your-xbees
    Тут прошивают через X-CTU, но используют не ZNET протокол, как на Вики, а родной ZEGBEE. Можно ли такие, как в этом магазине (не PRO-шки, а обычные), прошивать на ZEGBEE прошивки? И будет ли какой-нибудь от этого выигрыш?
    Вообще, проблема такая: Есть машинка, на ней XBee. Второй XBee к компу, на компе програмка на C#. При медленном управлении, то есть команды посылаются редко, машинка более менее слушается, но стоит чуть ускориться в отправке команд, то машинка зависает на последней команде и последующая команда доходит с заметным опозданием. Думал, что косяк в коде какой-нибудь, и даже написал второй, который тупо считывает и тут же выполняет команду. Ничего не изменилось. Может быть нужно что-то специально указывать в настройках COM порта в проекте C#?
    Вот код упрощенной программы:
    Код (Text):
    #include <AFMotor.h>
    AF_DCMotor lbort(1);
    AF_DCMotor rbort(3);
    int dir = 0;
     
    int mode = 1;
     
    int spd = 170;
     
    void move(int direct) {
      switch(direct) {
        case 0: //Стоп
          lbort.run(RELEASE);
          rbort.run(RELEASE);
          break;
        case 1: //Вперед
          lbort.run(FORWARD);
          rbort.run(FORWARD);
          break;
        case 2: //Назад
          lbort.run(BACKWARD);
          rbort.run(BACKWARD);
          break;
        case 3: //Влево
          lbort.run(BACKWARD);
          rbort.run(FORWARD);
          break;
        case 4: //Вправо
          lbort.run(FORWARD);
          rbort.run(BACKWARD);
          break;   
      }
    }
     
    void setspeed(int spd) {
      if (spd > -1) {
        lbort.setSpeed(spd);
        rbort.setSpeed(spd);
      }
    }
     
    void beep(char signal){
      analogWrite(10, signal);                 
      delay(50);       
      analogWrite(10, 0);  
      delay(50);       
    }
     
    void receivedata() {
      char uid[0];
      char value[10];
      char addr[0];
      if (Serial.available()) {
        uid[0] = Serial.read();
        int i = 0;
        delay(50);
        int a = 0;
        while (Serial.available() && i < 5) {
          if ((a == 0) && (uid[0] == 'e')) {
            addr[0] = Serial.read();
            a = 1;
          }
          value[i++] = Serial.read();
        }
        switch (uid[0]) {
          case 'd': //направление движения
            if ((mode == 1) || (mode == 2)) {
              switch (value[0]) {
                case '0': move(0); break;
                case '1':
                  move(1);
              break;
                case '2':
                  move(2);
              break;
                case '3':
                  move(3);
              break;
                case '4':
                  move(4);
              break;
              }
            }
            break;
          case 'v':
            if (mode == 1) {
                spd = atoi(value);
                setspeed(spd);
            }
            break;
          default:
        beep(220);
            break;
        }
        uid[0] =*"";
        for(int i=0;i<11;i++) value[0] =*"";
        Serial.flush();
      }
    }
     
    void setup() {
      setspeed(spd);
      move(0);
      Serial.begin(19200);
      delay(50);
      //ready
    }
     
    void loop() {
      receivedata();
      delay(100);
    }
     
  2. Dmitriy Kunin

    Dmitriy Kunin Гик

    После неродной прошивки, очень радуешься, если закорачивание ресета помогло и модуль снова откликается и даёт себя прошить нормальной прошивкой.
     
  3. Makhonin

    Makhonin Гик

    У меня и с родной ZNET прошивкой такое бывает, причем часто. Приходится колдовать с восстановлением прошивки. Зависает все обычно на этапе перезагрузки модуля
     
  4. Makhonin

    Makhonin Гик

    Функция receivedata() имеет право быть? Или чушь? Есть еще XBee.h какая-то. Не будет ли через нее лучше?