Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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 java 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); | ||
| } | } | ||