Просто термометр на двух 7 сегментных индикаторах и аккумуляторе 18650
- Войдите на сайт для отправки комментариев
Ср, 23/10/2019 - 13:51
Были комплектующие/настроение, собрал себе тупо термометр для контроля температуры браги.
И да, я в курсе, что просто термометр на AliExpress стоит раз в 10 дешевле :)
#include <OneWire.h> #include <DallasTemperature.h> #include "s7led.h" #define ONE_WIRE_BUS A3 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); unsigned long currentMillis; bool flGetTemp = true; unsigned long timerGetTemp; #define periodGetTemp 1000UL byte currTemp; byte currPoint = 0; void setup() { // put your setup code here, to run once: sensors.begin(); } void loop() { process7led(); delay(4); currentMillis = millis(); // put your main code here, to run repeatedly: if ((currentMillis - timerGetTemp) >= periodGetTemp) { timerGetTemp = currentMillis; if (currPoint) { setPoint0(false); setPoint1(true); } else { setPoint0(true); setPoint1(false); } currPoint = !currPoint; // get temp if (flGetTemp) { sensors.requestTemperatures(); flGetTemp = false; } else { currTemp = (sensors.getTempCByIndex(0) + 0.7); // calibrate sensor currTemp = constrain(currTemp, 0, 99); show7LedData(currTemp / 10, currTemp % 10); flGetTemp = true; } } } //--s7led.h-- #include <arduino.h> /*#define segm_a_pin 6 //PD6 #define segm_b_pin 7 //PD7 #define segm_c_pin 2 //PD2 #define segm_d_pin 1 //PD1 #define segm_e_pin 0 //PD0 #define segm_f_pin 5 //PD5 #define segm_g_pin 4 //PD4 #define segm_dp_pin 3 //PD3*/ #define razr_0_pin 8 //PB0 #define razr_1_pin 9 //PB1 #define commonRazrLevel HIGH void show7LedData(byte inR0, byte inR1); void process7led(); void setPoint0(bool fl); void setPoint1(bool fl); //--s7led.cpp-- #include "s7led.h" byte LED_SG[10] = {0xE7, 0x84, 0xD3, 0xD6, 0xB4, 0x76, 0x77, 0xC4, 0xF7, 0xF6}; //, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xC2, 0x89, 0xF9, 0xF1, 0xC3, 0xA9, 0xC0, 0x8C, 0x98, 0x92, 0xC1, 0x91, 0xFE, 0xBF, 0xFF, 0x9C, 0xAB}; // 0123456789AbCdEFGHIJLnOPqSUY_- (null) (degree) (mm) byte _show_razr0 = 0; byte _show_razr1 = 0; byte _curr_razr = 0; byte _curr_segm = 0; byte _point0; byte _point1; unsigned long _last_razr; void show7LedData(byte inR0, byte inR1) { _show_razr0 = inR0; _show_razr1 = inR1; } void process7led() { // set segments byte dataPort; if (_curr_razr) { dataPort = LED_SG[_show_razr1]; if (_point1) dataPort |= 0x08; } else { dataPort = LED_SG[_show_razr0]; if (_point0) dataPort |= 0x08; } DDRD = dataPort; if (commonRazrLevel == HIGH) PORTD = ~dataPort; else PORTD = dataPort; if (_curr_razr) { digitalWrite(razr_0_pin, LOW); digitalWrite(razr_1_pin, commonRazrLevel); pinMode(razr_0_pin, INPUT); pinMode(razr_1_pin, OUTPUT); } else { digitalWrite(razr_0_pin, commonRazrLevel); digitalWrite(razr_1_pin, LOW); pinMode(razr_0_pin, OUTPUT); pinMode(razr_1_pin, INPUT); } _curr_razr = !_curr_razr; } void setPoint0(bool fl) { if (fl) _point0 = 1; else _point0 = 0; } void setPoint1(bool fl) { if (fl) _point1 = 1; else _point1 = 0; }