Помогите с программой
- Войдите на сайт для отправки комментариев
Чт, 11/02/2016 - 11:06
Вобщем написал программу. В которой две тактовые кнопки и 6 электроклапанов. клапаны срабатывают поочереди. Условие начала срабатывание что обе кнопки дают сигнал на пины. по нажатию и отпусканию кнопки buttonState2 программа должна прекратить срабатывание клапанов. так вот не могу добиться этого. Помогите пожалуйста.
const int buttonPin2 = 12;
const int buttonPin = 10; // the number of the pushbutton pin
const int rel1 = 11;
const int rel2 = 9;
const int rel3 = 8;
const int rel4 = 7;
const int rel5 = 6;
const int rel6 = 5;
const int rel7 = 4;
const int rel8 = 3;
// variables will change:
int buttonState = 0;
int buttonState2 = 0;
// variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(rel1, OUTPUT);
pinMode(rel2, OUTPUT);
pinMode(rel3, OUTPUT);
pinMode(rel4, OUTPUT);
pinMode(rel5, OUTPUT);
pinMode(rel6, OUTPUT);
pinMode(rel7, OUTPUT);
pinMode(rel8, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
buttonState2 = digitalRead(buttonPin2);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH && buttonState2 == HIGH)
{
// turn LED on:
digitalWrite(rel8,HIGH);
}
else
{
digitalWrite(rel8,LOW);
}
if (rel8 == HIGH)
{
delay(60000);
digitalWrite(rel1, HIGH);
delay(500);
digitalWrite(rel1, LOW);
delay(10000);
digitalWrite(rel2, HIGH);
delay(500);
digitalWrite(rel2, LOW);
delay(10000);
digitalWrite(rel3, HIGH);
delay(500);
digitalWrite(rel3, LOW);
delay(10000);
digitalWrite(rel4, HIGH);
delay(500);
digitalWrite(rel4, LOW);
delay(10000);
digitalWrite(rel5, HIGH);
delay(500);
digitalWrite(rel5, LOW);
delay(10000);
digitalWrite(rel6, HIGH);
delay(500);
digitalWrite(rel6, LOW);
delay(10000);
digitalWrite(rel7, HIGH);
delay(500);
digitalWrite(rel7, LOW);
digitalWrite(rel8,LOW);
}
}
Это что за зляк такой?))) У вас с delay'ем не прекратиться тут ничего пока весь код с 51 по 83 строчки не выполнится... Уходите от delay, изучив пример BlinkWithoutDelay
Привет попробуйте.
Где добавить ваш код указал
bj2000 у вас пауз delay на 12сукунд, при работе реле учтите что кнопку нужно будет удерживать-пока все они не пройдут.
Не парьтесь на счет пауз, вам нужно то что вы хотите воплощать в код любыми методами, вот когда все будете писать без хелпа и примеров, с головы тогда и начнете совершенствовать свой код.
В коде delay больше 1000 считаю плохо но не смертельно))))
Спасибо за коментарии я просто только начинаю и всех тонкостей пока не изучил.
bj2000 у вас пауз delay на 12сукунд,
Нолик потеряли)))
Там должна быть пауза 60 секунд и потом 0.5 секунды срабатывает реле и пауза 10 секунд до следующего релеюи так 6 штук. Только в начале пауза большая.
Кнопку держать не надо так как реле 8 реализует самоподхват кнопки до конца срабатывания клапанов
Кнопку держать не надо так как реле 8 реализует самоподхват кнопки до конца срабатывания клапанов
Вы наверное не совсем поняли почему все так против delay, как только до него доходит код-контроллер ничего не делает только ждет окончание этой команды!
И если программа дойдет до 55-й строки вашего кода то среагировать на кнопки сможет только через 120секунд.
Я все прекрасно понял , только знаний пока не хватает у меня. Вот я и прошу помощи ). Ваш код не работает. Без delay не получается у меня сделать. Buttonstate2 на размыкание.
Я думал вам нужно управление двумя кнопками, нажали обе запустились реле, нажали только вторую выключились реле.
Зачем самоподхват это же не аналоговая техника все можно указать в коде.
Непонятен алгоритм, хотел помочь.
Алгоритм такой. Одна кнопка на замыкание, а вторая на размыкание . Нажимаем и отпускаем кнопку 1 начинается работа клапанов и если в процессе работы клапанов нажать и отпустить 2 кнопку то программа прекращается. Буду очень признателен если поможете и я смогу поучиться.
Теперь ясно.
одна кнопка включила, вторая выключила.
вот код
//для bj2000 с форума Arduino.ru #define buttonPin2 12 #define buttonPin 10 #define rel1 11 #define rel2 9 #define rel3 8 #define rel4 7 #define rel5 6 #define rel6 5 #define rel7 4 #define rel8 3 void setup() { pinMode(rel1, OUTPUT); pinMode(rel2, OUTPUT); pinMode(rel3, OUTPUT); pinMode(rel4, OUTPUT); pinMode(rel5, OUTPUT); pinMode(rel6, OUTPUT); pinMode(rel7, OUTPUT); pinMode(rel8, OUTPUT); pinMode(buttonPin, INPUT); pinMode(buttonPin2, INPUT); } void loop() { if (digitalRead(buttonPin) == HIGH){ //Врубаем реле ваш код } if(digitalRead(buttonPin2) == HIGH){ //Выключаем реле ваш код } }Так в моем коде delay останется?
Там где я указал ваш код строка 26 пишите включение реле в своем порядке хоти-те с delay хоти-те без.
в строке 29 пишите отключение.
Я так понял, из кода, что у Вас не кнопки а переключатели. Тогда пример такой а если кнопки то надо код по кнопкам подправить. Не проверял но должно работать, проверьте!!!
#define buttonPin2 12 #define buttonPin 10 // the number of the pushbutton pin #define rel1 11 #define rel2 9 #define rel3 8 #define rel4 7 #define rel5 6 #define rel6 5 #define rel7 4 #define rel8 3 byte f_status =1; unsigned long time = millis(); int t = 0; // variables will change: int buttonState = 0; int buttonState2 = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(rel1, OUTPUT); pinMode(rel2, OUTPUT); pinMode(rel3, OUTPUT); pinMode(rel4, OUTPUT); pinMode(rel5, OUTPUT); pinMode(rel6, OUTPUT); pinMode(rel7, OUTPUT); pinMode(rel8, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); pinMode(buttonPin2, INPUT); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); buttonState2 = digitalRead(buttonPin2); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH && buttonState2 == HIGH) { // turn LED on: digitalWrite(rel8,HIGH); } else { digitalWrite(rel8,LOW); f_status=1; } if (rel8 == HIGH) { switch (f_status) { case 1: if (millis()-time>=t) { digitalWrite(rel1, HIGH); t=500; time=millis(); f_status=2; } break; case 2: if (millis()-time>=t) { digitalWrite(rel1, LOW); t=1000; time=millis(); f_status=3; } break; case 3: if (millis()-time>=t) { digitalWrite(rel1, HIGH); t=500; time=millis(); f_status=4; } break; case 4: if (millis()-time>=t) { digitalWrite(rel1, LOW); t=1000; time=millis(); f_status=5; } break; case 5: if (millis()-time>=t) { digitalWrite(rel2, HIGH); t=500; time=millis(); f_status=6; } break; case 6: if (millis()-time>=t) { digitalWrite(rel2, LOW); t=1000; time=millis(); f_status=7; } break; case 7: if (millis()-time>=t) { digitalWrite(rel3, HIGH); t=500; time=millis(); f_status=8; } break; case 8: if (millis()-time>=t) { digitalWrite(rel3, LOW); t=1000; time=millis(); f_status=9; } break; case 9: if (millis()-time>=t) { digitalWrite(rel4, HIGH); t=500; time=millis(); f_status=10; } break; case 10: if (millis()-time>=t) { digitalWrite(rel4, LOW); t=1000; time=millis(); f_status=11; } break; case 11: if (millis()-time>=t) { digitalWrite(rel5, HIGH); t=500; time=millis(); f_status=12; } break; case 12: if (millis()-time>=t) { digitalWrite(rel5, LOW); t=1000; time=millis(); f_status=13; } break; case 13: if (millis()-time>=t) { digitalWrite(rel6, HIGH); t=500; time=millis(); f_status=14; } break; case 14: if (millis()-time>=t) { digitalWrite(rel6, LOW); t=1000; time=millis(); f_status=15; } break; case 15: if (millis()-time>=t) { digitalWrite(rel7, HIGH); t=500; time=millis(); f_status=16; } break; case 16: if (millis()-time>=t) { digitalWrite(rel7, LOW); t=6000; time=millis(); f_status=1; } break; } } }Проверил, программа работает вот только клапана не срабатывают.
Смените 55
строчкуif(rel8 == HIGH)на if (digitalRead(rel8) == HIGH)vosara спасибо большое программа работает, а как сделать перед началом срабатывания 1го реле 60 сек задержку?
#define buttonPin2 12 #define buttonPin 10 // the number of the pushbutton pin #define rel1 11 #define rel2 9 #define rel3 8 #define rel4 7 #define rel5 6 #define rel6 5 #define rel7 4 #define rel8 3 byte f_status = 0; unsigned long time = millis(); int t = 0; // variables will change: int buttonState = 0; int buttonState2 = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(rel1, OUTPUT); pinMode(rel2, OUTPUT); pinMode(rel3, OUTPUT); pinMode(rel4, OUTPUT); pinMode(rel5, OUTPUT); pinMode(rel6, OUTPUT); pinMode(rel7, OUTPUT); pinMode(rel8, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); pinMode(buttonPin2, INPUT); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); buttonState2 = digitalRead(buttonPin2); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH && buttonState2 == HIGH) { // turn LED on: digitalWrite(rel8, HIGH); } else { digitalWrite(rel8, LOW); f_status = 0; } if (digitalRead(rel8) == HIGH) { switch (f_status) { case 0: t = 60000; if (millis() - time >= t) { f_status = 1; t = 0; } break; case 1: if (millis() - time >= t) { digitalWrite(rel1, HIGH); t = 500; time = millis(); f_status = 2; } break; case 2: if (millis() - time >= t) { digitalWrite(rel1, LOW); t = 1000; time = millis(); f_status = 3; } break; case 3: if (millis() - time >= t) { digitalWrite(rel1, HIGH); t = 500; time = millis(); f_status = 4; } break; case 4: if (millis() - time >= t) { digitalWrite(rel1, LOW); t = 1000; time = millis(); f_status = 5; } break; case 5: if (millis() - time >= t) { digitalWrite(rel2, HIGH); t = 500; time = millis(); f_status = 6; } break; case 6: if (millis() - time >= t) { digitalWrite(rel2, LOW); t = 1000; time = millis(); f_status = 7; } break; case 7: if (millis() - time >= t) { digitalWrite(rel3, HIGH); t = 500; time = millis(); f_status = 8; } break; case 8: if (millis() - time >= t) { digitalWrite(rel3, LOW); t = 1000; time = millis(); f_status = 9; } break; case 9: if (millis() - time >= t) { digitalWrite(rel4, HIGH); t = 500; time = millis(); f_status = 10; } break; case 10: if (millis() - time >= t) { digitalWrite(rel4, LOW); t = 1000; time = millis(); f_status = 11; } break; case 11: if (millis() - time >= t) { digitalWrite(rel5, HIGH); t = 500; time = millis(); f_status = 12; } break; case 12: if (millis() - time >= t) { digitalWrite(rel5, LOW); t = 1000; time = millis(); f_status = 13; } break; case 13: if (millis() - time >= t) { digitalWrite(rel6, HIGH); t = 500; time = millis(); f_status = 14; } break; case 14: if (millis() - time >= t) { digitalWrite(rel6, LOW); t = 1000; time = millis(); f_status = 15; } break; case 15: if (millis() - time >= t) { digitalWrite(rel7, HIGH); t = 500; time = millis(); f_status = 16; } break; case 16: if (millis() - time >= t) { digitalWrite(rel7, LOW); t = 6000; time = millis(); f_status = 1; } break; } } }Программа работает только из цикла не выходит после 6го клапана.
Да программа закольцована специально, Я посмотрев ваш код подумал что так и должно быть пока рел8 включено. других условий Вы не оговаривали.