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