Ну, вроде зависимость видна...
Такая копия получается, руки дрожат немного, потому что пульт-манипулятор влияет на свободу движения пустышки-фломастера + "кривизна серв".
Ну и в скетче с числами явно не всё точно (искажение в пропорциях).
Код:
///////////// МАНИПУЛЯТОР ДЛЯ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ скетч с управлением через пульт на потенциометрах //////////////////////////////
#include <Servo.h> // подключение библиотеки Servo
Servo servo1;//указываем сервопривод основного поворота (при увел. угла - поворот рычага ВЛЕВО)
Servo servo2;//указываем сервопривод дополнительного поворота (при увел. угла - поворот рычага ВПРАВО)
Servo servo3;//указываем сервопривод подъёмника (при увел. угла - поворот рычага ВВЕРХ)
byte a=110;//начальный угол
byte b=113;
byte a03=120;
byte A; byte B; //переменные для текущих значений углов поворота сервоприводов
byte a3=a03;
byte n=30;// единица временного интервала
byte K;// флаг для триггерного режима управления подъёмом пера
void setup()
{
pinMode(8,INPUT); //кнопка опуслания пера
//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 (digitalRead (8)==LOW&&K==0)//если кнопка рисования нажата
{pero(1);K=1;}
if (digitalRead (8)==HIGH&&K==1)//если кнопка рисования отпущена
{pero(0);K=0;}
///////////////////////////////////////////////////////////
A=map(analogRead(A0), 461, 713, 40, 115);//пересчёт значений углов поворота валов серв
B=map(analogRead(A1), 43, 306, 83, 160);
///////////////////////////////////////////////////////////
if (A>39&&A<116&&B>82&&B<161)// если полученные значения углов лежат в границах допустимых
{servo1.write(A);servo2.write(B);delay(n);}
///////////////////////////////////////////////////////////
}
//////функция поднимания-опускания фломастера (значения аргумента 0 и 1 соответственно)/////
void pero(byte k)
{
while (a3>85&&k==1)
{servo3.write(a3);a3=a3-1;delay(n/2);}if(k==1){a3=85;}
while (a3<a03&&k==0)
{servo3.write(a3);a3=a3+1;delay(n/2);}if (k==0){a3=a03;}
}