Скетч что бы один раз запускалась функция if после её вполнения что бы выполнялась другая функция, кнопка с фиксацией
- Войдите на сайт для отправки комментариев
Втр, 15/03/2016 - 18:35
Есть скажем так кнопка с фиксацией, нужно сделать так что бы нажал кнопку на входе ардуины появляется лог. 1 и запустилась функция которая выполняется 10с., после чего она больше не должна выполняться, а выполняется потом другая функция циклично,но когда нажимаешь кнопку опять - тоесть переход с 1 в 0(задний фронт), переходит в третью функцию(дежурный режим). Потом опять когда нажал то есть перешёл с 0 в 1(передний фронт), должна опять запуститься первая функция на 40с., ну вообщем всё тоже самое.
Набросал так но оно не работает как нужно
#include <UTFT.h> UTFT myGLCD(ILI9486,38,39,40,41); extern uint8_t BigFont[]; extern uint8_t SmallFont[]; void _PCINT9Enable() { PCMSK1 |= _BV(PCINT9); PCICR |= _BV(PCIE1); } long loopTime = 10000; // 40c int label; int razrab = 3; int i=0; int a=0; int b=0; int c=0; int d=0; int e=0; int f=0; int g=0; int h=0; int k=0; int l=0; int m=0; int n=0; int malo=19; int polovina=18; int polniy=15;//PCINT9 int outsoundbakpust = A13; // переменная для пищика int outfire=7; void setup() { attachInterrupt(2,pusk, CHANGE); attachInterrupt(4,malo2, CHANGE); attachInterrupt(5,polovina2, CHANGE); _PCINT9Enable(); myGLCD.InitLCD(); myGLCD.clrScr(); pinMode( malo, INPUT); pinMode(polovina, INPUT); pinMode(polniy, INPUT); pinMode(outfire, OUTPUT); pinMode(outsoundbakpust, OUTPUT); } void loop() {// Главная циклическая функция if(digitalRead (razrab)!= 0){ delay(50); myGLCD.clrScr(); while(f<1) { digitalWrite(outsoundbakpust, 1); delay(700); digitalWrite(outsoundbakpust, 0); f++; } while(i < 1) {if(digitalRead (razrab)!= 0){ delay(50); if ( digitalRead (razrab)!= 1){ delay(30); break; } myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_AQUA); myGLCD.print("FIRE", CENTER, 20); unsigned long currentMillis = millis(); while(millis()-currentMillis<=loopTime) {digitalWrite(outfire, 1); i++; if ( digitalRead (razrab)!= 1){ delay(30); break; } } } if(digitalRead(malo)==0&&digitalRead(polovina)==0&&digitalRead(polniy)==0){ delay(30); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_RED); myGLCD.print("Rabota", CENTER, 20); myGLCD.setColor(VGA_RED); myGLCD.print("Polniy bak", CENTER, 50); myGLCD.setColor(VGA_GREEN); myGLCD.fillRect(430, 40 ,460 ,260); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva", RIGHT, 290); return; } if(digitalRead(malo)==0&&digitalRead(polovina)==0&&digitalRead(polniy)==1){ delay(30); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_RED); myGLCD.print("Rabota", CENTER, 20); myGLCD.setColor(VGA_RED); myGLCD.print("Polovina baka", CENTER, 50); myGLCD.setColor(VGA_RED); myGLCD.setColor(VGA_GREEN); myGLCD.fillRect (430, 260 ,460 ,150); myGLCD.drawRect(430, 40 ,460 ,150); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva", RIGHT, 290); return; } if(digitalRead(malo)==0&&digitalRead(polovina)==1 &&digitalRead(polniy)==1){ delay(30); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_RED); myGLCD.print("Rabota", CENTER, 20); myGLCD.setColor(VGA_RED); myGLCD.print("Malo topliva", CENTER, 50); myGLCD.setColor(VGA_RED); myGLCD.setColor(VGA_GREEN); myGLCD.fillRect (430, 260 ,460 ,220); myGLCD.drawRect(430, 40 ,460 ,220); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva", RIGHT, 290); return;} return;} return;} else if(digitalRead(razrab)==0){ while(a<1) { digitalWrite(outsoundbakpust, 1); delay(700); digitalWrite(outsoundbakpust, 0); a++; } if( digitalRead(malo)==0&&digitalRead(polovina)==0&&digitalRead(polniy)==0 ){ delay(30); while(f<1) { myGLCD.clrScr(); f++; } myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_RED); myGLCD.print("Polniy bak", CENTER, 50); myGLCD.setColor(VGA_GREEN); myGLCD.fillRect(430, 40 ,460 ,260); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva", RIGHT, 290); return;} if( digitalRead(malo)==0&&digitalRead(polovina)==0&&digitalRead(polniy)==1){ delay(30); while(g<1) { myGLCD.clrScr(); g++; } digitalWrite(outfire, 0); myGLCD.setFont(BigFont); myGLCD.setColor(VGA_RED); myGLCD.print("Polovina baka", CENTER, 50); myGLCD.setColor(VGA_RED); myGLCD.setColor(VGA_GREEN); myGLCD.fillRect (430, 260 ,460 ,150); myGLCD.drawRect(430, 40 ,460 ,150); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva", RIGHT, 290); return;} if(digitalRead(malo)==0&&digitalRead(polovina)==1 &&digitalRead(polniy)==1){ delay(30); while(h<1) { myGLCD.clrScr(); h++; } digitalWrite(outfire, 0); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_RED); myGLCD.print("Malo topliva", CENTER, 50); myGLCD.setColor(VGA_RED); myGLCD.setColor(VGA_GREEN); myGLCD.fillRect (430, 260 ,460 ,220); myGLCD.drawRect(430, 40 ,460 ,220); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva", RIGHT, 290); return;} if(digitalRead(malo)==1&&digitalRead(polovina)==1 &&digitalRead(polniy)==1) { delay(30); while(h<1) { myGLCD.clrScr(); h++; } digitalWrite(outfire, 0); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_RED); myGLCD.print("bak pust", CENTER, 50); myGLCD.setColor(VGA_GREEN); myGLCD.drawRect(430, 40 ,460 ,260); myGLCD.setFont(BigFont);// включаем большой шрифт myGLCD.setColor(VGA_GREEN); myGLCD.print("Uroven", RIGHT, 270); myGLCD.print("topliva",RIGHT, 290); return;} return; } return;} void pusk() {static unsigned long millis_prev3; if(millis()-100 > millis_prev3) millis_prev3 = millis(); i=0; f=0; myGLCD.clrScr(); } void malo2() {static unsigned long millis_prev4; if(millis()-100 > millis_prev4) millis_prev4 = millis(); a=0; myGLCD.clrScr(); } void polovina2() {static unsigned long millis_prev5; if(millis()-100 > millis_prev5) millis_prev5 = millis(); b=0; myGLCD.clrScr(); } ISR(PCINT9_vect) // полный бак {static unsigned long millis_prev7; if(millis()-100 > millis_prev7) millis_prev7 = millis(); // задержка c=0; }
а по нормальному код показать слабо ))))
Не много подправил то что я хочу. Есть скажем так кнопка с фиксацией, нужно сделать так что бы когда кнопка не нажата крутится одна функция if(скажем так дежурный режим),нажал кнопку на входе ардуины появляется лог. 1 и запустилась функция номер 2(первая при этом отключается) которая выполняется 10с., после чего она больше не должна выполняться, а выполняется третья функция циклично,но когда нажимаешь кнопку опять - то есть переход с 1 в 0(задний фронт), переходит в первую функцию(дежурный режим). Потом опять когда нажал то есть перешёл с 0 в 1(передний фронт), должна опять запуститься вторая функция на 10с., ну вообщем всё тоже самое.
Набросал так но оно не работает как нужно
когда кнопка не нажата крутится одна функция if
Это невозможно.
В языке нет и не может быть функции if. Это слово зарезервировано и в качестве имени функции использоваться не может.
Ну условие, не суть в названии
Суть в том, что понять то, что Вы написали невозможно. Вы не знаете языка и при этом пытаетесь на нём что-то выразить.
Почитайте Кернигана и Ритчи. Разберитесь с языком, тогда подобные вопросы просто не будут возникать.
Всё уже правильно описал. Есть кнопка с фиксацией, нужно сделать так что бы когда кнопка не нажата крутится одно условие if(скажем так дежурный - режим когда кнопка не нажата то есть равна 0),нажал кнопку на входе ардуины появляется лог. 1 и запустилось условие номер 2 (первое условие соответственно не работает) которое запускает цикл на 10с., после чего цикл больше не должен выполняться, а выполняется второе условие циклично(но в нём не выполняется цикл который равен 10с.),но когда нажимаешь кнопку опять - то есть переход с 1 в 0(задний фронт), переходит в первое условие (дежурный режим- режим когда кнопка не нажата то есть равна 0). Потом опять когда нажал то есть перешёл с 0 в 1(передний фронт), должно опять запуститься второе условие и одноразово выполниться цикл 10с., ну вообщем всё тоже самое.
Всё спасибо, уже сам разобрался.