Библиотека AccelStepper
- Войдите на сайт для отправки комментариев
Пнд, 18/02/2013 - 12:29
Код на основе ProportionalControl из библиотеки AccelStepper.
Кнопка 1 сохраняет положени.
Кнопка 2 возвращает в сохранённое положение.
Кнопка 3 переводит в положение потенциометра.
Скорость переводов при нажатии кнопок 2 и 3 разная.
#include <Bounce.h> #include <EEPROM.h> #include <AccelStepper.h> AccelStepper stepper(1, 9, 10); int button1Pin = 17; int button2Pin = 18; int button3Pin = 19; Bounce bouncer1 = Bounce( button1Pin,5 ); Bounce bouncer2 = Bounce( button2Pin,5 ); Bounce bouncer3 = Bounce( button3Pin,5 ); int value1; int value2; int value3; int inputMode = 1; int potpin = 0; int valPot; int val1; void setup() { pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); } void loop() { if(inputMode) { valPot = analogRead(potpin); valPot = map(valPot, 0, 1024, 0, 530); stepper.setMaxSpeed(3000); stepper.moveTo(valPot); stepper.setSpeed(2500); stepper.runSpeedToPosition(); } bouncer1.update ( ); value1 = bouncer1.read(); if(value1 == HIGH) { byte *x1 = (byte *)&valPot; EEPROM.write(10, x1[0]); EEPROM.write(11, x1[1]); delay(15); } bouncer2.update ( ); value2 = bouncer2.read(); if(value2 == HIGH ) { inputMode=0; byte xx1[] = { EEPROM.read(10), EEPROM.read(11) }; int *y1 = (int *)&xx1; val1 = y1[0]; stepper.setMaxSpeed(300); stepper.moveTo(val1); stepper.setSpeed(300); stepper.runSpeedToPosition(); } bouncer3.update ( ); value3 = bouncer3.read(); if(value3 == HIGH) { inputMode=0; byte xx1[] = { EEPROM.read(10), EEPROM.read(11) }; int *y1 = (int *)&xx1; val1 = y1[0]; stepper.setMaxSpeed(300); stepper.moveTo(valPot); stepper.setSpeed(100); stepper.runSpeedToPosition(); inputMode=1; } }
Возвращение в сохранённое положение происходит медленно , но только при удержании кнопки 2.
Перевод в положение потенциометра происходит при клике кнопки 3, но мгновенно.
Нужно так - нажал кнопку 2- шаговик перешёл в положение val1 с определённой скоростью, нажал кнопку 3 - шаговик вернулся в положение потенциометра с другой скоростью.
Добавил ещё кнопку. Перевод в сохранённое положение и положение потенциометра только при удержании кнопок. Как сделать, чтобы степпер заработал от одного клика - не могу придумать (опыта совсем маловато). С сервой работает, а здесь нет.
Додавил, работает.