суббота, 12 марта 2016 г.

Таймер обратного отсчета СЕКУНДА-1 на ARDUINO с памятью на 10 значений. Для: УФ - сушилки, Фоторезиста, Шеллака, Печатей

Таймер обратного отсчета СЕКУНДА-1 на ARDUINO с памятью на 10 значений.                  Для: УФ - сушилки, Фоторезиста, Шеллака, Печатей 





Схему, скетч и описание можно взять тут:

СКЕТЧ:
#include <LiquidCrystal.h>
#include <EEPROM.h>
LiquidCrystal _lcd1(8, 9, 4, 5, 6, 7);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

int _gtv2;
bool _gtv1 = 0;
bool _gtv3;
int _gtv5;
bool _gtv6;
bool _gtv7;
bool _gtv8;
int _gtv9;
bool _gtv11 = 0;
int _gtv10;
bool _count3I = 0;
int _count3P = 0;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
bool _gen3I = 0;
bool _gen3O = 0;
unsigned long _gen3P = 0UL;
bool _trgt1 = 0;
bool _trgt1I = 0;
bool _count1I = 0;
int _count1P = 0;
int _swi2;
int _disp1oldLength = 0;
bool _tim5I = 0;
bool _tim5O = 0;
unsigned long _tim5P = 0UL;
bool _pzs1OES = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
bool _tim3I = 0;
bool _tim3O = 0;
unsigned long _tim3P = 0UL;
bool _tim4I = 0;
bool _tim4O = 0;
unsigned long _tim4P = 0UL;
bool _count2I = 0;
int _count2P = 0;
bool _SEEPR10OSN = 0;
int _dms1Q0 = 0;
int _dms1Q1 = 0;
int _dms1Q2 = 0;
int _dms1Q3 = 0;
int _dms1Q4 = 0;
int _dms1Q5 = 0;
int _dms1Q6 = 0;
int _dms1Q7 = 0;
int _dms1Q8 = 0;
int _dms1Q9 = 0;
int _dms1Q10 = 0;
bool _SEEPR11OSN = 0;
bool _SEEPR1OSN = 0;
bool _SEEPR2OSN = 0;
bool _SEEPR3OSN = 0;
bool _SEEPR4OSN = 0;
bool _SEEPR5OSN = 0;
bool _SEEPR6OSN = 0;
bool _SEEPR7OSN = 0;
bool _SEEPR8OSN = 0;
int _mux1;
bool _dms2Q0 = 0;
bool _dms2Q1 = 0;
bool _dms2Q2 = 0;
bool _dms2Q3 = 0;
bool _dms2Q4 = 0;
bool _dms2Q5 = 0;
bool _dms2Q6 = 0;
bool _dms2Q7 = 0;
bool _dms2Q8 = 0;
bool _dms2Q9 = 0;
bool _dms2Q10 = 0;
String _swi1;
bool _SEEPR9OSN = 0;
String _swi3;
int _disp2oldLength = 0;
bool _bounseInputD10S = 0;
bool _bounseInputD10O = 0;
unsigned long _bounseInputD10P = 0UL;
bool _bounseInputD12S = 0;
bool _bounseInputD12O = 0;
unsigned long _bounseInputD12P = 0UL;
bool _bounseInputD11S = 0;
bool _bounseInputD11O = 0;
unsigned long _bounseInputD11P = 0UL;
bool _bounseInputD1S = 0;
bool _bounseInputD1O = 0;
unsigned long _bounseInputD1P = 0UL;
void setup()
{
pinMode(1, INPUT);
digitalWrite(1, HIGH);
pinMode(12, INPUT);
digitalWrite(12, HIGH);
pinMode(10, INPUT);
digitalWrite(10, HIGH);
pinMode(11, INPUT);
digitalWrite(11, HIGH);
pinMode(3, OUTPUT);

_lcd1.begin(16, 2);
_bounseInputD10O =  digitalRead(10);
_bounseInputD12O =  digitalRead(12);
_bounseInputD11O =  digitalRead(11);
_bounseInputD1O =  digitalRead(1);
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}

bool  _bounceInputTmpD10 =  (digitalRead (10));

if (_bounseInputD10S) 
    {
     if (millis() >= (_bounseInputD10P + 40)) 
         {_bounseInputD10O= _bounceInputTmpD10; _bounseInputD10S=0;}
     }
else
    {
     if (_bounceInputTmpD10 != _bounseInputD10O )
         {_bounseInputD10S=1; _bounseInputD10P = millis();} 
      } 
bool  _bounceInputTmpD12 =  (digitalRead (12));

if (_bounseInputD12S) 
    {
     if (millis() >= (_bounseInputD12P + 40)) 
         {_bounseInputD12O= _bounceInputTmpD12; _bounseInputD12S=0;}
     }
else
    {
     if (_bounceInputTmpD12 != _bounseInputD12O )
         {_bounseInputD12S=1; _bounseInputD12P = millis();} 
      } 
bool  _bounceInputTmpD11 =  (digitalRead (11));

if (_bounseInputD11S) 
    {
     if (millis() >= (_bounseInputD11P + 40)) 
         {_bounseInputD11O= _bounceInputTmpD11; _bounseInputD11S=0;}
     }
else
    {
     if (_bounceInputTmpD11 != _bounseInputD11O )
         {_bounseInputD11S=1; _bounseInputD11P = millis();} 
      } 
bool  _bounceInputTmpD1 =  (digitalRead (1));

if (_bounseInputD1S) 
    {
     if (millis() >= (_bounseInputD1P + 40)) 
         {_bounseInputD1O= _bounceInputTmpD1; _bounseInputD1S=0;}
     }
else
    {
     if (_bounceInputTmpD1 != _bounseInputD1O )
         {_bounseInputD1S=1; _bounseInputD1P = millis();} 
      } 



if(_gtv8) _count3P = (_gtv10);
if (_gen2O) 
   { 
   if (! _count3I)  
      {
        if (( (_gen2O) ^ (!(_bounseInputD12O)) )) {_count3P = _count3P+1;} else {_count3P = _count3P-1;};
       _count3I = 1;
      }
   }
else
   {
   _count3I=0;
   }
if (_gtv1) _count3P = 0;
if (( (!(_bounseInputD1O)) || (!(_bounseInputD12O)) )) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
 if (_gen2I) {  if ( _isTimer ( _gen2P , 200 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
if (_trgt1) { if (! _gen3I) { _gen3I = 1; _gen3O = 1; _gen3P = millis(); } } else { _gen3I = 0 ; _gen3O= 0;}
 if (_gen3I) {  if ( _isTimer ( _gen3P , 500 )) { _gen3P = millis(); _gen3O = ! _gen3O;}}
bool  _tmp1 = ( (!(_bounseInputD10O)) || (_gtv3) );
if (_tmp1)  { if (! _trgt1I) _trgt1 = ! _trgt1; } 
_trgt1I = _tmp1; 
if(!(_bounseInputD10O)) _count1P = (_gtv2);
if (_gen3O) 
   { 
   if (! _count1I)  
      {
       _count1P = _count1P-1;
       _count1I = 1;
      }
   }
else
   {
   _count1I=0;
   }
if (_gtv3) _count1P = 0;
if(_gtv6)
{_swi2=_gtv5;}
else
{_swi2=_gtv2;}
if(( ( _count1P  <=  0) && (_gtv6) )) {_tim5O = 1; _tim5I = 1;} else { if(_tim5I) {_tim5I = 0; _tim5P = millis();} else { if (_tim5O) {if ( _isTimer(_tim5P, 2000)) _tim5O = 0;}}}
if(_gen1O)
{if((!_pzs1OES)){ tone(2, 1000); _pzs1OES =1;}} else {if(_pzs1OES){noTone(2); _pzs1OES =0;  }}
if (_tim5O) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimer ( _gen1P , 200 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
_gtv6 = _trgt1;
digitalWrite(3, _trgt1);
_gtv5 = _count1P;
if (1) {
_dispTempLength1 = ((((String("TIME: ")) + ((String(_swi2)))))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print((((String("TIME: ")) + ((String(_swi2))))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} 
}
_gtv3 = (_count1P) < (0);
_gtv2 = _count3P;
_gtv1 = (_count3P) < (0);
if (!(_bounseInputD11O))
{ if (_tim1I) { if (_isTimer(_tim1P, 3000)) {_tim1O = 1;}} else {_tim1I =1; _tim1P = millis();}} else {_tim1O = 0; _tim1I = 0;}
if(!(_bounseInputD11O)) {_tim2O = 1; _tim2I = 1;} else { if(_tim2I) {_tim2I = 0; _tim2P = millis();} else { if (_tim2O) {if ( _isTimer(_tim2P, 200)) _tim2O = 0;}}}
if(!(_bounseInputD11O)) {_tim3O = 1; _tim3I = 1;} else { if(_tim3I) {_tim3I = 0; _tim3P = millis();} else { if (_tim3O) {if ( _isTimer(_tim3P, 100)) _tim3O = 0;}}}
if(_tim1O) {_tim4O = 1; _tim4I = 1;} else { if(_tim4I) {_tim4I = 0; _tim4P = millis();} else { if (_tim4O) {if ( _isTimer(_tim4P, 300)) _tim4O = 0;}}}

if (_gtv8) 
   { 
   if (! _count2I)  
      {
       _count2P = _count2P+1;
       _count2I = 1;
      }
   }
else
   {
   _count2I=0;
   }
if (_gtv11) _count2P = 0;
if(_dms2Q0){ if(!_SEEPR10OSN){ EEPROMWriteInt(0, 0); _SEEPR10OSN=1;} }else{ if(_SEEPR10OSN){_SEEPR10OSN=0;}}
if((_gtv9 == 0)){_dms1Q0 = _gtv2;} else {_dms1Q0 = 0;}
if((_gtv9 == 1)){_dms1Q1 = _gtv2;} else {_dms1Q1 = 0;}
if((_gtv9 == 2)){_dms1Q2 = _gtv2;} else {_dms1Q2 = 0;}
if((_gtv9 == 3)){_dms1Q3 = _gtv2;} else {_dms1Q3 = 0;}
if((_gtv9 == 4)){_dms1Q4 = _gtv2;} else {_dms1Q4 = 0;}
if((_gtv9 == 5)){_dms1Q5 = _gtv2;} else {_dms1Q5 = 0;}
if((_gtv9 == 6)){_dms1Q6 = _gtv2;} else {_dms1Q6 = 0;}
if((_gtv9 == 7)){_dms1Q7 = _gtv2;} else {_dms1Q7 = 0;}
if((_gtv9 == 8)){_dms1Q8 = _gtv2;} else {_dms1Q8 = 0;}
if((_gtv9 == 9)){_dms1Q9 = _gtv2;} else {_dms1Q9 = 0;}
if((_gtv9 == 10)){_dms1Q10 = _gtv2;} else {_dms1Q10 = 0;}
if(_dms2Q1){ if(!_SEEPR11OSN){ EEPROMWriteInt(2, _dms1Q1); _SEEPR11OSN=1;} }else{ if(_SEEPR11OSN){_SEEPR11OSN=0;}}
if(_dms2Q2){ if(!_SEEPR1OSN){ EEPROMWriteInt(4, _dms1Q2); _SEEPR1OSN=1;} }else{ if(_SEEPR1OSN){_SEEPR1OSN=0;}}
if(_dms2Q3){ if(!_SEEPR2OSN){ EEPROMWriteInt(6, _dms1Q3); _SEEPR2OSN=1;} }else{ if(_SEEPR2OSN){_SEEPR2OSN=0;}}
if(_dms2Q4){ if(!_SEEPR3OSN){ EEPROMWriteInt(8, _dms1Q4); _SEEPR3OSN=1;} }else{ if(_SEEPR3OSN){_SEEPR3OSN=0;}}
if(_dms2Q5){ if(!_SEEPR4OSN){ EEPROMWriteInt(10, _dms1Q5); _SEEPR4OSN=1;} }else{ if(_SEEPR4OSN){_SEEPR4OSN=0;}}
if(_dms2Q6){ if(!_SEEPR5OSN){ EEPROMWriteInt(12, _dms1Q6); _SEEPR5OSN=1;} }else{ if(_SEEPR5OSN){_SEEPR5OSN=0;}}
if(_dms2Q7){ if(!_SEEPR6OSN){ EEPROMWriteInt(14, _dms1Q7); _SEEPR6OSN=1;} }else{ if(_SEEPR6OSN){_SEEPR6OSN=0;}}
if(_dms2Q8){ if(!_SEEPR7OSN){ EEPROMWriteInt(16, _dms1Q8); _SEEPR7OSN=1;} }else{ if(_SEEPR7OSN){_SEEPR7OSN=0;}}
if(_dms2Q9){ if(!_SEEPR8OSN){ EEPROMWriteInt(18, _dms1Q9); _SEEPR8OSN=1;} }else{ if(_SEEPR8OSN){_SEEPR8OSN=0;}}
if((_gtv9) == 0) {_mux1 = (EEPROMReadInt(0));}
if((_gtv9) == 1) {_mux1 = (EEPROMReadInt(2));}
if((_gtv9) == 2) {_mux1 = (EEPROMReadInt(4));}
if((_gtv9) == 3) {_mux1 = (EEPROMReadInt(6));}
if((_gtv9) == 4) {_mux1 = (EEPROMReadInt(8));}
if((_gtv9) == 5) {_mux1 = (EEPROMReadInt(10));}
if((_gtv9) == 6) {_mux1 = (EEPROMReadInt(12));}
if((_gtv9) == 7) {_mux1 = (EEPROMReadInt(14));}
if((_gtv9) == 8) {_mux1 = (EEPROMReadInt(16));}
if((_gtv9) == 9) {_mux1 = (EEPROMReadInt(18));}
if((_gtv9) == 10) {_mux1 = (EEPROMReadInt(20));}
if((_gtv9 == 0)){_dms2Q0 = _gtv7;} else {_dms2Q0 = 0;}
if((_gtv9 == 1)){_dms2Q1 = _gtv7;} else {_dms2Q1 = 0;}
if((_gtv9 == 2)){_dms2Q2 = _gtv7;} else {_dms2Q2 = 0;}
if((_gtv9 == 3)){_dms2Q3 = _gtv7;} else {_dms2Q3 = 0;}
if((_gtv9 == 4)){_dms2Q4 = _gtv7;} else {_dms2Q4 = 0;}
if((_gtv9 == 5)){_dms2Q5 = _gtv7;} else {_dms2Q5 = 0;}
if((_gtv9 == 6)){_dms2Q6 = _gtv7;} else {_dms2Q6 = 0;}
if((_gtv9 == 7)){_dms2Q7 = _gtv7;} else {_dms2Q7 = 0;}
if((_gtv9 == 8)){_dms2Q8 = _gtv7;} else {_dms2Q8 = 0;}
if((_gtv9 == 9)){_dms2Q9 = _gtv7;} else {_dms2Q9 = 0;}
if((_gtv9 == 10)){_dms2Q10 = _gtv7;} else {_dms2Q10 = 0;}
if((_gtv9) == (0))
{_swi1=String("-");}
else
{_swi1=(String(_gtv10));}
if(_dms2Q10){ if(!_SEEPR9OSN){ EEPROMWriteInt(20, _dms1Q10); _SEEPR9OSN=1;} }else{ if(_SEEPR9OSN){_SEEPR9OSN=0;}}
if((_gtv9) == (0))
{_swi3=String("-");}
else
{_swi3=(String(_gtv9));}
_gtv7 = _tim1O;
_gtv9 = _count2P;
_gtv8 = ( (!(_tim4O)) && (( (_tim2O) && (!(_tim3O)) )) );
_gtv11 = (_count2P) >= (11);
_gtv10 = _mux1;
if (1) {
_dispTempLength1 = ((((((((String("SAVE:")) + (_swi3))) + (String(" sek:")))) + (_swi1)))).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} 
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(0, 1);
_lcd1.print((((((((String("SAVE:")) + (_swi3))) + (String(" sek:")))) + (_swi1))));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;} 
}




}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
int EEPROMReadInt(int p_address)
        {
        byte lowByte = EEPROM.read(p_address);
        byte highByte = EEPROM.read(p_address + 1);

        return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
        }
void EEPROMWriteInt(int p_address, int p_value)
       {
        byte lowByte = ((p_value >> 0) & 0xFF);
        byte highByte = ((p_value >> 8) & 0xFF);

        EEPROM.write(p_address, lowByte);
        EEPROM.write(p_address + 1, highByte);
        }

15 комментариев :

  1. Отлично и спасибо большое,будем ждать новый вариант !!!

    ОтветитьУдалить
  2. Здравствуй ! У меня к вам просьба,не могли бы вы немного подкорректировать скеч,а именно кнопки вперёд и назад,при однократном нажатии изменяли по одной секунде а при длительном нажатии хотя бы по 10 секунд листали,был бы очень благодарен вам.

    ОтветитьУдалить
    Ответы
    1. Здравствуйте. Скетч не я писал, и этим "языком" пока не владею, так что изменения не могу внести (((
      Идея Ваша здравая, что то не подумал я про это когда общался с программистом.
      У меня в архиве скетч в 2х вариантах, в программе FLprog (в ней он был написан) и из нее же экспортирован в родной формат Arduini IDE. Можно найти знающего человека и попросить внести изменения.

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

      Удалить
  3. Сегодня закончил свою лампу,остался корпус сделать,спасибо за таймер !!! https://youtu.be/am1Vp4PeJHg

    ОтветитьУдалить
  4. Подскажите а а использование i2C модулем с LCD 1602 как переделать ваш код
    И вопрос про подсветку можно её подключить так чтобы при нажатии на любую кнопку включалась например на 30 секунд

    ОтветитьУдалить
    Ответы
    1. Соф писал не я, поэтому не знаю как в нем что то делать, переделывать как под модуль i2C, так и подсветку. А смысл в этой схеме использовать модуль i2C, штатных выводов Ардуино и так хватает за глаза.

      Удалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. переделал код под дисплей LCD 1602 i2C
      кому надо пишете
      с подсветкой при нажатии

      Удалить
    2. Так набросай страничку со схемой и скетчем ))

      Удалить
  6. Скинте пожалуйста код под дисплей LCD 1602 i2C

    ОтветитьУдалить
    Ответы
    1. У меня нет его. Могу предложить только удалить с дисплея модуль i2C и использовать дисплей как обычный по схеме.

      Удалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить
  8. Этот комментарий был удален автором.

    ОтветитьУдалить