Нужна помощь в правке скетча для Ардуино
- Войдите на сайт для отправки комментариев
я тут собрал давилку для флюса или пасты, но очень не хватает третий кнопки на реверс мотора, которая отвечала бы тупо за включение вращения мотора в обратную сторону или как то подправить работу первой кнопки,так что-бы на ней ещё был и небольшой реверс. две установленные кнопки вращают мотор в одном направлении только в разных режимах. и когда уже на кнопки не нажимаешь то паста какое то время продолжает вылезать из шприца.
как сейчас работают кнопки
1-ая кнопка (которая ближе к носику шприца) Нажали-мотор крутит постоянно,отпустили- мотор не крутит.
2-ая кнопка (дальняя) нажали-отпустили---поршень давит капельку пасты примерно за одну секунду, повторно нажали-отпустили--- мотор не крутит.
есть ещё подстроечный резистор, вращая его можно регулировать скорость выдавливания.
всё брал тут
Комрады, я знаю ЯП сила, и надеюсь на вашу помощь. Сам я несколько не программист, могу паять,чинить,пилить,чпу станок построить, но вот с программированием не знаком.
Кто может подправить скетч так что-бы на первой кнопки помимо выдавливания был ещё и реверс ?
примерно по такому алгоритму
1-ая кнопка (которая ближе к носику шприца) Нажали-мотор крутит постоянно и давит пасту,отпустили- мотор делает пару/тройку оборотов назад и останавливается, при повторном нажатии опять давим пасту,ещё раз нажали- отор делает пару/тройку оборотов назад и останавливается.
сам скетч
#include <Stepper.h>
#define OFF 0
#define STEP 1
#define RUN 2
// Device connections
#define TRIM 7 // Analog A7
#define LED 13 // Digital D13
#define BT2 14 // Digital D14
#define BT1 15 // Digital D15
#define MYLW 16 // Digital D16
#define MORG 17 // Digital D17
#define MPNK 18 // Digital D18
#define MBLU 19 // Digital D19
#define PRESSDELAY 150
#define STEPPERDELAY 1500
const int stepsPerRevolution = 2048;
volatile unsigned char stepperState = OFF;
Stepper stepper(stepsPerRevolution, MBLU, MYLW, MPNK, MORG);
void setup() {
pinMode(LED, OUTPUT);
// Pin change interrupt configuration:
// BT2 = D14/A0 (Pin PC0 = PCINT8)
// BT1 = D15/A1 (Pin PC1 = PCINT9)
PCMSK1 |= (1<<PCINT8) | (1<<PCINT9);
PCICR |= (1<<PCIE1);
sei();
stepper.setSpeed(10);
}
void loop() {
int trimpot = 0;
double revMultiplier = 0.0;
trimpot = analogRead(TRIM);
revMultiplier = map(trimpot, 1023, 0, 1, 100);
revMultiplier /= 1000.0;
switch (stepperState) {
case STEP:
PCICR &= ~(1<<PCIE1);
stepper.step((int) (revMultiplier * stepsPerRevolution));
while (!(PINC & (1<<PC0)))
stepper.step(64);
PCICR |= (1<<PCIE1);
break;
case RUN:
while (stepperState == RUN) {
stepper.step((int) (revMultiplier * stepsPerRevolution));
delay(STEPPERDELAY);
}
break;
default:
break;
}
stepperState = OFF;
}
ISR(PCINT1_vect)
{
int i = 0;
// Button 2 interrupt
if (!(PINC & (1<<PC0))) {
digitalWrite(LED, HIGH);
for (i = 0; i < PRESSDELAY; i++)
delayMicroseconds(1000);
if (stepperState == OFF)
stepperState = STEP;
digitalWrite(LED, LOW);
}
// Button 1 interrupt
else if (!(PINC & (1<<PC1))) {
digitalWrite(LED, HIGH);
for (i = 0; i < PRESSDELAY; i++)
delayMicroseconds(1000);
if (stepperState == OFF)
stepperState = RUN;
else if (stepperState == RUN)
stepperState = OFF;
digitalWrite(LED, LOW);
}
}
тут смотри http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Для начала научитесь правильно постить код по правилам форума
спасибо, подправил. я только вникаю.