roboforum.ru

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

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

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

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

Сообщение dimamichev » 23 июн 2018, 22:49

Это такое упрощение (для меня в писании кода)- фломастер при любой цифре ходит по одному и тому же маршруту состоящему из 7 отрезков-сегментов, опускаясь когда нужно и всегда поднимаясь после прохождения данного отрезка...если буду делать буквы, воспользуюсь аналогией с 16 сегментным индикатором...
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Scorpio » 23 июн 2018, 23:11

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

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

Сообщение dimamichev » 24 июн 2018, 08:57

Scorpio писал(а):Сначала проверяем, рисуется ли следующий сегмент, потом поднимаем или нет

Понял, добавлю условий перед каждой f_(0).
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение dimamichev » 26 июн 2018, 22:14

Переделал под 4 цифры, теперь можно и календарь (по аналогии с известными пишущими часами) сделать на "модуле реального времени" :D . Осталось дождаться от алиэкспресс волшебной самостирающейся ручки, пишут продавцы, что за час исчезает надпись.
Вот ещё забавную идею для "времяписания" нашёл:
http://mozgochiny.ru/electronics-2/bina ... mi-rukami/
Вложения
рисовалка .jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Scorpio » 27 июн 2018, 06:12

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

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

Сообщение Angel71 » 27 июн 2018, 14:46

накука? экраны электрически стираются.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

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

Сообщение Madf » 27 июн 2018, 15:37

Пора тему давно переименовать "изобретатель колеса". :)
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение ilalexey » 27 июн 2018, 17:50

dimamichev писал(а):не могу пока найти как "чёнибудь писать без синусов и косинусов, чтоб совсем понятно было".

Придумал тебе следующий проект - два моторчика вращаются и выстреливают краской в нужный момент :) не?
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

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

Сообщение dimamichev » 27 июн 2018, 22:26

Не знаю чего так скептически... Вот взять многими так любимый светодиод, "примотать" к той части фломастера которую любят жевать, включать-выключать его вместо опускания-подъема стержня... и в темноте можно время фотиком фризлайтить с помощником. Вот тебе и следующий "проекть" :) в продолжение.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение dimamichev » 30 июн 2018, 14:26


Вот, получилось писать буквы.
Код: Выделить всёРазвернуть
///////////// МАНИПУЛЯТОР ДЛЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ скетч №5 буквы алфавита  //////////////////////////////
#include <Servo.h> // подключение библиотеки Servo

Servo servo1;//указываем сервопривод основного поворота (при увел. угла - поворот рычага ВЛЕВО)
Servo servo2;//указываем сервопривод дополнительного поворота (при увел. угла - поворот рычага ВПРАВО)
Servo servo3;//указываем сервопривод подъёмника (при увел. угла - поворот рычага ВВЕРХ)

int a=98;//начальный угол
int b=85;
int a03=125;

int da=8;int db=25;//переменные задающие величину изменения углов

int A; int B; //переменные для текущих значений углов поворота сервоприводов
int a3=a03;
int i;//счётчик
int r=0;//счётчик числа рисуемых букв с нуля отсчёта
int n=15;// единица временного интервала
int j;// переменная для выбранной буквы
int tablC[7]={0,16,4,19,8,13,14};


int tablB[544]={0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0, //0-А//
                1,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, //1-Б//
                1,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1, //2-В//
                1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0, //3-Г//
                0,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0, //4-Д//
                1,0,0,1,0,0,1,1,1,0,1,1,0,0,0,0, //5-Е//
                0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1, //6-Ж//
                0,0,1,0,0,0,1,1,0,1,1,1,1,0,0,0, //7-З//
                1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,0, //8-И//
                1,0,1,1,1,1,0,0,0,0,0,0,1,1,0,0, //9-Й//
                1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1, //10-К//
                0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,0, //11-Л//
                1,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0, //12-М//
                1,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0, //13-Н//
                1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0, //14-О// 
                1,0,1,1,0,1,0,0,0,0,1,1,0,0,0,0, //15-П//
                1,0,0,1,0,1,0,0,1,1,1,1,0,0,0,0, //16-Р//
                1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0, //17-С//
                0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0, //18-Т//
                0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0, //19-У//
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //32// рисуем все 16 сегментов//
                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//33-пробел // таблица кодов сегментов-букв
           
void setup()
{
//Serial.begin(9600);
servo1.attach(5);// подключаем переменную servo к соответствующему выводу платы Ардуино
servo2.attach(6);
servo3.attach(7);
servo1.write(a);//начальная установка положения
servo2.write(b);
servo3.write(a03);
delay(1000);
}
//////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
if (r<7)
{
  f_(0);
for (r=0;r<7;r++)// условие числа рисуемых букв
{
int tablA[18]={a,          b,
               a+db/4,     b+db/2,
               a+db/2,     b+db,
               a+db/2-da,  b+db,
               a+db/4-da,  b+db/2,
               a-da,       b,
               a+db/2-da/2,b+db,
               a+db/4-da/2,b+db/2,
               a-da/2,     b }; // координаты узловых точек сегментов
 
  j=tablC[r];
////////////////////////////////   1   ////////////////////////////////
A=tablA[0];B=tablA[1];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+0]);fv_();f_(0);
////////////////////////////////   2   ////////////////////////////////
A=tablA[16];B=tablA[17];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+1]);fv_();f_(0);
////////////////////////////////   3   ////////////////////////////////
A=tablA[10];B=tablA[11];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+2]);fv_();f_(0);
////////////////////////////////   4   ////////////////////////////////
A=tablA[2];B=tablA[3];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+3]);fv_();f_(0);
////////////////////////////////   5   ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+4]);fv_();f_(0);
////////////////////////////////   6   ////////////////////////////////
A=tablA[8];B=tablA[9];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+5]);fv_();f_(0);

////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   7   ////////////////////////////////
A=tablA[0];B=tablA[1];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+6]);fg_();f_(0);
////////////////////////////////   8   ////////////////////////////////
A=tablA[16];B=tablA[17];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+7]);fg_();f_(0);
////////////////////////////////   9   ////////////////////////////////
A=tablA[2];B=tablA[3];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+8]);fg_();f_(0);
////////////////////////////////   10   ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+9]);fg_();f_(0);
////////////////////////////////   11   ////////////////////////////////
A=tablA[4];B=tablA[5];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+10]);fg_();f_(0);
////////////////////////////////   12  ////////////////////////////////
A=tablA[12];B=tablA[13];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+11]);fg_();f_(0);

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   13  ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+12]);fdp_();f_(0);
////////////////////////////////   14  ////////////////////////////////
A=tablA[0];B=tablA[1];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+13]);fdp_();f_(0);

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   15  ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+14]);fdl_();f_(0);
////////////////////////////////   16   ////////////////////////////////
A=tablA[10];B=tablA[11];
servo1.write(A);servo2.write(B);delay(n);
f_(tablB[16*j+15]);fdl_();f_(0);
////////////////////////////////////////////////////////////////////////

a=a-da-2;
}
}
}
//////функция поднимания-опускания фломастера (значения аргумента 0 и 1 соответственно)/////
void f_(int k)
{
  while (a3>85&&k==1)
  {servo3.write(a3);a3=a3-1;delay(n);}if(k==1){a3=85;}
   while (a3<125&&k==0)
  {servo3.write(a3);a3=a3+1;delay(n);}if (k==0){a3=125;}
  }
  //////функция рисования отрезка вертикально вверх  /////
void fv_()
{
  int K1=0;
  while (K1<=db/2)
  {servo1.write(A);servo2.write(B);B=B+2;A=A+1;K1=K1+2;delay(n);}
 
  }
  //////функция рисования отрезка горизонтально вправо  /////
void fg_()
{
  int K1=0;
  while (K1<=da/2)
  {servo1.write(A);A=A-1;K1=K1+1;delay(n/2);}
 
  }
  //////функция рисования отрезка по диагонали  вправо-вверх  /////
void fdp_()
{
  int K1=0;
 
  while (K1<db/4)
{K1=K1+1;B=B+1;servo2.write(B);delay(n);}

servo1.write(A+db/4-da/2);delay(n);
K1=0;
while (K1<db/4)
{K1=K1+1;B=B+1;servo2.write(B);delay(n);}
  }
   //////функция рисования отрезка по диагонали  влево-вверх  /////
void fdl_()
{
  int K1=0;
 
  while (K1<3*db/16)
{K1=K1+2;B=B+3;A=A+2;servo2.write(B);servo1.write(A);delay(n);}

servo2.write(B);servo1.write(A);delay(n);

K1=0;
while (K1<3*db/16)
{K1=K1+1;B=B+1;A=A+1;servo2.write(B);servo1.write(A);delay(n);}
  }
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Dmitry__ » 30 июн 2018, 15:08

Код: Выделить всёРазвернуть
int tablB[544]={0,0,1,0,0,1,0,0,0,1,0,0,1,1,0,0, //0-А//

Дима, да научись ты уже битами пользоваться :o
Ты для хранения 68 байт используешь 1.2кб.
Код: Выделить всёРазвернуть
//Скетч использует 5 520 байт (17%) памяти устройства. Всего доступно 30 720 байт.
//Глобальные переменные используют 1 174 байт (57%) динамической памяти, оставляя 874 байт для локальных переменных. Максимум: 2 048 байт.

Код: Выделить всёРазвернуть
//Скетч использует 4 500 байт (14%) памяти устройства. Всего доступно 30 720 байт.
//Глобальные переменные используют 154 байт (7%) динамической памяти, оставляя 1 894 байт для локальных переменных. Максимум: 2 048 байт.


Код: Выделить всёРазвернуть
unsigned short tablB[34]={0b0010010001001100, //0-А//
                           0b1011001111110000, //1-Б//
                           0b1001001100111001, //2-В//
                           0b1001000000110000, //3-Г//
                           0b0010011100001100, //4-Д//
                           0b1001001110110000, //5-Е//
                           0b0100100000001111, //6-Ж//
                           0b0010001101111000, //7-З//
                           0b1011010000001100, //8-И//
                           0b1011110000001100, //9-Й//
                           0b1001000010001001, //10-К//
                           0b0010010000001100, //11-Л//
                           0b1011010000001010, //12-М//
                           0b1011010011000000, //13-Н//
                           0b1011011100110000, //14-О// 
                           0b1011010000110000, //15-П//
                           0b1001010011110000, //16-Р//
                           0b1001001100110000, //17-С//
                           0b0100100000110000, //18-Т//
                           0b0011011111000000, //19-У//
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b0000000000000000,
                           0b1111111111111111, //32// рисуем все 16 сегментов//
                           0b0000000000000000};//33-пробел // таблица кодов сегментов-букв
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение dimamichev » 30 июн 2018, 15:24

Да, надо учиться пользоваться, согласен. Буду спрашивать на тематическом форуме ардуинщиков, но там терпелок хватает у людей на 2-3 вопроса,а отличить стёб от смутной подсказки не всегда удаётся.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Dmitry__ » 30 июн 2018, 15:32

Почитай про битовые поля
https://learnc.info/c/unions_and_bitfields.html
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Scorpio » 30 июн 2018, 20:39

dimamichev писал(а):Вот, получилось писать буквы.

А зачем дергается, как паралитик?


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

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

Сообщение dimamichev » 01 июл 2018, 00:01

Код: Выделить всёРазвернуть
///////////// МАНИПУЛЯТОР ДЛЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ скетч №5 буквы алфавита в слове  //////////////////////////////
#include <Servo.h> // подключение библиотеки Servo

Servo servo1;//указываем сервопривод основного поворота (при увел. угла - поворот рычага ВЛЕВО)
Servo servo2;//указываем сервопривод дополнительного поворота (при увел. угла - поворот рычага ВПРАВО)
Servo servo3;//указываем сервопривод подъёмника (при увел. угла - поворот рычага ВВЕРХ)

int a=98;//начальный угол
int b=85;
int a03=125;

int da=8;int db=25;//переменные задающие величину изменения углов

int A; int B; //переменные для текущих значений углов поворота сервоприводов
int a3=a03;
int i;//счётчик
int r=0;//счётчик числа рисуемых букв с нуля отсчёта
int n=15;// единица временного интервала
int j;// переменная для выбранной буквы
int tablC[7]={0,16,4,19,8,13,14};//слово для письма - АРДУИНО
unsigned short  tablB[34]={0b0010010001001100, //0-А//
                           0b1011001111110000, //1-Б//
                           0b1001001100111001, //2-В//
                           0b1001000000110000, //3-Г//
                           0b0010011100001100, //4-Д//
                           0b1001001110110000, //5-Е//
                           0b0100100000001111, //6-Ж//
                           0b0010001101111000, //7-З//
                           0b1011010000001100, //8-И//
                           0b1011110000001100, //9-Й//
                           0b1001000010001001, //10-К//
                           0b0010010000001100, //11-Л//
                           0b1011010000001010, //12-М//
                           0b1011010011000000, //13-Н//
                           0b1011011100110000, //14-О// 
                           0b1011010000110000, //15-П//
                           0b1001010011110000, //16-Р//
                           0b1001001100110000, //17-С//
                           0b0100100000110000, //18-Т//
                           0b0011011111000000, //19-У//
                           0b0101110011110000, //20-Ф//
                           0b0000000000001111, //21-Х//
                           0b1011011100000001, //22-Ц//
                           0b0011010011000000, //23-Ч//
                           0b1111111100000000, //24-Ш//
                           0b1111111100000001, //25-Щ//
                           0b0110100101100000, //26-Ъ//
                           0b1111011010000000, //27-Ы//
                           0b1011001111000000, //28-Ь//
                           0b0010011101110000, //29-Э//
                           0b1111110110010000, //30-Ю//
                           0b0011010011110100, //31-Я//
                           0b1111111111111111, //32// рисуем все 16 сегментов//
                           0b0000000000000000};//33-пробел // таблица кодов сегментов-букв


           
void setup()
{
//Serial.begin(9600);
servo1.attach(5);// подключаем переменную servo к соответствующему выводу платы Ардуино
servo2.attach(6);
servo3.attach(7);
servo1.write(a);//начальная установка положения
servo2.write(b);
servo3.write(a03);
delay(1000);
}
//////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
if (r<7)
{
  f_(0);
for (r=0;r<7;r++)// условие числа рисуемых букв
{
int tablA[18]={a,          b,
               a+db/4,     b+db/2,
               a+db/2,     b+db,
               a+db/2-da,  b+db,
               a+db/4-da,  b+db/2,
               a-da,       b,
               a+db/2-da/2,b+db,
               a+db/4-da/2,b+db/2,
               a-da/2,     b }; // координаты узловых точек сегментов
 
  j=tablC[r];
////////////////////////////////   1   ////////////////////////////////
A=tablA[0];B=tablA[1];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],15));fv_();f_(0);
////////////////////////////////   2   ////////////////////////////////
A=tablA[16];B=tablA[17];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],14));fv_();f_(0);

////////////////////////////////   3   ////////////////////////////////
A=tablA[10];B=tablA[11];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],13));fv_();f_(0);

////////////////////////////////   4   ////////////////////////////////
A=tablA[2];B=tablA[3];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],12));fv_();f_(0);

////////////////////////////////   5   ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],11));fv_();f_(0);

////////////////////////////////   6   ////////////////////////////////
A=tablA[8];B=tablA[9];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],10));fv_();f_(0);


////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   7   ////////////////////////////////
A=tablA[0];B=tablA[1];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],9));fg_();f_(0);

////////////////////////////////   8   ////////////////////////////////
A=tablA[16];B=tablA[17];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],8));fg_();f_(0);

////////////////////////////////   9   ////////////////////////////////
A=tablA[2];B=tablA[3];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],7));fg_();f_(0);

////////////////////////////////   10   ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],6));fg_();f_(0);

////////////////////////////////   11   ////////////////////////////////
A=tablA[4];B=tablA[5];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],5));fg_();f_(0);

////////////////////////////////   12  ////////////////////////////////
A=tablA[12];B=tablA[13];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],4));fg_();f_(0);


////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   13  ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],3));fdp_();f_(0);

////////////////////////////////   14  ////////////////////////////////
A=tablA[0];B=tablA[1];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],2));fdp_();f_(0);

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   15  ////////////////////////////////
A=tablA[14];B=tablA[15];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],1));fdl_();f_(0);

////////////////////////////////   16   ////////////////////////////////
A=tablA[10];B=tablA[11];
servo1.write(A);servo2.write(B);delay(n);
f_(bitRead(tablB[j],0));fdl_();f_(0);

////////////////////////////////////////////////////////////////////////

a=a-da-2;
}
}
}
//////функция поднимания-опускания фломастера (значения аргумента 0 и 1 соответственно)/////
void f_(int k)
{
  while (a3>85&&k==1)
  {servo3.write(a3);a3=a3-1;delay(n);}if(k==1){a3=85;}
   while (a3<125&&k==0)
  {servo3.write(a3);a3=a3+1;delay(n);}if (k==0){a3=125;}
  }
  //////функция рисования отрезка вертикально вверх  /////
void fv_()
{
  int K1=0;
  while (K1<=db/2)
  {servo1.write(A);servo2.write(B);B=B+2;A=A+1;K1=K1+2;delay(n);}
 
  }
  //////функция рисования отрезка горизонтально вправо  /////
void fg_()
{
  int K1=0;
  while (K1<=da/2)
  {servo1.write(A);A=A-1;K1=K1+1;delay(n/2);}
 
  }
  //////функция рисования отрезка по диагонали  вправо-вверх  /////
void fdp_()
{
  int K1=0;
 
  while (K1<db/4)
{K1=K1+1;B=B+1;servo2.write(B);delay(n);}

servo1.write(A+db/4-da/2);delay(n);
K1=0;
while (K1<db/4)
{K1=K1+1;B=B+1;servo2.write(B);delay(n);}
  }
   //////функция рисования отрезка по диагонали  влево-вверх  /////
void fdl_()
{
  int K1=0;
 
  while (K1<3*db/16)
{K1=K1+2;B=B+3;A=A+2;servo2.write(B);servo1.write(A);delay(n);}

servo2.write(B);servo1.write(A);delay(n);

K1=0;
while (K1<3*db/16)
{K1=K1+1;B=B+1;A=A+1;servo2.write(B);servo1.write(A);delay(n);}
  }

Пока так код изменил, согласно рекомендациям. С дёрганьем пока не пойму как быть(где delay() совать).

Добавлено спустя 1 час 27 минут 46 секунд:
Код: Выделить всёРазвернуть
///////////// МАНИПУЛЯТОР ДЛЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ скетч №5 буквы алфавита в слове  //////////////////////////////
#include <Servo.h> // подключение библиотеки Servo

Servo servo1;//указываем сервопривод основного поворота (при увел. угла - поворот рычага ВЛЕВО)
Servo servo2;//указываем сервопривод дополнительного поворота (при увел. угла - поворот рычага ВПРАВО)
Servo servo3;//указываем сервопривод подъёмника (при увел. угла - поворот рычага ВВЕРХ)

int a=98;//начальный угол
int b=85;
int a03=125;

int da=8;int db=25;//переменные задающие величину изменения углов

int A; int B; //переменные для текущих значений углов поворота сервоприводов
int a3=a03;
int i;//счётчик
int r=0;//счётчик числа рисуемых букв с нуля отсчёта
int n=15;// единица временного интервала
int j;// переменная для выбранной буквы
int tablC[7]={0,16,4,19,8,13,14};//слово для письма - АРДУИНО
unsigned short  tablB[34]={0b0010010001001100, //0-А//
                           0b1011001111110000, //1-Б//
                           0b1001001100111001, //2-В//
                           0b1001000000110000, //3-Г//
                           0b0010011100001100, //4-Д//
                           0b1001001110110000, //5-Е//
                           0b0100100000001111, //6-Ж//
                           0b0010001101111000, //7-З//
                           0b1011010000001100, //8-И//
                           0b1011110000001100, //9-Й//
                           0b1001000010001001, //10-К//
                           0b0010010000001100, //11-Л//
                           0b1011010000001010, //12-М//
                           0b1011010011000000, //13-Н//
                           0b1011011100110000, //14-О// 
                           0b1011010000110000, //15-П//
                           0b1001010011110000, //16-Р//
                           0b1001001100110000, //17-С//
                           0b0100100000110000, //18-Т//
                           0b0011011111000000, //19-У//
                           0b0101110011110000, //20-Ф//
                           0b0000000000001111, //21-Х//
                           0b1011011100000001, //22-Ц//
                           0b0011010011000000, //23-Ч//
                           0b1111111100000000, //24-Ш//
                           0b1111111100000001, //25-Щ//
                           0b0110100101100000, //26-Ъ//
                           0b1111011010000000, //27-Ы//
                           0b1011001111000000, //28-Ь//
                           0b0010011101110000, //29-Э//
                           0b1111110110010000, //30-Ю//
                           0b0011010011110100, //31-Я//
                           0b1111111111111111, //32// рисуем все 16 сегментов//
                           0b0000000000000000};//33-пробел // таблица кодов сегментов-букв


           
void setup()
{
//Serial.begin(9600);
servo1.attach(5);// подключаем переменную servo к соответствующему выводу платы Ардуино
servo2.attach(6);
servo3.attach(7);
servo1.write(a);//начальная установка положения
servo2.write(b);
servo3.write(a03);
delay(1000);
}
//////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
if (r<7)
{
  f_(0);
for (r=0;r<7;r++)// условие числа рисуемых букв
{
int tablA[18]={a,          b,
               a+db/4,     b+db/2,
               a+db/2,     b+db,
               a+db/2-da,  b+db,
               a+db/4-da,  b+db/2,
               a-da,       b,
               a+db/2-da/2,b+db,
               a+db/4-da/2,b+db/2,
               a-da/2,     b }; // координаты узловых точек сегментов
 
  j=tablC[r];
////////////////////////////////   1   ////////////////////////////////
A=tablA[0];B=tablA[1];
if(bitRead(tablB[j],15)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fv_();f_(0);}
////////////////////////////////   2   ////////////////////////////////
A=tablA[16];B=tablA[17];
if(bitRead(tablB[j],14)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fv_();f_(0);}

////////////////////////////////   3   ////////////////////////////////
A=tablA[10];B=tablA[11];
if(bitRead(tablB[j],13)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fv_();f_(0);}

////////////////////////////////   4   ////////////////////////////////
A=tablA[2];B=tablA[3];
if(bitRead(tablB[j],12)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fv_();f_(0);}

////////////////////////////////   5   ////////////////////////////////
A=tablA[14];B=tablA[15];
if(bitRead(tablB[j],11)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fv_();f_(0);}

////////////////////////////////   6   ////////////////////////////////
A=tablA[8];B=tablA[9];
if(bitRead(tablB[j],10)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fv_();f_(0);}


////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   7   ////////////////////////////////
A=tablA[0];B=tablA[1];
if(bitRead(tablB[j],9)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fg_();f_(0);}

////////////////////////////////   8   ////////////////////////////////
A=tablA[16];B=tablA[17];
if(bitRead(tablB[j],8)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fg_();f_(0);}

////////////////////////////////   9   ////////////////////////////////
A=tablA[2];B=tablA[3];
if(bitRead(tablB[j],7)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fg_();f_(0);}

////////////////////////////////   10   ////////////////////////////////
A=tablA[14];B=tablA[15];
if(bitRead(tablB[j],6)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fg_();f_(0);}

////////////////////////////////   11   ////////////////////////////////
A=tablA[4];B=tablA[5];
if(bitRead(tablB[j],5)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fg_();f_(0);}

////////////////////////////////   12  ////////////////////////////////
A=tablA[12];B=tablA[13];
if(bitRead(tablB[j],4)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fg_();f_(0);}


////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   13  ////////////////////////////////
A=tablA[14];B=tablA[15];
if(bitRead(tablB[j],3)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fdp_();f_(0);}

////////////////////////////////   14  ////////////////////////////////
A=tablA[0];B=tablA[1];
if(bitRead(tablB[j],2)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fdp_();f_(0);}

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////   15  ////////////////////////////////
A=tablA[14];B=tablA[15];
if(bitRead(tablB[j],1)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fdl_();f_(0);}

////////////////////////////////   16   ////////////////////////////////
A=tablA[10];B=tablA[11];
if(bitRead(tablB[j],0)==1)
{servo1.write(A);servo2.write(B);delay(n);
f_(1);fdl_();f_(0);}

////////////////////////////////////////////////////////////////////////

a=a-da-2;
}
}
}
//////функция поднимания-опускания фломастера (значения аргумента 0 и 1 соответственно)/////
void f_(int k)
{
  while (a3>85&&k==1)
  {servo3.write(a3);a3=a3-1;delay(n);}if(k==1){a3=85;}
   while (a3<125&&k==0)
  {servo3.write(a3);a3=a3+1;delay(n);}if (k==0){a3=125;}
  }
  //////функция рисования отрезка вертикально вверх  /////
void fv_()
{
  int K1=0;
  while (K1<=db/2)
  {servo1.write(A);servo2.write(B);B=B+2;A=A+1;K1=K1+2;delay(n);}
 
  }
  //////функция рисования отрезка горизонтально вправо  /////
void fg_()
{
  int K1=0;
  while (K1<=da/2)
  {servo1.write(A);A=A-1;K1=K1+1;delay(n/2);}
 
  }
  //////функция рисования отрезка по диагонали  вправо-вверх  /////
void fdp_()
{
  int K1=0;
 
  while (K1<db/4)
{K1=K1+1;B=B+1;servo2.write(B);delay(n);}

servo1.write(A+db/4-da/2);delay(n);
K1=0;
while (K1<db/4)
{K1=K1+1;B=B+1;servo2.write(B);delay(n);}
  }
   //////функция рисования отрезка по диагонали  влево-вверх  /////
void fdl_()
{
  int K1=0;
 
  while (K1<3*db/16)
{K1=K1+2;B=B+3;A=A+2;servo2.write(B);servo1.write(A);delay(n);}

servo2.write(B);servo1.write(A);delay(n);

K1=0;
while (K1<3*db/16)
{K1=K1+1;B=B+1;A=A+1;servo2.write(B);servo1.write(A);delay(n);}
  }

Разобрался...с дёрганьем.С точностью позиционирования конечно далековато от роликов.Завтра попробую две строки по 7 букав.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Пред.След.

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

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

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

cron