Помощь в написании скетча для станка.
- Войдите на сайт для отправки комментариев
Пт, 10/05/2019 - 17:19
Доброго времени суток Уважаемые Форумчане ! хочу свой *станочек* автоматизировать. Но с ардуино пока дружу не долго((( В общем написал скетч - все работает как и хотелось, но еще хочется прикрутить к ардуинке кнопку - нажал - программа запустилась циклично, нажал повторно - программа дошла до конца и цикл завершился. Может кто поможет? Вот программка:
int in1 = 5; // Реле подачи воздуха (цифровой 5 пин)
int in2 = 6; // Реле работы двигателя шнека (цифровой 6 пин)
void setup()
{
pinMode(in1, OUTPUT); // Установим вывод 5 как выход
pinMode(in2, OUTPUT); // Установим вывод 6 как выход
}
void loop()
{
delay(4000); // Задержка перед началом работы
digitalWrite(in1, HIGH); // Включаем реле подачи воздуха пресс формы
delay(3000); // Пауза 3 сек
digitalWrite(in2, HIGH); // Включаем реле
delay(5000); // Задержка работы двигателя шнека
digitalWrite(in2, LOW); // Выключаем двигатель шнека
delay(5000); // Пауза 5 сек
digitalWrite(in1, LOW); // Выключаем реле подачи воздуха пресс формы
delay(3000); // Пауза перед повторным циклом
}
и хотелось бы прикрутить светодиды для индикации - включили- засветился светодиод, выключили - засветился второй светодиод, а первый потух.
pred161, самая большая проблема в том что у вас даже отстутсует база для поминамия как правильно.
к сожалению - да(( Могу только готовые проекты повторять(((( но вот загорелся сам сделать.. но увы тяму не хватает((( проект разовый.. но интерес огромный..
Поставьте кнопку с фиксацией и подсветкой. В конце лупа проверяйте её состояние: замкнута - тормозим и ждём, пока разокнётся;, разомкнута - заходим на новый круг.
Вы чутка не поняли - кнопку нажали - запустился непрерывный цикл. Нажали повторно - программа дошла до конца и прерывает работу цикла. как то так..
ЕвгенийП доходчиво расписал http://arduino.ru/forum/programmirovanie/7-i-zonnoe-osveshchenievklvykl-s-raznykh-vyklyuchatelei#comment-404598
Если переходы между состояниями конечного автомата только по времени, то можно еще проще.
Тогда в начале лупа проверку состояния кнопки с фиксацией: нажата - проходим дальше и "включаем/выключаем" пины, не нажата - не проходим и ничего не делаем.
такая реализация подходит замечательно)) вот только как это программно реализовать.. по поводу написания такого - опилки в голове (пока что... думаю дальше разберусь.)
http://arduino.ru/tutorials/button
Можно вывалиться из loop() через if(проверка_на_разомкнутую_кнопку) return; или же сделать бесконечный цикл while(проверка_на_разомкнутую_кнопку);
Можно вывалиться из loop() через if(проверка_на_разомкнутую_кнопку) return; или же сделать бесконечный цикл while(проверка_на_разомкнутую_кнопку);
Как реализовать while ? не могли бы Вы черкануть эту строку кода и куда её вставить?
Изучите цифровой автомат. А потом уже решайте свою задачу.
ПС: #258
Я не могу указать куда её вставить, потому как в Вашем коде нет номеров строк. Это следствие того, что Вы не удосужились, как новичок, посетить "Песочницу" и ознакомиться с правилами форума, в которых рассказано, как вставить программный код в пост правильно.
извиняюсь...
const int buttonPin = 2; // номер входа, подключенный к кнопке int buttonState = 0; // переменная для хранения состояния кнопки int in1 = 5; // Реле подачи воздуха (цифровой 5 пин) int in2 = 6; // Реле работы двигателя шнека (цифровой 6 пин) void setup() { pinMode(buttonPin, INPUT); pinMode(in1, OUTPUT); // Установим вывод 5 как выход pinMode(in2, OUTPUT); // Установим вывод 6 как выход } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) delay(2000); // Задержка перед началом работы digitalWrite(in1, HIGH); // Включаем реле подачи воздуха пресс формы delay(3000); // Пауза 3 сек digitalWrite(in2, HIGH); // Включаем реле delay(5000); // Задержка работы двигателя шнека digitalWrite(in2, LOW); // Выключаем двигатель шнека delay(5000); // Пауза 5 сек digitalWrite(in1, LOW); // Выключаем реле подачи воздуха пресс формы delay(3000); // Пауза перед повторным циклом }Вместо строк 15 и 16:
На месте вопросительных знаков то состояние (HIGH или LOW), которое соответствует разомкнутой кнопке.
Залил скетч - отрабатывает как надо ! за что Вам Огромное спасибо ! Да и всем спсасибо кто откликнулся в теме ! Приятно когда на форуме присутствуют люди - которые *реально* помогают новичкам , а то многие - *Иди изучай* !! канечно согласен что изучать нужно, но такая помощь необходима некоторым ! я вот сейчас доделаю всё в железе - и сяду плотно изучать ардуино ! Еще раз Спасибо !!
кнопку - нажал - программа запустилась циклично, нажал повторно - программа дошла до конца и цикл завершился. Может кто поможет? Вот программка:
ДА поймать повторное нажатие кнопки с таким количеством ДЕЛАЙ, это надо постараться. Попробуйте так может будет удобней
#define buttonPin 2 // номер входа, подключенный к кнопке uint8_t buttonState = 0; // переменная для хранения состояния кнопки int in1 = 5; // Реле подачи воздуха (цифровой 5 пин) int in2 = 6; // Реле работы двигателя шнека (цифровой 6 пин) uint32_t pausa; bool f_button = 0; uint8_t step = 0; uint16_t time = 2000; void setup() { pinMode(buttonPin, INPUT); pinMode(in1, OUTPUT); // Установим вывод 5 как выход pinMode(in2, OUTPUT); // Установим вывод 6 как выход } void loop(){ if(digitalRead(buttonPin) == HIGH && f_button == 0){ delay(20); if(digitalRead(buttonPin) == HIGH){ buttonState++; f_button = 1; pausa = millis(); } } if(digitalRead(buttonPin) == LOW)f_button = 0; if(buttonState) { if(millis() - pausa >= time) { pausa = millis(); switch(step) { case 0: digitalWrite(in1, HIGH); // Включаем реле подачи воздуха пресс формы time = 3000; step++; break; case 1: digitalWrite(in2, HIGH); // Включаем реле time = 5000; step++; break; case 2: digitalWrite(in2, LOW); // Выключаем двигатель шнека step++; break; case 3: digitalWrite(in1, LOW); // Включаем реле подачи воздуха пресс формы time = 3000; step = 0; if(buttonState > 1)buttonState = 0; break; } } } }