Скетч что бы один раз запускалась функция 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с., ну вообщем всё тоже самое.
Набросал так но оно не работает как нужно
#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)!= 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
Это невозможно.
В языке нет и не может быть функции if. Это слово зарезервировано и в качестве имени функции использоваться не может.
Ну условие, не суть в названии
Суть в том, что понять то, что Вы написали невозможно. Вы не знаете языка и при этом пытаетесь на нём что-то выразить.
Почитайте Кернигана и Ритчи. Разберитесь с языком, тогда подобные вопросы просто не будут возникать.
Всё уже правильно описал. Есть кнопка с фиксацией, нужно сделать так что бы когда кнопка не нажата крутится одно условие if(скажем так дежурный - режим когда кнопка не нажата то есть равна 0),нажал кнопку на входе ардуины появляется лог. 1 и запустилось условие номер 2 (первое условие соответственно не работает) которое запускает цикл на 10с., после чего цикл больше не должен выполняться, а выполняется второе условие циклично(но в нём не выполняется цикл который равен 10с.),но когда нажимаешь кнопку опять - то есть переход с 1 в 0(задний фронт), переходит в первое условие (дежурный режим- режим когда кнопка не нажата то есть равна 0). Потом опять когда нажал то есть перешёл с 0 в 1(передний фронт), должно опять запуститься второе условие и одноразово выполниться цикл 10с., ну вообщем всё тоже самое.
Всё спасибо, уже сам разобрался.