5 кнопок - 4 сервы
- Войдите на сайт для отправки комментариев
Чт, 06/04/2017 - 01:14
Приветствую. Прошу помощи в написании кода.
Задача: 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;
}
}
}
Если Вам необходимо работать больше, чем с одним устройством, нужно избавляться от delay.
Найдите и разберитесь с blink without delay.