• Guest, Lamer Tech will close soon and products will be moved to TeslaCloud. Further product support and new products will be there.

Multi servo shield от амперки

Константин Бачар

Новобранец!
Приветствую всех .
Прикупил себе выше означеный шилд и сталкнулся с проблемкой пытаюсь через UART ардуины передавать команды вида 0xFF;angle;0xFE .
0xFF это начало команды 0xFE конец команды посреди это углы поворота серв покачто тестирую с одной сервой. при передаче угла серва поворачивается на угол указаный в команде но потом почемуто поворачивается обратно в 0 и опять на угол потом в 0 и так бесконечно ... не могу пока разобраться почему.
 

Константин Бачар

Новобранец!
C++:
#include <Wire.h>
#include <Multiservo.h>

#define COMAND_VECTOR_SIZE 10
Multiservo test;
unsigned int angle = 100;
byte boof[COMAND_VECTOR_SIZE];
byte offset = 0;


void setup() {
    Wire.begin();
    // put your setup code here, to run once:
    Serial.begin(115200);
    Serial1.begin(115200);

    char tmp[100]="test program started...";
    Serial.println(tmp);
    test.attach(0);
}

void loop() {
    // put your main code here, to run repeatedly:
    byte c = 0;
    while(Serial1.available())
    {
        c = Serial1.read();
        if(c == 255)
       {
           offset = 0;
           memset(boof,0x00,COMAND_VECTOR_SIZE);
       }
       else if(c == 254)
      {
          if(angle != boof[0])
         {
             angle = boof[0];
             test.write(angle);
         }

         char str[100];
         sprintf(str,"[%d]",angle);
         Serial.println(str);
         Serial1.println(str);
     }
     else
    {
        if(offset < COMAND_VECTOR_SIZE)
       {
           boof[offset] = c;
           offset++;
       }
    }
  }
}
 
Last edited:

Константин Бачар

Новобранец!
ну похоже я сам разобрался :) надо было у UART0 повысить скорость сразу и буфер сбросить тоже сразу а то и получался полный хаос
 

Константин Бачар

Новобранец!
немного доработал скетч в ардуино
C++:
#include <Wire.h>
#include <Multiservo.h>

#define COMAND_VECTOR_SIZE 12
Multiservo servo;
byte boof[COMAND_VECTOR_SIZE];
byte offset = 0;
bool rbegin = false;


void setup() {
   Wire.begin();
  
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial1.begin(115200);

char tmp[100]="test program started...";
  Serial.println(tmp);

    servo.attach(0);
}

void loop() {
  // put your main code here, to run repeatedly:
  byte c = 0; 
  while(Serial1.available())
  {
    c = Serial1.read();
    if(c == 255 && !rbegin)
    {
      rbegin = true;
      offset = 0;
      memset(boof,0x00,COMAND_VECTOR_SIZE);
    }
    else if(c == 254 && rbegin)
    {
      rbegin = false;
      Serial.print("[beg]");
      Serial1.print("[beg]");

      servo.write(boof[0]);
      
      char str[100];
      for(int i = 0; i < COMAND_VECTOR_SIZE;i++)
      {
        sprintf(str,"[%d]",boof[i]);
        Serial.print(str);
        Serial1.print(str);
      }

      Serial.println("[end]");
      Serial1.println("[end]");
    }
    else
    {
      if(rbegin)
      {
        if(offset < COMAND_VECTOR_SIZE)
        {
          boof[offset] = c;
          offset++;
        }
      }
    }
  }
}
 

Константин Бачар

Новобранец!
тепер в мониторе порта можно увидеть все передаваемые значения вектора команды но используется только один байт потому-что серв пока только одна блок питания для тестов никак не вышлют в МастерКит
 

Константин Бачар

Новобранец!
основная часть компьютера робота это banana-pi BPI-M64 покачто для тестов я запускаю на ней тестовую программу которая работает как TCP сервер и принимает одно соединение и передает приходящие из него команды в UART подключенный к ардуине
 

Константин Бачар

Новобранец!
Третья часть робота это программа на с++ под visual studio 2017 которая считывает положение джойстика и передает его роботу через TCP соединение
 

NikitOS

♂ Dungeon Master ♂
Administrator
Moderator
Developer
Wiki Editor
Столкнулся с новой проблемкой ... ненадежный контакт на шине i2c но это уже проблеммка seeeduino mega
Купите нормальную Arduino;)
Кстати у китайцев брал копию arduino mega, вполне хорошее качество за 680 рублей вместе с доставкой:)
 
Top Bottom