Сброс времени во время работы

nomaner
Offline
Зарегистрирован: 16.06.2016

Господа.подскажите пожалуйста как сделать так что бы когда работает отсчет времени введенный с тача , его можно было принудительно сбросить на 0 кнопкой тача.в коде видно что попытался воткнуть в цикл отсчета кнопку сброса , но она не работает (даже не нажимается, по истечение времение если нажать на кнопку сброса , начинает отсчет 20 секунд , как будто он ее не отличает от кнопки 20 секунд . как бы по другому сделать сброс нажатием ? скобки начала и конца могут не совпадать , так как просто выдернул часть кода :)

   while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
       
 
 
     if ((y>=10) && (y<=100))  // 
      {
        if ((x>=10) && (x<=100))  //
        {
          waitForIt(10, 10, 100, 100);
          digitalWrite(8, HIGH);
          l=20;
          for (t=0;t<l;)     
     {   
         l=l-1;
         myGLCD.setFont(SevenSegNumFont);
         myGLCD.setBackColor(0, 0,0);
         myGLCD.setColor(255, 0, 0);
         myGLCD.printNumI (l, 120, 116);
         delay(1000);
         myGLCD.setColor(0, 0, 0);
         myGLCD.fillRoundRect (111, 111, 198, 168);   
         if ((y>=110) && (y<=170))  
      {
        if ((x>=10) && (x<=100))  //
        {
          waitForIt(10, 110, 100, 170);
          l=0;
        }
      }
        }
           digitalWrite(8,LOW);
        }
        }
      
     
        if ((x>=110) && (x<=200))  // 
        {
 
          waitForIt(110, 100, 200, 100);
          digitalWrite(8, HIGH);
          l=35;
          for (t=0;t<l;)
      {
        l=l-1;
         myGLCD.setFont(SevenSegNumFont);
         myGLCD.setBackColor(0, 0,0);
        myGLCD.setColor(255, 0, 0);
         myGLCD.printNumI (l, 120, 116);
         delay(1000);
         myGLCD.setColor(0, 0, 0);
         myGLCD.fillRoundRect (111, 111, 198, 168);
        }
           digitalWrite(8,LOW);
        }
   if ((x>=210) && (x<=300))  // 
        {
 
          waitForIt(210, 10, 300, 100);
          digitalWrite(8, HIGH);
          l=50;
          for (t=0;t<l;)
      {
        l=l-1;
         myGLCD.setFont(SevenSegNumFont);
         myGLCD.setBackColor(0, 0,0);
        myGLCD.setColor(255, 0, 0);
         myGLCD.printNumI (l, 120, 116);
         delay(1000);
         myGLCD.setColor(0, 0, 0);
   myGLCD.fillRoundRect (111, 111, 198, 168);
        }
           digitalWrite(8,LOW);
        }
      }
        if ((y>=180) && (y<=227))   
      {
        if ((x>=10) && (x<=300)) 
        {
          waitForIt(10, 180, 300, 227);
          str1();
        }
      } 
      
  }   
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Код вставляется вот так - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

2. У Вас в трёх местах стоят "delay(1000);". Вы всерьёз надеетесь, что при этом ещё и кнопки будут работать?

delay можно использовать, когда точно известно, что контроллеру в это время нечем заняться. Если же он должен контролировать нажатие кнопки, то извините, с delay это несовместимо. Убирайте delay или забудьте про обработку кнопок.

 

nomaner
Offline
Зарегистрирован: 16.06.2016

3 раза потому что 3 разные кнопки с 3 разными значениями времени , они же не одновременно все работают а по выбору. А как же тогда запилить секундный отсчет без delay ? Какие функции использовать ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

nomaner пишет:
3 раза потому что 3 разные кнопки с 3 разными значениями времени , они же не одновременно все работают а по выбору.

Пока выполняется delay()  - всё остальное ждёт, никакие кнопки не обрабатываются.

nomaner пишет:

А как же тогда запилить секундный отсчет без delay ? Какие функции использовать ?

millis()

http://arduino.ru/tutorials/BlinkWithoutDelay

http://robocraft.ru/blog/arduino/385.html

fogary
Offline
Зарегистрирован: 05.03.2016

Не по теме вопроса.

myTouch.read();
x=myTouch.getX();
y=myTouch.getY();

if ((y>=10) && (y<=100))  // 
{
    if ((x>=10) && (x<=100))  //
    {
        waitForIt(10, 10, 100, 100);
        digitalWrite(8, HIGH);
        l=20;
        for (t=0;t<l;)     
        {   
            l=l-1;
            myGLCD.setFont(SevenSegNumFont);
            myGLCD.setBackColor(0, 0,0);
            myGLCD.setColor(255, 0, 0);
            myGLCD.printNumI (l, 120, 116);
            delay(1000);
            myGLCD.setColor(0, 0, 0);
            myGLCD.fillRoundRect (111, 111, 198, 168);   
            if ((y>=110) && (y<=170))  
            {
                if ((x>=10) && (x<=100))  //
                {
                    waitForIt(10, 110, 100, 170);
                    l=0;
                }
            }
        }
        digitalWrite(8,LOW);
    }
}

Как при соблюдении условия

if ((y>=10) && (y<=100))

может выполниться условие?

if ((y>=110) && (y<=170))

К тому же, вместо того, что бы издеваться над циклом for(), не логичнее использовать while()?

l = 20;
while (l > 0)     
{
. . .

 

nomaner
Offline
Зарегистрирован: 16.06.2016

fogary пишет:

Как при соблюдении условия

if ((y>=10) && (y<=100))

может выполниться условие?

if ((y>=110) && (y<=170))

К тому же, вместо того, что бы издеваться над циклом for(), не логичнее использовать while()?

l = 20;
while (l > 0)     
{
. . .

 

оп не туда посмотрел , оно как бы внутри цикла уже задается , тоесть первое нажатие и запустился цикл , а вторым нажатием я типа проверяю если нажата другая область то ... 

что первое пришло на ум то и воспроизвел )) как программа будет написана до конца тогда можно и подумать как ее оптимизаровать если будет необходимость ,а так первозадача отключение )

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

nomaner пишет:
А как же тогда запилить секундный отсчет без delay ?
Насчёт пиления - это к чиновникам, я - не специалист.

А секундные и всяуие прочие отсчёты делаются 100500 способами, один из них - с ипользованием функции millis, как Вам уже сказали.

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

nomaner пишет:

что первое пришло на ум то и воспроизвел )) как программа будет написана до конца тогда можно и подумать как ее оптимизаровать если будет необходимость ,а так первозадача отключение )

Так может сначала напишете аккуратно (как можете), а потом уж, если не получится, за советом обратитесь? А то люди время тратят, смотрят. замечания пишут, а это, оказывается, просто "первое пришло на ум". Вы уверены, что людям больше заняться нечем, кроме как иучать особенности логистики Вашей головы?

nomaner
Offline
Зарегистрирован: 16.06.2016

 

[/quote]

Так может сначала напишете аккуратно (как можете), а потом уж, если не получится, за советом обратитесь? А то люди время тратят, смотрят. замечания пишут, а это, оказывается, просто "первое пришло на ум". Вы уверены, что людям больше заняться нечем, кроме как иучать особенности логистики Вашей головы?

[/quote]

еслиб я знал что delay блокирует работу( в описание функций которое я нашел про это умолчали), я бы не обратился за помощью , еслиб бы на форуме был поиск я бы тоже скорей всего нашел что искал , ну извините что я думаю не как вы и использую for заместо while , мой уровень корень даже не пень(все сводится к университетскому курсу информатики) и глупо меня обвинять в том что я с самого начала не начал писать программу как профи !!

все когда то начинали как умеют , в этом нет ни чего постыдного , и за помощью я обращаюсь когда захожу в тупик а не просто так что бы кто то за меня что то написал . Впринцепи первый ответ что delay блокирует работу почти всего я усвоил, дальше уже другой вопрос как его обходить на который любезно тут же дали ответ.

P.S. Всем спасибо я получил ответ и даже больше (код для обхода ). А Вам ЕвгенийП прежде чем обвинять стоит дождаться фразы "может кто может программу написать" или что то подобное

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

nomaner пишет:

еслиб я знал что delay блокирует работу( в описание функций которое я нашел про это умолчали)

Не надо самооправдываться, плз - вы просто не хотели увидеть то, что написано вот прямо на заборе, https://www.arduino.cc/en/Reference/Delay :

Цитата:

Pauses the program for the amount of time

nomaner
Offline
Зарегистрирован: 16.06.2016

Щас уже увидел , я просто качал сразу мануал с описаниями функций переменных и все что надо знать тем кто только скачал программу и там много полезного но и недосказки есть. Все закрыли тему , добрые люди помогли,где то сам недосмотрел,тоже виноват что доверяю только первому что увидел.

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

nomaner пишет:

еслиб я знал что delay ... глупо меня обвинять в том что я с самого начала не начал писать программу как профи !!

Не надо лохматить бабушку, в этом Вас никто не обвиняет. Вы сами написали "оп не туда посмотрел ... что первое пришло на ум то и воспроизвел" и это было вовсе не про delay. 

Вас вообще никто и ни в чём не обвиняет, Вам советуют прежде чем дёргать людей посмотреть и подумать самому, а не устраивать цирк с "первым, что пришло в голову".

А про делэй, я Вам кажется, первым написал.

nomaner
Offline
Зарегистрирован: 16.06.2016

ЕвгенийП пишет:

Не надо лохматить бабушку, в этом Вас никто не обвиняет. Вы сами написали "оп не туда посмотрел ... что первое пришло на ум то и воспроизвел" и это было вовсе не про delay. 

Вас вообще никто и ни в чём не обвиняет, Вам советуют прежде чем дёргать людей посмотреть и подумать самому, а не устраивать цирк с "первым, что пришло в голову".

А про делэй, я Вам кажется, первым написал.

Спасибо Гуру !! где Вам можно плюсик поставить ?))) я так и сделал подумал, что получилось написать то и написал , а дальше тупик и помощь знатоков )) Вообщем программу написал, громозко , не профиссионально , но зато работает как планировалось.