Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:jroboplc:ups_devices:ups_nano_src [2018/06/25 13:25]
denis
doc:jroboplc:ups_devices:ups_nano_src [2018/07/27 13:21] (текущий)
denis
Строка 1: Строка 1:
-<​file ​sketch_ups_nano_1.ino ​sketch_ups_nano_1.ino>​+<​file ​cpp sketch_ups_nano_1.ino>​
 #include <​EEPROM.h>​ #include <​EEPROM.h>​
 #include <​CRC32.h>​ #include <​CRC32.h>​
Строка 27: Строка 27:
 #define ADDR_T_OFF ​             4 #define ADDR_T_OFF ​             4
 #define ADDR_T_ON ​              6 #define ADDR_T_ON ​              6
 +#define ADDR_BEEP_MODE ​         8
  
 OneWire oneWire(pinInpT); ​ OneWire oneWire(pinInpT); ​
Строка 45: Строка 46:
 boolean manual_BatCtrl;​ boolean manual_BatCtrl;​
 boolean manual_Cooler;​ boolean manual_Cooler;​
 +int beep_mode;
  
 int timeBatCtrl;​ int timeBatCtrl;​
Строка 52: Строка 54:
  
 long ms; long ms;
 +int cnt5000ms;
 int cnt1000ms; int cnt1000ms;
 int cnt200ms; int cnt200ms;
Строка 83: Строка 86:
   manual_BatCtrl = false;   manual_BatCtrl = false;
   manual_Cooler = false;   manual_Cooler = false;
 +  cnt5000ms = 0;
   cnt1000ms = 0;   cnt1000ms = 0;
   cnt200ms = 0;   cnt200ms = 0;
Строка 96: Строка 100:
   EEPROM.get(ADDR_T_OFF,​ Toff);   EEPROM.get(ADDR_T_OFF,​ Toff);
   EEPROM.get(ADDR_T_ON,​ Ton);   EEPROM.get(ADDR_T_ON,​ Ton);
 +  EEPROM.get(ADDR_BEEP_MODE,​ beep_mode);
  
   validate_vars();​   validate_vars();​
Строка 107: Строка 112:
   Serial.println(VERSION);​   Serial.println(VERSION);​
  
-  Serial.print("​SetTimeout ​= ");+  Serial.print("​SerTimeout ​= ");
   Serial.println(timeoutSerialConnected);​   Serial.println(timeoutSerialConnected);​
   Serial.print("​BatCtrlTimeout = ");   Serial.print("​BatCtrlTimeout = ");
Строка 125: Строка 130:
   if(timeoutSerialConnected <= 0)   if(timeoutSerialConnected <= 0)
     timeoutSerialConnected = 1;     timeoutSerialConnected = 1;
 +
 +  if(beep_mode < 0  ||  beep_mode > 2)
 +    beep_mode = 0;
 } }
  
Строка 150: Строка 158:
       if( sercnt > 0  && ​ msdelta > REQUEST_TIMEOUT ) {       if( sercnt > 0  && ​ msdelta > REQUEST_TIMEOUT ) {
         sercnt = 0;         sercnt = 0;
 +        serConnected = false;
       }       }
       if( serConnected ​ && ​ (msdelta/​1000) >= timeoutSerialConnected ) {       if( serConnected ​ && ​ (msdelta/​1000) >= timeoutSerialConnected ) {
Строка 160: Строка 169:
           onSerRequest();​           onSerRequest();​
           sercnt = 0;           sercnt = 0;
-          ​serConnected = true;+//          ​serConnected = true;
         }         }
       }       }
Строка 171: Строка 180:
  
 void loop100ms() { void loop100ms() {
 +  if( cnt5000ms++ >= 50 ) { 
 +    cnt5000ms = 0;
 +    loop5000ms();​
 +  }
 +
   if( cnt1000ms++ >= 10 ) {    if( cnt1000ms++ >= 10 ) { 
     cnt1000ms = 0;     cnt1000ms = 0;
Строка 230: Строка 244:
   }   }
   digitalWrite(pinOutBatCtrl,​ outBatCtrl);​ //   digitalWrite(pinOutBatCtrl,​ outBatCtrl);​ //
- 
-  // cooler 
-  if( !manual_Cooler ) { 
-    T = (int)round(dallasTemp.getTempCByIndex(0) * 10); 
-    dallasTemp.requestTemperatures();​ 
-    if( Ton > Toff? T >= Ton: T <= Ton ) 
-      outCooler = 1; 
-    else 
-    if( Ton > Toff? T <= Toff: T >= Toff ) 
-      outCooler = 0; 
-  } 
-  digitalWrite(pinOutCooler,​ !outCooler);​ //inv 
  
   // beep   // beep
Строка 249: Строка 251:
       //   1200 - normal tone       //   1200 - normal tone
       //     40 - debug tone (very low)       //     40 - debug tone (very low)
-      tone(pinOutBeep,​ 40, 1000); ​+      ​if( beep_mode == 0 ) 
 +        tone(pinOutBeep,​ 1200, 1000);  
 +      else if( beep_mode == 1 ) 
 +        ​tone(pinOutBeep,​ 40, 1000); ​
     else     else
       noTone(pinOutBeep);  ​       noTone(pinOutBeep);  ​
Строка 258: Строка 263:
     outAux = !serConnected;​     outAux = !serConnected;​
   digitalWrite(pinOutAux,​ !outAux); //inv   digitalWrite(pinOutAux,​ !outAux); //inv
 +
 +  // cooler
 +  int t = (int)round(dallasTemp.getTempCByIndex(0) * 10);
 +  dallasTemp.requestTemperatures();​
 +  if( t > -500  && ​ t < 1200 )
 +    T = t;
 +  ​
 +  if( !manual_Cooler ) {
 +    if( Ton > Toff? T >= Ton: T <= Ton )
 +      outCooler = 1;
 +    else
 +    if( Ton > Toff? T <= Toff: T >= Toff )
 +      outCooler = 0;
 +  }
 +  digitalWrite(pinOutCooler,​ !outCooler);​ //inv
 } }
  
 +
 +
 +void loop5000ms() {
 +}
  
  
 void onSerRequest() { void onSerRequest() {
 +  serConnected = false;
 +
   uint32_t cs1 = CRC32::​calculate(serbuf,​ REQUEST_LEN-4);​   uint32_t cs1 = CRC32::​calculate(serbuf,​ REQUEST_LEN-4);​
   uint32_t cs2 =    uint32_t cs2 = 
Строка 270: Строка 296:
           (uint32_t)serbuf[REQUEST_LEN-1];​           (uint32_t)serbuf[REQUEST_LEN-1];​
  
-  if( cs1 != cs2 )+  if( cs1 != cs2 ) {
     return;     return;
 +  }
  
   if( serbuf[0] != VERSION ) {   if( serbuf[0] != VERSION ) {
Строка 280: Строка 307:
   getSerbufValues();​   getSerbufValues();​
   sendGoodAnswer();​   sendGoodAnswer();​
 +
 +  serConnected = true;
 } }
  
Строка 352: Строка 381:
   if( manual_Cooler )   if( manual_Cooler )
     outCooler = (manuals & 0x8) > 0;     outCooler = (manuals & 0x8) > 0;
 +
 +  beep_mode = (manuals >> 4) & 0xF;
  
   validate_vars();​   validate_vars();​
Строка 359: Строка 390:
   EEPROM.put(ADDR_T_OFF,​ Toff);   EEPROM.put(ADDR_T_OFF,​ Toff);
   EEPROM.put(ADDR_T_ON,​ Ton);   EEPROM.put(ADDR_T_ON,​ Ton);
 +  EEPROM.put(ADDR_BEEP_MODE,​ beep_mode);
 } }
  
doc/jroboplc/ups_devices/ups_nano_src.1529922310.txt.gz · Последние изменения: 2018/06/25 13:25 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0