roboforum.ru

Технический форум по робототехнике.

Вопросы новичка.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Вопросы новичка.

Сообщение Scorpio » 16 авг 2018, 03:26

Молодец, что RTC освоил - хвалю :good:
dimamichev писал(а):Проверил опять на шашках, всё коннектится на "компот 5".

Тогда держи еще вариант. Как в том анекдоте "жаль, что цыплята сдохли, а то у меня еще один вариант был".
Нашел единственное отличие с шашками - отключил DTR. Вернул автопоиск. Если опять промах - то пиши в личку, а лучше приезжай сразу в Колумбию вместе со своим станком :)
Angel71 писал(а):контуры из каритнок

Это да, но самому сделать интереснее.
Пока получилось так на скорую руку:
PM1.jpg

Цифра в окошке - это количество линий, которое предстоит нарисовать. Интересно, сколько это займет по времени....
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение Dmitry__ » 16 авг 2018, 16:54

Scorpio писал(а):Не знаю кто такой TeamViewer

Да ладно, так не бывает :)
Это такая прога, позволяет видеть на своем мониторе экран подопечного, и менять все настройки ОС. Клиент будет просто смотреть на свой экран и удивляться как кто-то двигает курсор его мышки :)
Кста, как раз настройками com-порта, я чаше всего и занимаюсь по TeamViewer. Ибо проще самому настроить, чем обьяснять по телефону...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение Scorpio » 16 авг 2018, 17:08

До такой интимности отношений с ТС мы еще не дошли :)
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 16 авг 2018, 17:16

Присоединил рисование времени к Ардуняше, шаговики пока отставил. Скетч вырос, ресурс платы уменьшился.
Код: Выделить всёРазвернуть
///////////// МАНИПУЛЯТОР ДЛЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ скетч РИСОВАНИЕ АРДУНЯША //////////////////////////////
#include <Servo.h>
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS3231);
////////////////////////////////////////////////////////////////
#define l1 65  //длина первого плеча манипулятора в мм.
#define l2 65  //длина второго плеча манипулятора в мм.

#define Lmax 120//значение граничных координат
#define Qmax 140//значение граничных координат
#define Acor1 352//поправка на посадку качалки сервы 1
#define Acor2 220//поправка на посадку качалки сервы 2
#define Lmin 50//значение граничных координат
#define Dstep 1 //шаг при рисовании отрезка
#define Dmax 55//максимальной длины отрезок
//Для аварийной остановки в процессе рисования - не задействована
boolean StopFlag=false;
////////////////////////////////////////////////////////////////
float CurL=1000;
float CurQ=1000;
byte a03=125;
byte a3=a03;
int n=10;//переменная единицы временного интервала
String inputString;// строка данных
byte R=14;//единица размера сегмента цифры в мм   
///////////////////////////////////////////////////////////////
Servo servo1;
Servo servo2;
Servo servo3;


void setup() {
  time.begin();
//time.settime(0,43,14,15,8,18,3);  // 0  сек, 43 мин, 14 час, 15, АВГУСТА, 2018 года, СРЕДА
Serial.begin(9600);
servo1.attach(5);
servo2.attach(6);
servo3.attach(7);
servo1.write(100);
servo2.write(110);
servo3.write(a03);
}

void loop()
    {
       CheckSerial();//ЖДЁМ ПОСТУПЛЕНИЯ КОМАНДЫ НА РИСОВАНИЕ ЗАДАННОГО ОБЪЕКТА
   
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////ФУНКЦИИ ФУНКЦИИ ФУНКЦИИ ФУНКЦИИ ФУНКЦИИ ФУНКЦИИ////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//функция рисует окружность диаметром d
///////////////////////////////////////
void Okr(float d)
{
up_down_pen(true);//опустим перо
for (byte i=0;i<12;i++)
{
  DrawVector(PI*d/12,30*i);
  }
   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//функция рисует равносторонний треугольник со стороной d, наклонённый под углом a (больше 0, меньше 60 градусов)
///////////////////////////////////////
void Treug(int d, int a)
{
up_down_pen(true);//опустим перо
DrawVector(d,60-a); DrawVector(d,300-a); DrawVector(d,180-a);
   
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//функция рисует квадрат со стороной d, наклонённый под углом a (больше 0, меньше 90 градусов)
///////////////////////////////////////
void Kvad(int d, int a)
{
up_down_pen(true);//опустим перо
DrawVector(d,90+a); DrawVector(d,0+a); DrawVector(d,270+a); DrawVector(d,180+a);
 
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// фунуция рисует линию длины d в направлении a(в градусах)
//либо переставляет перо на конец вектора, при отрицательных d
void DrawVector(float d, float a)
{
  if (d > Dmax || a < 0 || a > 359)return; // не корректные параметры
  if (CurL == 1000 || CurQ == 1000)return; // не задана начальная точка
  if (d < 0) //задана перестановка пера
  {
    up_down_pen(false);//поднимем перо
    d = abs(d);
    GoToFinLine(d, a);
  } else //задано рисование линии
  {
    up_down_pen(true);//опустим перо
    int n = d / Dstep; //разобьем линию на n отрезков.
    for (int i = 1; i <= n; i++)GoToFinLine(Dstep, a);//нарисуем отрезки по очереди
    d -= n * Dstep;
    if (d > 0)GoToFinLine(d, a); //последнюю точку нарисуем отдельно для точности.
  }
}
// функция перемещает перо в конец заданного вектора
void GoToFinLine(float d,float a)
{
  if(StopFlag)return;
  //определим координаты конца вектора
    float l=CurL+d*sin(GradToRad(90+a-CurQ));
    float g=CurQ-(180*asin(d*cos(GradToRad(90+a-CurQ))/CurL))/PI;
   //переместим перо
    SetServosToPoint(l,g);
    delay(n*d);// выдержка времени для отработки механизма, зависящая от длины пути.
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Функция выставляет servo1 servo2, на точку с декартовыми координатами Х,Y
//X,Y расстоямие в мм
void SetServosToPointXY(float X, float Y)
{
  float l; float q;
  if(X==0){l=Y;q=90;}
  if (X>0){q=(180/PI)*asin((Y/X)/sqrt(1+((Y*Y)/(X*X))));l=Y/sin(PI*q/180);}
  if (X<0){q=180-((180/PI)*asin((Y/abs(X))/sqrt(1+((Y*Y)/(X*X)))));l=Y/sin(PI*(180-q)/180);}
  SetServosToPoint(l,q);

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Функция выставляет servo1 servo2, на точку с полярными координатами L,Q
//L расстоямие в мм от полюса,Q угол от полярной оси в градусах
void SetServosToPoint(float L, float Q)
{

  if(L>=Lmax ||L<=Lmin  ||Q>= Qmax ) return;
  float lp=65; //длина одного из равных плеч
  float B=acos(1.00-(L*L)/(2*lp*lp));
  float A=(PI*Q/180)+(B/2)-(PI/2);
// Serial.print("A= ");
  //Serial.println(180*A/PI);
// Serial.print("B= ");
  //Serial.println(180*B/PI);
  servo1.writeMicroseconds(RadianToMcs(A)+Acor1);
  servo2.writeMicroseconds(RadianToMcs(B)+Acor2);
  delay(5*n);
  CurL=L;
  CurQ=Q;

// Serial.print("Current point: L= ");
// Serial.print(L);
// Serial.print(", Q= ");
// Serial.println(Q);
}
//////////////////////////////////////////////////////////////////////
//функция перевода радиан в микросекунды для управления сервоприводами
int RadianToMcs(float rad)
{
  int grad=180*rad/PI;
  grad=map(grad, 0, 180, 500, 2500);
  return grad;
}
/////////////////////////////////////////////////////////////////////
float GradToRad(float grad)
{
  float rad=PI*grad/180;
  return rad; 
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////функция поднимания-опускания фломастера (значения аргумента false и true  соответственно)/////
void  up_down_pen(boolean  k)
{
  while (a3>85&&k==1)
  {servo3.write(a3);a3=a3-1;delay(n);}if(k== true ){a3=85;}
   while (a3<a03&&k==0)
  {servo3.write(a3);a3=a3+1;delay(n);}if (k==false){a3=a03;}
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////
//ФУНКЦИИ ПРИЁМА И ОБРАБОТКИ ДАННЫХ
void CheckSerial()
{
//////////////////////////////////////////////////////////////////////////////
  while (Serial.available())//считываем строку данных пока они поступают
  {
    char inChar = (char)Serial.read();
    if (inChar == '\n')     //если окончание строки
    {
      MakeCmd();//обрабатываем её данной функцией
      break;
    }
    else inputString += inChar;// иначе удлиняем строку на один символ
  }
}
/////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
void MakeCmd()
{
    int y=inputString.length();// присваиваем переменной у число символов в строке
    if (y<3||y>3)return;//если их меньше 3 или больше, выходим из функции
    String cmd=inputString;// передаём строку другой переменной
    inputString = "";//"обнуляем переменную"

if (cmd=="DOM"){delay(3000);RisunokDomik ();}//РИСУЙ ДОМИК
if (cmd=="KUB"){delay(3000); RisunokKubik ();}//РИСУЙ КУБИК 
if (cmd=="CVE"){delay(3000);RisunokCvetok();}//РИСУЙ ЦВЕТОК
if (cmd=="BUK"){delay(3000);RisunokBukvaA ();}//РИСУЙ БУКВУ А
if (cmd=="MAS"){delay(3000);RisunokMaschina ();}//РИСУЙ МАШИНУ
if (cmd=="LIC"){delay(3000);RisunokLico ();}//РИСУЙ ЛИЦО
if (cmd=="JUK"){delay(3000);RisunokJuk ();}//РИСУЙ ЖУКА
if (cmd=="LAB"){delay(3000);RisunokLabirint ();}//РИСУЙ ЛАБИРИНТ
if (cmd=="RKT"){delay(3000);RisunokRaketa ();}//РИСУЙ РАКЕТУ
if (cmd=="VRE"){delay(3000);Vremia ();}//РИСУЙ ТЕКУЩИЕ ЗНАЧЕНИЕ ВРЕМЕНИ
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////// РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ РИСУНКИ ///////////////
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   void RisunokDomik ()
   {
  SetServosToPoint (80,110);// стены, крыша
   DrawVector(20,90);DrawVector(10,180);DrawVector(14,45);DrawVector(20,0);DrawVector(14,315);DrawVector(10,180);
   DrawVector(20,270);DrawVector(20,180);DrawVector(20,90);DrawVector(22,0);
   up_down_pen (false);
   
   SetServosToPoint (85,103);//окошко
   DrawVector(7,90);DrawVector(7,0);DrawVector(7,270);DrawVector(7,180);
    up_down_pen (false);

    SetServosToPoint (107,100);//труба
   DrawVector(7,90);DrawVector(5,0);DrawVector(7,270);DrawVector(5,180);
    up_down_pen (false);

     SetServosToPoint (75,100);//дорожка
   DrawVector(40,0);
    up_down_pen (false);
    SetServosToPoint (70,103);
     DrawVector(40,0);
    up_down_pen (false);
   
    SetServosToPointXY(20,90);Okr(15);up_down_pen (false);//солнышко

     SetServosToPointXY(5,95); DrawVector(10,20);up_down_pen (false);SetServosToPointXY(5,85); DrawVector(10,45);up_down_pen (false);SetServosToPointXY(10,80); DrawVector(10,70);up_down_pen (false);
     SetServosToPointXY(5,105); DrawVector(10,330);up_down_pen (false);SetServosToPointXY(15,80); DrawVector(10,80);up_down_pen (false);SetServosToPointXY(20,80); DrawVector(10,80);up_down_pen (false);
     SetServosToPointXY(10,110); DrawVector(10,320);up_down_pen (false);SetServosToPointXY(20,107); DrawVector(10,120);up_down_pen (false);SetServosToPointXY(25,107); DrawVector(10,90);up_down_pen (false);

    for (int z=0;z<9;z++)// заборчик
     {
       SetServosToPointXY(-45+2*z,75); DrawVector(12,90);DrawVector(4,300);up_down_pen (false);
      }
        SetServosToPointXY(-45,75); DrawVector(20,0);up_down_pen (false);
      }
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   void RisunokKubik ()
   {
   SetServosToPointXY(-20,75);Kvad(20,0);up_down_pen (false);// сам кубик
  SetServosToPointXY(-20,95);DrawVector(15,45);up_down_pen (false);
  SetServosToPointXY(0,95);DrawVector(13,47);up_down_pen (false);
  SetServosToPointXY(0,75);DrawVector(15,45);up_down_pen (false);
  SetServosToPointXY(-12,106);DrawVector(23,0);DrawVector(22,270);up_down_pen (false);

  SetServosToPointXY(-11,85);up_down_pen (true);delay(2000);up_down_pen (false);//точки на гранях
   SetServosToPointXY(8,93);up_down_pen (true);delay(2000);up_down_pen (false);
  SetServosToPointXY(2,96);up_down_pen (true);delay(2000);up_down_pen (false);
  SetServosToPointXY(3,81);up_down_pen (true);delay(2000);up_down_pen (false);
  SetServosToPointXY(9,102);up_down_pen (true);delay(2000);up_down_pen (false);
  SetServosToPointXY(10,88);up_down_pen (true);delay(2000);up_down_pen (false);
   SetServosToPointXY(-7,102);up_down_pen (true);delay(2000);up_down_pen (false);
  SetServosToPointXY(-11,104);up_down_pen (true);delay(2000);up_down_pen (false);
  SetServosToPointXY(-1,98);up_down_pen (true);delay(2000);up_down_pen (false);

  SetServosToPointXY(-23,85);DrawVector(25,215);DrawVector(45,0);DrawVector(25,45);DrawVector(8,180);up_down_pen (false);//последний штрих-контур 
   }
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   void RisunokCvetok ()
   {
for(byte i=0;i<12;i++)//цветок
{
  SetServosToPointXY(5,110); DrawVector(10,i*30);up_down_pen(false);
}
  SetServosToPointXY(5,110);DrawVector(20,248);DrawVector(20,270);up_down_pen(false);//стебель,лист,горшок
  SetServosToPointXY(-4,91);DrawVector(15,135);DrawVector(13,215);DrawVector(11,20);DrawVector(15,320);up_down_pen(false);
  SetServosToPointXY(-13,73);DrawVector(20,0);DrawVector(10,225);DrawVector(7,180);DrawVector(10,135);up_down_pen(false);
  SetServosToPointXY(-8,57);Kvad(10,0);up_down_pen(false);
   }
   //////////////////////////////////////////////////////////////////////////////////////////////////////////////
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////
   void RisunokBukvaA ()
   {
     SetServosToPointXY(-40,65);DrawVector(50,60);DrawVector(10,0);DrawVector(50,300);DrawVector(10,180);// буква А большая
    DrawVector(10,120);DrawVector(30,180);DrawVector(10,240);DrawVector(10,180);up_down_pen(false);
    SetServosToPointXY(-20,83);Treug(20,0); up_down_pen(false);
    ///////////////////////////////////////////////////////////////////////
    SetServosToPointXY(8,90);DrawVector(25,60);DrawVector(5,0);DrawVector(25,300);DrawVector(5,180);//буква А маленькая
    DrawVector(5,120);DrawVector(15,180);DrawVector(5,240);DrawVector(7,180);up_down_pen(false);
    SetServosToPointXY(18,98);Treug(10,0); up_down_pen(false);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SetServosToPointXY(15,85);DrawVector(25,0);up_down_pen(false);// две черты
    SetServosToPointXY(20,80);DrawVector(25,0);up_down_pen(false);
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void RisunokMaschina ()
   {
     SetServosToPointXY(-30,65);Okr(15);up_down_pen(false);// колёса
     SetServosToPointXY(5,65);Okr(15);up_down_pen(false);
     SetServosToPointXY(-30,73);up_down_pen(true);delay(2000);up_down_pen(false);
     SetServosToPointXY(8,73);up_down_pen(true);delay(2000);up_down_pen(false);
     ///////////////////////////////////////////////////////
     SetServosToPointXY(-20,70);DrawVector(20,0);up_down_pen(false);//кузов
     SetServosToPointXY(-20,100);DrawVector(30,0);DrawVector(20,300);DrawVector(10,270);DrawVector(5,180);up_down_pen(false);
     SetServosToPointXY(-20,100);DrawVector(15,240);DrawVector(20,210);DrawVector(5,270);DrawVector(10,0);up_down_pen(false);
     ////////////////////////////////////////////////////////
      SetServosToPointXY(-18,87);Kvad(10,0);up_down_pen(false);// окна салона
      SetServosToPointXY(-5,88);Kvad(10,0);up_down_pen(false);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
     SetServosToPointXY(-25,84);DrawVector(33,0);up_down_pen(false);// две черты
     SetServosToPointXY(-25,80);DrawVector(25,0);up_down_pen(false);
     /////////////////////////////////////////////////////////
     SetServosToPointXY(-40,60);DrawVector(10,10);DrawVector(10,340);DrawVector(10,10);DrawVector(10,340);DrawVector(10,15);DrawVector(10,0);up_down_pen(false);//дорога
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void RisunokLico ()
   {
     SetServosToPointXY(-15,80);Okr(15);up_down_pen(false);//глаза
     SetServosToPointXY(5,80);Okr(15);up_down_pen(false);
     SetServosToPointXY(-15,87);up_down_pen(true);delay(2000);up_down_pen(false);
     SetServosToPointXY(5,87);up_down_pen(true);delay(2000);up_down_pen(false);
     SetServosToPointXY(-5,70);Okr(10);up_down_pen(false);//нос
     SetServosToPointXY(-15,65);DrawVector(13,345);DrawVector(13,25);up_down_pen(false);//рот
     for(byte i=0;i<4;i++)
     {
     SetServosToPointXY(-25,105+3*i);DrawVector(5,45);DrawVector(5,315);DrawVector(5,45);DrawVector(5,315);//причёска
     DrawVector(5,45);DrawVector(5,315);DrawVector(5,45);DrawVector(5,315);
     DrawVector(5,45);DrawVector(5,315);DrawVector(5,45);DrawVector(5,315);up_down_pen(false);//причёска
     }
     SetServosToPointXY(15,95);DrawVector(10,60);DrawVector(10,260);up_down_pen(false);//уши
     SetServosToPointXY(-19,95);DrawVector(10,120);DrawVector(10,280);up_down_pen(false);
   
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RisunokJuk ()
{
     SetServosToPointXY(-5,70);Okr(10);up_down_pen(false);//глаза
     SetServosToPointXY(5,70);Okr(10);up_down_pen(false);
     SetServosToPointXY(-5,75);up_down_pen(true);delay(2000);up_down_pen(false);
     SetServosToPointXY(5,75);up_down_pen(true);delay(2000);up_down_pen(false);
     ////////////////////////////////////////////////
     SetServosToPointXY(-10,95);Treug(20,59);up_down_pen(false);//тело
      SetServosToPointXY(-10,95);Treug(20,0);up_down_pen(false);
    /////////////////////////////////////////////////
    SetServosToPointXY(-12,95);DrawVector(10,135);DrawVector(10,225);up_down_pen(false);//ноги-лапы
    SetServosToPointXY(12,95);DrawVector(10,45);DrawVector(10,315);up_down_pen(false);
     SetServosToPointXY(-12,88);DrawVector(10,135);DrawVector(10,225);up_down_pen(false);//ноги-лапы
    SetServosToPointXY(12,88);DrawVector(10,45);DrawVector(10,315);up_down_pen(false);
     SetServosToPointXY(-12,81);DrawVector(10,135);DrawVector(10,225);up_down_pen(false);//ноги-лапы
    SetServosToPointXY(12,81);DrawVector(10,45);DrawVector(10,315);up_down_pen(false);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RisunokLabirint ()
{
  SetServosToPointXY(-35,105);up_down_pen(true);delay(2000);
                              DrawVector(45,270);DrawVector(40,0);DrawVector(35,90);DrawVector(30,180);//лабиринт спираль
                              DrawVector(25,270);DrawVector(20,0);DrawVector(15,90);DrawVector(10,180);
                              DrawVector(5,270);DrawVector(5,0);DrawVector(5,270);DrawVector(10,180);
                              DrawVector(15,90);DrawVector(20,0);DrawVector(25,270);DrawVector(30,180);
                              DrawVector(35,90);DrawVector(40,0);DrawVector(45,270);delay(2000);up_down_pen(false);
  ////////////////////////////////////////////////////////////
  SetServosToPointXY(-30,102);DrawVector(10,45);DrawVector(10,315);up_down_pen(false);//человечек
  SetServosToPointXY(-30,107);DrawVector(10,45);DrawVector(10,315);up_down_pen(false);
  SetServosToPointXY(-25,107);DrawVector(9,90);Kvad(4,45);up_down_pen(false);                           
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void RisunokRaketa ()
  {
    SetServosToPointXY(-35,80);Treug(20,30);up_down_pen(false);// корпус
    SetServosToPointXY(-20,90); DrawVector(35,0);DrawVector(18,270);DrawVector(35,180);up_down_pen(false);
    SetServosToPointXY(10,82);Treug(20,30);up_down_pen(false);
    ////////////////////////////////////////////////////
    SetServosToPointXY(32,82); DrawVector(15,0);up_down_pen(false);//выхлоп
    SetServosToPointXY(30,87); DrawVector(12,0);up_down_pen(false);
    SetServosToPointXY(30,78); DrawVector(12,0);up_down_pen(false);
    ///////////////////////////////////////////////////
    SetServosToPointXY(-10,75);Okr(14);up_down_pen(false);//косманавт
    SetServosToPointXY(-11,79); DrawVector(5,0);up_down_pen(false);
    SetServosToPointXY(-11,83);up_down_pen(true);delay(1000); up_down_pen(false);
    SetServosToPointXY(-6,83);up_down_pen(true);delay(1000); up_down_pen(false);
    //////////////////////////////////////////////////////
    SetServosToPointXY(-35,100);DrawVector(10,80);DrawVector(10,280);DrawVector(10,350);DrawVector(10,190);//звёзды
               DrawVector(10,260);DrawVector(10,100);DrawVector(10,170);DrawVector(12,10);up_down_pen(false);
    SetServosToPointXY(-40,70);DrawVector(8,80);DrawVector(8,280);DrawVector(8,350);DrawVector(8,190);
               DrawVector(8,260);DrawVector(8,100);DrawVector(8,170);DrawVector(10,10);up_down_pen(false);         
    }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Vremia ()
{
  String cmd1=time.gettime("H"); int K =cmd1.substring(0,1).toInt();SetServosToPointXY(-40,75);Cifra (K);K =cmd1.substring(1).toInt();SetServosToPointXY(-21,75);Cifra (K);//рисуем количество часов
  SetServosToPointXY(-2,75);Dvoetoschie();//рисуем двоеточие
  cmd1=time.gettime("i"); K =cmd1.substring(0,1).toInt();SetServosToPointXY(2,75);Cifra (K);K =cmd1.substring(1).toInt();SetServosToPointXY(21,75);Cifra (K);//рисуем количество минут
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Cifra (int kk)
{

switch (kk)
    {
      case 0:
     DrawVector(2*R,90); DrawVector(R,0); DrawVector(2*R,270);DrawVector(R,180);
      break;
      case 1:
   DrawVector(-R,90); DrawVector(1.4*R,45);DrawVector(2*R,270);
      break;
      case 2:
      DrawVector(-2*R,90);DrawVector(R,0);DrawVector(R,270);DrawVector(1.4*R,225);DrawVector(R,0);
      break;
      case 3:
      DrawVector(1.4*R,45);DrawVector(R,180);DrawVector(1.4*R,45);DrawVector(R,180);
      break;
      case 4:
     DrawVector(-2*R,90); DrawVector(R,270);DrawVector(R,0);DrawVector(R,90);
      DrawVector(-R,270);DrawVector(R,270);
      break;
      case 5:
      DrawVector(R,0);DrawVector(R,90);DrawVector(R,180);DrawVector(R,90);DrawVector(R,0);
      break;
      case 6:
     DrawVector(-2*R,90);DrawVector(-R,0); DrawVector(1.4*R,225);DrawVector(R,270);
      DrawVector(R,0); DrawVector(R,90); DrawVector(R,180);
      break;
      case 7:
      DrawVector(-2*R,90); DrawVector(R,0);DrawVector(1.4*R,225);DrawVector(R,270);
      break;
      case 8:
      DrawVector(2*R,90);DrawVector(R,0);DrawVector(2*R,270);DrawVector(R,180);
     DrawVector(-R,90); DrawVector(R,0);
      break;
      case 9:
      DrawVector(1.4*R,45);DrawVector(R,90);DrawVector(R,180);DrawVector(R,270);DrawVector(R,0);
      break;
    }
    up_down_pen(false);   
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Dvoetoschie ()
    {
     DrawVector(-R/2,90);DrawVector(R/2,90); 
     DrawVector(-R/2,90); DrawVector(R/2,90);
     up_down_pen(false);
    }

С "компотами" глухо, подумалось о таком простом варианте для Ардуняши - картинка цифро-буквенная простая перед камерой, наверняка есть приложение преобразующее в текст-цифры, затем отсылка (если в app inventore есть инструментарий) на плату и рисование по фразе "повтори увиденное". Вообще конечно у этой предыдущей конструкции больше "интересности". Идея сама интересная получилась - не станки с ПО, а робот, хоть как то "взаимодействующий с человеком".

Добавлено спустя 6 минут 53 секунды:
Прозевал, пока писал, ваши сообщения. Не знаю, я не против, но сама программка по поведению отличается от шашек, можно конечно попробовать на другом ноутбуке, с другой "виндой", на другой плате (которая работает на СОМ3), но ... не знаю.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 16 авг 2018, 17:21

Scorpio писал(а):До такой интимности отношений с ТС мы еще не дошли :)

Уже пора :D
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение Scorpio » 16 авг 2018, 18:24

dimamichev писал(а):шаговики пока отставил.

А ты точно последнюю версию V1.5 скачал по ссылке? Проверь пожалуйста. Я ссылку менял в какойто момент твоим утром. Уже из принципа хочу понять почему не получается. Послезавтра уезжаю в путешествие и будет уже не до программирования.

Добавлено спустя 6 минут 22 секунды:
Dmitry__ писал(а):Уже пора :D

И что я там увижу? Что не коннектится я верю. Разве что ставить на том компе VS и сразу правиьь исходник. Но это гемор.
А что у тебя там висит на COM3, если не секрет?

Добавлено спустя 1 минуту 9 секунд:
Что бы это ни было - выдерни нафиг и попробуй без него!
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 16 авг 2018, 18:59

Scorpio писал(а):А что у тебя там висит на COM3, если не секрет?
Что бы это ни было - выдерни нафиг и попробуй без него!

Так физически разъём один. Вставил одну Ардуину, в "иде" автоматически СОМ3, другую СОМ5. Если не переставляется, сам переставляю в настройках. В это же гнездо ставлю и интернет-"вай фай модуль". Версию гляну, вроде всего 4 было.
Путешествие это здорово. Я домосед, иногда жена даже на работу выгнать не может :D
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 16 авг 2018, 21:17

Если у тебя вставлена только одна дуина и она определяется как СОМ5., то откуда тогда в системе берется СОМ3? Проверь в диспетчере устройств при вставленном станке. Версию моей проги проверил,в заголовке окошка? Четвертая работать не будет, скачай 5ю по той же ссылке
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 16 авг 2018, 21:26

Да, с пятой версией та же песня, СОМ 3 определяется даже если все разъёмы пусты. В шашках такого не было.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 16 авг 2018, 21:36

Scorpio писал(а):И что я там увижу? Что не коннектится я верю.

Ты там увидишь кучу занятых портов. А если загрузить вЕнды в режиме safe mode, то еще увидишь кучу драйверов на эти порты в виде всяких модемов, которые надо удалить и жизнь сразу станет лучче. Не понимаю, почему это не может сделать сами знаете кто :)
Хотя о чем я говорю? Когда по TeamViewer разбираюсь с проблемой за 5 минут (люди мучаются по неделе), а потом задаю им вопрос - почему так не сделали сами, отвечают - ХЗ, после тебя, все просто. Правда потом умудряются это забыть и приходится опять коннектится TeamViewer-ом.
Похоже, кто-то был прав, давая мне ссылку на вики: "95% населения — идиоты"
Хотя я так не считаю до сих пор :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 16 авг 2018, 21:37

Во...как
Вложения
20180808_175624 — копия.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 16 авг 2018, 21:49

Чудеса да и только :pardon:
Хочешь сказать что станок (со скетчем станка внутри) коннектится с шашечной прогой, но не конектится с другой, при том что модули связи в обоих прогах одинаковые!? :o

Добавлено спустя 3 минуты 42 секунды:
На картинке все порты не активные. Не воткнул? А СОМ3 вообще отсутствует

Добавлено спустя 7 минут 49 секунд:
Для того, чтобы кнопочка подключения загорелать зеленым, прога должна получить от робота ответ "RBT!" на запрос "RBT?" в течении 2х секунд. Иначе никак! Т.е. вообще никак! Вот такой, понимаешь, пердимонокль получается.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 16 авг 2018, 22:04

По картинке, в двух физически рабочих разъёмах находится мышь и модуль интернета. Шашки скетч вновь заливал, но не подключал манипулятор, а только плату, так же и со станком. Вот этот скетч.

Добавлено спустя 2 минуты 5 секунд:
Код: Выделить всёРазвернуть
///////////// СТАНОК ДЛЯ РИСОВАНИЯ //////////////////////////////
#include <Servo.h>

#define motor_Y_f1 8
#define motor_Y_f2 9
#define motor_Y_f3 10
#define motor_Y_f4 11

#define motor_X_f1 4
#define motor_X_f2 5
#define motor_X_f3 6
#define motor_X_f4 7
String inputString = ""; 
byte a0=140;byte a=a0;// угол исходного положения пера - поднято
int n=10;//переменная единицы временного интервала
int i=0;// счётчик
int i1=0;// счётчик
float X=0;float Y=0;//переменные учёта положения пера относительно начала координат

byte tablY[16]={0,1,1,1,
                1,1,0,1,
                1,0,1,1,
                1,1,1,0};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)
byte tablX[16]={1,0,0,0,
                0,1,0,0,
                0,0,1,0,
                0,0,0,1};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (униполярный)
                           

Servo servo1;



void setup() {
Serial.begin(19200);
servo1.attach(12);
servo1.write(a0);delay(10*n);servo1.write(a0-5);//начальный подъём пера
pinMode(motor_Y_f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(motor_Y_f2, OUTPUT);
pinMode(motor_Y_f3, OUTPUT);
pinMode(motor_Y_f4, OUTPUT);
digitalWrite(motor_Y_f1, HIGH); digitalWrite(motor_Y_f2, HIGH); digitalWrite(motor_Y_f3, HIGH); digitalWrite(motor_Y_f4, HIGH);// исходное состояние  - обмотки обесточены 
pinMode(motor_X_f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(motor_X_f2, OUTPUT);
pinMode(motor_X_f3, OUTPUT);
pinMode(motor_X_f4, OUTPUT);
digitalWrite(motor_X_f1, LOW); digitalWrite(motor_X_f2, LOW); digitalWrite(motor_X_f3, LOW); digitalWrite(motor_X_f4, LOW);// исходное состояние  - обмотки обесточены 
}

void loop()
    {
     CheckSerial(); 
    }
/////////////////////////////////////////////////////////////
//////// функция постановки пера в точку с координатами 1 четверти для рабочего поля
////////////////////////////////////////////////////////////
void  Toschka (int x, int y)
{
  Otrezok((x-X),(y-Y));
  }   
/////////////////////////////////////////////////////////////
////// функция рисования отрезка длиной d под углом a
////////////////////////////////////////////////////////////
void Vektor(float d,int a)
{
  float x=d*cos(PI*a/180); float y=d*sin(PI*a/180);
   Otrezok(x,y);
  }
////////////////////////////////////////////////////////////////
////функция рисования отрезка по конечным координатам x и y
////////////////////////////////////////////////////////////////
void Otrezok(float x, float y)
{
  int nx;
  int ny=10;//принимаем как постоянную для задания скорости
  if (x!=0&&y!=0){nx=ny*2.35*abs(y)/abs(x);if (nx<3){nx=5;}}else {nx=50;}// вычисляем вторую постоянную для отрезка с учётом крайних недопустимых значений - 0 и бесконечность
  long tx=millis();long ty=millis();
  Y=Y+y;//текущий учёт положения пера относительно начала отсчёта
  y=4.7*y;//переводной множитель из миллиметров в число шагов двигателя
  X=X+x;//текущий учёт положения пера относительно начала отсчёта
  x=2*x;//переводной множитель из миллиметров в число шагов двигателя
  int j1=0;int k1;if (y>=0){k1=1;}else {k1=-1;}
  int j2=0;int k2;if (x>=0){k2=1;}else {k2=-1;}
  while ((j1<=(int)abs(y)-1)||(j2<=(int)abs(x)-1))
  {
  if(j1!=(int)abs(y)&&(millis()-ty>ny))//условие совершения шага
  {ty=millis();
  if(i<0){i=12;}if(i>12){i=0;}////условия зацикливания тактов по кругу
  digitalWrite(motor_Y_f1, tablY[i]);digitalWrite(motor_Y_f2, tablY[i+1]);digitalWrite(motor_Y_f3, tablY[i+2]);digitalWrite(motor_Y_f4, tablY[i+3]);
  i=i+4*k1;j1=j1+1;//условия перехода на следующий такт
  }
  if(j2!=(int)abs(x)&&(millis()-tx>nx))//условие совершения шага
  {tx=millis();
  if(i1<0){i1=12;}if(i1>12){i1=0;}//условия зацикливания тактов по кругу
  digitalWrite(motor_X_f1, tablX[i1]);digitalWrite(motor_X_f2, tablX[i1+1]);digitalWrite(motor_X_f3, tablX[i1+2]);digitalWrite(motor_X_f4, tablX[i1+3]);
  i1=i1+4*k2;j2=j2+1;//условия перехода на следующий такт
  } 
  }
  digitalWrite(motor_Y_f1, HIGH); digitalWrite(motor_Y_f2, HIGH); digitalWrite(motor_Y_f3, HIGH); digitalWrite(motor_Y_f4, HIGH);// исходное состояние  - обмотки обесточены
  digitalWrite(motor_X_f1, LOW); digitalWrite(motor_X_f2, LOW); digitalWrite(motor_X_f3, LOW); digitalWrite(motor_X_f4, LOW);// исходное состояние  - обмотки обесточены     
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////функция возврата пера в исходное положение на начало отсчёта
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void VozvratPera ()
{
  up_down_pen(false);
  Otrezok (-X,-Y);
  X=0;Y=0;

  }
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////функция поднимания-опускания пера (значения аргумента false и true  соответственно)/////
void  up_down_pen(boolean  k)
{
  while (a>87&&k==1)
  {servo1.write(a);a=a-1;delay(n);}if(k== true ){a=87;}
   while (a<a0&&k==0)
  {servo1.write(a);a=a+1;delay(n);}if (k==false){a=a0;delay(10*n);servo1.write(a0-5);}
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////
  void CheckSerial()
{
//////////////////////////////////////////////////////////////////////////////
  while (Serial.available())//считываем строку данных пока они поступают
  {
    char inChar = (char)Serial.read();
    if (inChar == '\n')     //если окончание строки
    {
      MakeCmd();//обрабатываем её данной функцией
      break;
    }
    else inputString += inChar;// иначе удлиняем строку на один символ
  }
}
/////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
void MakeCmd()
{
    int s=inputString.length();// присваиваем переменной у число символов в строке
    if (s<3||s>6)return;//если их меньше 3 или больше 6, выходим из функции
    String cmd=inputString;// передаём строку другой переменной
    inputString = "";//"обнуляем переменную"
/////////////////////////////////////////   
if (cmd.startsWith("RBT?")){SendMail("RBT!");return;}
if (cmd=="PDWN"){up_down_pen(true);fin();return;}//
if (cmd=="PUP"){up_down_pen(false);fin();return;}//   
  int k=cmd.indexOf(',');
  if(k>0)//получены координаты точки
  {
    int x=cmd.substring(0,k).toInt();
    int y=cmd.substring(++k).toInt();
    x=constrain(x, 0, 75);
    y=constrain(y, 0, 35);
    Toschka (-x,y);
    fin();
  }
}
void fin()
{
  delay(50);
  Serial.println("FIN");
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
void SendMail(String mail)                  // ОТПРАВКА СООБЩЕНИЙ
{
  Serial.println(mail);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////


Добавлено спустя 11 минут 38 секунд:
В том то и отличие в поведении программ. Кнопочка загорается зелёным СОМ3 в любом варианте отключения-подключения в гнездо USB в этой программе.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 16 авг 2018, 22:28

Попробуй шашки и новою прогу с обоими платами. Скетч все равно какой, чтобы в нем была строка if (cmd.startsWith("RBT?")){SendMail("RBT!");return;} и возможность возвращать переданные команды. В обоих прогах есть возможность посылать что нибудь на компорт и смотреть что пришло в ответ
Надо всеже определиться подробнее в чем отличие. На моем компе обе проги работают как положено со всеми типами дунь, что есть под рукой
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение Scorpio » 17 авг 2018, 06:58

dimamichev писал(а):если в app inventore есть инструментарий

В инвенторе не получится к сожалению.
dimamichev писал(а): Идея сама интересная получилась - не станки с ПО, а робот, хоть как то "взаимодействующий с человеком".

Точно. Станков много, а Ардуняша твоя почти уникальна. Только надо сделать сам манипулятор по прикольнее. Распечатать что-то типа маленькой руки, держащей фломастер Я до сих пор задумываюсь, возможно ли получить каллиграфический почерк с такой конструкцией. Понятно, что резистор обратной связи не дает идеальное позиционирование. Но, допустим, что дает. По идее, чтобы нарисовать ровную прямую или кружок мы должны рассчитывать функциональную зависимость изменения углов для обоих серв по времени и в зависимости от текущего положения манипулятора. Не тривиальная задача, но подозреваю, что кем-то она уже решена. Наш метод аппроксимации фигур коротенькими отрезками, конечно не может сравниться по точности с декартовой системой на шаговиках.

Добавлено спустя 2 часа 6 минут 37 секунд:
Обновлю ссылки на V1.4 (DTR ON), V1.5 (DTR OFF)Последний,как мне кажется, от шашек не отличается в смысле подключения. Пробуй на разных компах с разными дунями, если есть желание. У меня новых идей по поиску ошибки нет. Никогда особых проблем со связью не имел.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Пред.След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron