Скетч что бы один раз запускалась функция if после её вполнения что бы выполнялась другая функция, кнопка с фиксацией

Roman2344
Offline
Зарегистрирован: 09.09.2015

Есть скажем так кнопка с фиксацией, нужно сделать так что бы нажал кнопку на входе ардуины появляется лог. 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;
}




 

vvadim
Offline
Зарегистрирован: 23.05.2012

а по нормальному код показать слабо ))))

Roman2344
Offline
Зарегистрирован: 09.09.2015

Не много подправил то что я хочу. Есть скажем так кнопка с фиксацией, нужно сделать так что бы когда кнопка не нажата крутится одна функция 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;
}




 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Roman2344 пишет:

 когда кнопка не нажата крутится одна функция if

Это невозможно.

В языке нет и не может быть функции if. Это слово зарезервировано и в качестве имени функции использоваться не может.

Roman2344
Offline
Зарегистрирован: 09.09.2015

Ну условие, не суть в названии

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Суть в том, что понять то, что Вы написали невозможно. Вы не знаете языка и при этом пытаетесь на нём что-то выразить.

Почитайте Кернигана и Ритчи. Разберитесь с языком, тогда подобные вопросы просто не будут возникать.

 

Roman2344
Offline
Зарегистрирован: 09.09.2015

Всё уже правильно описал. Есть кнопка с фиксацией, нужно сделать так что бы когда кнопка не нажата крутится одно условие if(скажем так дежурный - режим когда кнопка не нажата то есть равна 0),нажал кнопку на входе ардуины появляется лог. 1 и запустилось условие номер 2 (первое условие соответственно не работает) которое запускает цикл на 10с., после чего цикл больше не должен выполняться, а выполняется второе условие циклично(но в нём не выполняется цикл который равен 10с.),но когда нажимаешь кнопку опять - то есть переход с 1 в 0(задний фронт), переходит в первое условие (дежурный режим- режим когда кнопка не нажата то есть равна 0). Потом опять когда нажал то есть перешёл с 0 в 1(передний фронт), должно опять запуститься второе условие и одноразово выполниться цикл 10с., ну вообщем всё тоже самое.

Roman2344
Offline
Зарегистрирован: 09.09.2015

Всё спасибо, уже сам разобрался.