• Специально для посетителей нашего сайта действует скидка 5% в интернет-магазине Амперка
    Кодовое слово для скидки: megavolt
    Пожалуйста, не загружайте ресурсы большого объема. Загружайте такие ресурсы в облачные хранилища, указывая ссылку на скачивание.

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

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

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

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

Новобранец!
Друг проекта
#2
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++;
       }
    }
  }
}
 
Последнее редактирование:

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

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

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

Новобранец!
Друг проекта
#5
немного доработал скетч в ардуино
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++;
        }
      }
    }
  }
}
 

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

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

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

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

NikitOS

Иномирянин
Администратор
Модератор
Девелопер
#9
Столкнулся с новой проблемкой ... ненадежный контакт на шине i2c но это уже проблеммка seeeduino mega
Купите нормальную Arduino;)
Кстати у китайцев брал копию arduino mega, вполне хорошее качество за 680 рублей вместе с доставкой:)
 
Вверх