5 кнопок - 4 сервы

kulika
Offline
Зарегистрирован: 05.04.2017

Приветствую.  Прошу помощи в написании кода.

Задача: 5 кнопок.

Первая поворачивает серву1 на 180 и на 0.

Вторая серву2 на 0.

Третья серву2 на 180, серву3 на 0, серву4 на 180.

Четвертая серву3 на 180.

Пятая серву4 на 0 и 180.

Строго прошу не судить , т.к. только начал общаться с Ардуино.

Нахватался там-сям.

Это читал: http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-...

 
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no.... не помогло, а может плохо читал.
 
Вот собственно начало. Дальше первой кнопки не прошел. 
#include <Servo.h>
Servo servos[55];

void servo_move( int pin, int a, int t ) {
  int d, cnt, ca;
  ca = servos[pin].read();
  d = ca - a;
  cnt = abs(d);
  for ( int i = 0; i < cnt; i++ ) {
    servos[pin].write(ca);
    if ( d < 0 ) ca++; else ca--;
    delay(t);
  }
}
int button1 = 2; //серво1 0,180
int flag1 = 0;
int button2 = 3; //серво2 0
int flag2 = 0;
int button3 = 4; //серво2 180 //серво3 0 //серво4 180
int flag3 = 0;
int button4 = 5; //серво3 180
int flag4 = 0;
int button5 = 6; //серво4 0,180
int flag5 = 0;

void setup() {
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  pinMode(button5, INPUT);
}

void loop() {

  if (digitalRead(button1) == HIGH && flag1 == 0) {
    servos[33].attach(33);
    servo_move( 33, 180, 10);
    delay(100);
    servos[34].attach(34);
    servo_move( 34, 180, 10);
    delay(100);
    flag1 = 1;
  }
  if (digitalRead(button1) == LOW && flag1 == 1) {
    flag1 = 2;
  }
  if (digitalRead(button1) == HIGH && flag1 == 2) {
    servos[33].attach(33);
    servo_move( 33, 0, 10);
    delay(100);
    servos[34].attach(34);
    servo_move( 34, 0, 10);
    delay(100);
    flag1 = 3;
  }
  if (digitalRead(button1) == LOW && flag1 == 3) {
    flag1 = 0;
  }

  if (digitalRead(button2) == HIGH && flag2 == 0) {
    servos[35].attach(35);
    servo_move( 35, 180, 10);
    delay(500);
    flag2 = 1;
    if (digitalRead(button2) == LOW && flag2 == 1) {
      flag2 = 0;

    }
  }
}

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если Вам необходимо работать больше, чем с одним устройством, нужно избавляться от delay.

Найдите и разберитесь с blink without delay.