Помогите переделать скетч

mfil1979
Offline
Зарегистрирован: 05.07.2016

Помогите переделать скетч из аналог крутилок серво в кнопки лев-прав серво

пример что надо https://yadi.sk/i/akZdm0Pct4zZE

скетч под крутилки

#include <Servo.h> 
 
Servo servo1;  
Servo servo2; 
Servo servo3;  
void setup() 
  servo1.attach(3);  
  servo2.attach(4);  
  servo3.attach(5);   
   Serial.begin(9600);
 
void loop() 
  int analog1 = map(analogRead(A0), 0, 1050, 0, 180);
  int analog2 = map(analogRead(A1), 0, 1050, 0, 180);  
  int analog3 = map(analogRead(A2), 0, 1050, 0, 180);  
   
  servo1.write(analog1);  
  servo2.write(analog2);  
  servo3.write(analog3);  
  
  Serial.print("analog  1: ");
  Serial.print(analog1);
  Serial.print("analog  2: ");
  Serial.print(analog2);
  Serial.print("analog  3: ");
  Serial.print(analog3);
 
  
  delay(1000);            
}
 
Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

чувствую тебя щас направят в тему про обработку кнопок

логика такова что тебе надо взять 2 кнопки на каждую серву и опрашивать,есть переменная если брать твою же analogservo1, допустим первую кнопку нажал у тебя прибавилась единичка к analogservo1, нажал другую кнопку у тебя отнялась единичка от analogservo1

если по простому то вот так....только надо задержку небольшую ставить после инкременда декремента чтобы серва двигалась не очень быстро



if(digitalRead(knopka1,LOW)&&servoanalog1<180){
 servoanalog1++;
 
}
if(digitalRead(knopka2,LOW)&&servoanalog1>0){
 servoanalog1--;
 
}

 

mfil1979
Offline
Зарегистрирован: 05.07.2016

управление серво двумя кнопками через два канала у меня работало, а вот именно как сделать чтобы через один аналог канал работало две кнопки на серву? еще и шагово?

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

аналогия такая же analogreed(knopka1=допустим 1000); делаем код ++...... дальше если analogreed(knopka1=допустим 500); то делаем код --.....

mfil1979
Offline
Зарегистрирован: 05.07.2016

что то типа такого только чтобы через аналог 

#include <Servo.h>
 
#define ServoPin 9 	//пин сервы
#define BUT_1 4    	//BUT_1 и BUT_2 - кнопки управления сервой (тут пин 4)
#define BUT_2 5	//BUT_1 и BUT_2 - кнопки управления сервой (тут пин 5)
#define SHAG 1           //шаг поворота сервы, в градусах

Servo myServo;

int angle = 0;  //начальный угол
 
void setup()
{
  myServo.attach(ServoPin);
  myServo.write(angle); 	//состояние после включения
  pinMode(BUT_1, INPUT); 	//для считывания состояний кнопок
  pinMode(BUT_2, INPUT);	//для считывания состояний кнопок
// кнопки соединены с ардуиной стягивающим резистором! (т.е. когда не нажато 0 В)
}
 
void loop()
{
  if (digitalRead(BUT_1)) angle = angle + SHAG; //если первая кнопка увеличим угол
  if (digitalRead(BUT_2)) angle = angle - SHAG;//если вторая уменьшим

  if (angle > 180) angle = 180;    //ограничим угол сервы 0..180
  if (angle < 0) angle = 0;

  myServo.write(angle); //задаем получившийся угол
  delay(300); // подождем перед следующим опросом
}
Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

mfil1979 пишет:

что то типа такого только чтобы через аналог 

#include <Servo.h>
 
#define ServoPin 9 	//пин сервы
#define BUT_1 4    	//BUT_1 и BUT_2 - кнопки управления сервой (тут пин 4)
#define BUT_2 5	//BUT_1 и BUT_2 - кнопки управления сервой (тут пин 5)
#define SHAG 1           //шаг поворота сервы, в градусах

Servo myServo;

int angle = 0;  //начальный угол
 
void setup()
{
  myServo.attach(ServoPin);
  myServo.write(angle); 	//состояние после включения
  pinMode(BUT_1, INPUT); 	//для считывания состояний кнопок
  pinMode(BUT_2, INPUT);	//для считывания состояний кнопок
// кнопки соединены с ардуиной стягивающим резистором! (т.е. когда не нажато 0 В)
}
 
void loop()
{
  if (digitalRead(BUT_1)) angle = angle + SHAG; //если первая кнопка увеличим угол
  if (digitalRead(BUT_2)) angle = angle - SHAG;//если вторая уменьшим

  if (angle > 180) angle = 180;    //ограничим угол сервы 0..180
  if (angle < 0) angle = 0;

  myServo.write(angle); //задаем получившийся угол
  delay(300); // подождем перед следующим опросом
}

 

значения из воздуха смотри сам какое у тебя там будет значение и поставь диапазон...

 if(analogRead(knopka)==1000){
    servo++;
  }
    if(analogRead(knopka)==500){
    servo--;
  }