Добрый день, друзья!
Как то раз увидел я на ютубе "Самая бесполезная вещь" и захотел её для дочери, но заодно и себя порадовать!
Сделал короб, всё смонтировал, и начал заливать скетч, который частично отработал на макетке, там все работала.
Сам скетч взят с простора сети, после адаптирован для себя. Проблема заключается в оптимизации работы оператора цикла for, если можно его заменить каким другим с удовольствием выслушаю.
С помощью этого оператора цикла (for) происходит сравнивание данных после чего открывается или закрывается крышка, либо высовывается и убирается рука.
Скетч прилагаю!
Помогите мыслью, за раннее спасибо!
Как то раз увидел я на ютубе "Самая бесполезная вещь" и захотел её для дочери, но заодно и себя порадовать!
Сделал короб, всё смонтировал, и начал заливать скетч, который частично отработал на макетке, там все работала.
Сам скетч взят с простора сети, после адаптирован для себя. Проблема заключается в оптимизации работы оператора цикла for, если можно его заменить каким другим с удовольствием выслушаю.
С помощью этого оператора цикла (for) происходит сравнивание данных после чего открывается или закрывается крышка, либо высовывается и убирается рука.
Скетч прилагаю!
Помогите мыслью, за раннее спасибо!
C++:
#include <Servo.h> //библиотека сервопривода
#include <Bounce2.h> //библиотека устранения дребезга контактов
Servo Door; //сервопривод крышки
Servo Hand; //сервопривод руки
#define Tymbler 12 //тумблер постоянно на 12 контакте
byte r; //вводим переменную r
byte pos; //вводим переменную pos
byte pos1door = 160; //установка минимального значения угла крышки
byte pos2door = 90; //установка максимального значения угла крышки
byte pos1hand = 0; //установка минимального значения угла руки
byte pos2hand = 180; //установка максимального значения угла руки
Bounce bouncer = Bounce();
void setup(){
Door.write(pos1door); //устанавливаем сервопривод крышки в начальное положение
Hand.write(pos1hand); //устанавливаем сервопривод руки в начальное положение
pinMode(Tymbler, INPUT_PULLUP); //12 вывод в режим ВХОДА с подтягивающим резистором
bouncer.attach(Tymbler); //настраиваем экземпляр класса тумблера
bouncer.interval(5); //обновление положения каждые 5 мс
Door.attach(9); //назначаем сервоприводу крышки выход 9
Hand.attach(10); //назначаем сервоприводу руки выход 10
}
void loop() {
bouncer.update(); { //обновляем данные положения тумблера
if (bouncer.read()==0){ //считываем данные, если значение 0 идем дальше
r = random(0,11); //генерируем случайное число от 0 до 11
if (r == 0) { move_0(); } //вызов программы действия по случайному числу 0
//else if (r == 1) { move_1(); } //пока не используем
//else if (r == 2) { move_2(); } //пока не используем
//else if (r == 3) { move_3(); } //пока не используем
//else if (r == 4) { move_4(); } //пока не используем
//else if (r == 5) { move_5(); } //пока не используем
else if (r == 6) { move_0(); } //вызов программы действия по случайному числу 6
//else if (r == 7) { move_1(); } //пока не используем
//else if (r == 8) { move_4(); } //пока не используем
//else if (r == 9) { move_3(); } //пока не используем
else if (r == 10) { move_0(); } //вызов программы действия по случайному числу 10
}
}
}
void move_0(){ //простой вариант: открыли-выключили-закрыли
//открываем крышку
for(pos = pos2door; pos <= pos1door; pos +=3)
{
Door.write(pos);
delay(15);
//высовываем руку
for(pos = pos1hand; pos <= pos2hand; pos -=3)
{
Hand.write(pos);
delay(15);
}
//убираем руку
for(pos = pos1hand; pos <= pos2hand; pos +=3)
{
Hand.write(pos);
delay(15);
}
//закрываем крышку
for(pos = pos1door; pos >= pos2door; pos -=3)
{
Door.write(pos);
delay(15);
}
}
Вложения
-
4.2 KB Просмотры: 0
Изменено: