HCesp/HermitCrab.h

243 lines
5.5 KiB
C

#ifndef __HERMIT_CRAB_H
#define __HERMIT_CRAB_H
#include <Arduino.h>
#ifndef ESP32
#define ESP32
#endif
#define USE_BLE
#ifdef USE_BLE
#define THIS_DEVICE_TYPE ENUM_DEVICE_TYPE::TYPE_BETA_BLE
#define MY_IRAM_ATTR
#else
#define THIS_DEVICE_TYPE ENUM_DEVICE_TYPE::TYPE_BETA
#define MY_IRAM_ATTR IRAM_ATTR
#endif
// Define DEBUG flag
#ifndef DEBUG
#define DEBUG 1 // Set to 0 to disable debug output
#endif
#undef DEBUG
//#define BLE_DEBUG
#ifdef BLE_DEBUG
#ifndef DEBUG
#define DEBUG 1
#endif
#endif
// Debug print macros
#if defined(DEBUG)
#define DPRINT(...) Serial.print(__VA_ARGS__)
#define DPRINTLN(...) Serial.println(__VA_ARGS__)
#define DPRINTF(...) Serial.printf(__VA_ARGS__)
#else
#define DPRINT(...) // Do nothing
#define DPRINTLN(...) // Do nothing
#define DPRINTF(...) // Do nothing
#endif
#ifndef SIGNATURE1
#define SIGNATURE1 ((uint16_t) 0xC8AB)
#endif
#ifndef SIGNATURE2
#define SIGNATURE2 ((uint16_t) 0x4E81)
#endif
#define KALVIN (273.125f)
#define LIGHT_ON HIGH
#define LIGHT_OFF LOW
#define HUMID_ON HIGH
#define HUMID_OFF LOW
#define HEATER_ON HIGH
#define HEATER_OFF LOW
#define LED_ON LOW
#define LED_OFF HIGH
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGH
// =======================
// PIN Definitions
//
// LEFT
#define PIN_NTC 39 // Input Only
#define PIN_ZCD_LOAD 34 // Input Only
#define PIN_ZCD_AC 35 // Input Only
#define PIN_HEATER1 32
#define PIN_HEATER2 33
#define PIN_LIGHT 25
#define PIN_MOTOR 26
#define PIN_FAN 27
#define PIN_MIST 14 // Outputs PWM signal at boot
#define PIN_NONE_1 12 // boot fails if pulled high, strapping pin
// BOTTOM
#define PIN_NONE_2 13
#define PIN_NONE_6 15 // Outputs PWM signal at Boot, strapping pin
#define PIN_NONE_5 2
// RIGHT
#define PIN_LED_WIFI 0 // pulled up outputs PWM signal at boot, must be LOW to enter flashing mode
#define PIN_NONE_4 4
#define PIN_LED_HEATER2 16
#define PIN_LED_HEATER1 17
#define PIN_SW_DOWN 5
#define PIN_SW_UP 18
#define PIN_SW_SET 19
#define PIN_SDA 21
#define PIN_RX 3
#define PIN_TX 1
#define PIN_SCL 22
#define PIN_NONE_3 23
// End of PIN Definition
// =======================
// Resolution for all Channels
#define PWM_RESOLUTION 10 // 10-bit resolution
#define PWM_FULL 1023
#define PWM_OFF 0
// High Speed Group - Motor and Fan (26KHz)
#define PWM_MOTOR_CHANNEL 0
#define PWM_FAN_CHANNEL 1
// Medium Speed Group - LED & Heater (1KHz)
#define PWM_LIGHT_CHANNEL 2
#define PWM_HEATER1_CHANNEL 3
#define PWM_HEATER2_CHANNEL 4
// Low Speed Group - Mist, WifiLED (1Hz)
#define PWM_MIST_CHANNEL 8
#define PWM_WIFI_LED_CHANNEL 9
#define PWM_1HZ_FREQ 1 // 1 Hz
#define PWM_1KHZ_FREQ 1221 // 1 kHz
#define PWM_26KHZ_FREQ 26042 // 26KHz
#define TAG "HC"
enum EVENT_TYPE {
// Temperature
// Humidity
// Light
// Fan
// Connection
WiFi_Conneted,
WiFi_Disconnected,
BT_Connected,
BT_Disconnected
};
#define FLAG_MANUAL_HEATER1 (0x0001)
#define FLAG_MANUAL_HEATER2 (0x0002)
#define FLAG_MANUAL_MIST (0x0004)
#define FLAG_MANUAL_FAN (0x0008)
#define FLAG_MANUAL_MOTOR (0x0010)
#define FLAG_MANUAL_LIGHT (0x0020)
#define FLAG_ZCD_AC (0x0040)
#define FLAG_ZCD_LOAD (0x0080)
#define FLAG_ZCD (0x0100)
#define FLAG_UPNP (0x0200)
#define FLAG_BLE_BATT (0x0400)
#define FLAG_BLE_NODATA (0x0800)
#define FLAG_BLE_LOST (0x1000)
#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */
typedef struct DEVICE_PARAM_STRUCT {
uint8_t nControlType;
uint8_t x;
uint8_t bDay, bNight;
//4
uint16_t dutyMin, dutyMax, dutyStart;
//6 + 4 = 10
union {
uint16_t dutyDay;
uint16_t dutyOn;
uint16_t dutyDayOrOn;
};
union {
uint16_t dutyNight;
uint16_t dutyOff;
uint16_t dutyNightOrOff;
};
//4 + 10 = 14
int16_t tempHigh, tempLow;
uint16_t timeBegin, timeEnd;
uint16_t periodPeriod, periodOn;
uint16_t humidHigh, humidLow;
//16 + 14 = 30
uint8_t extra[32 - 30];
} DEVICE_PARAM_TYPE;
typedef struct STATUS_STRUCT {
// Sensor
int16_t nTemp1;
int16_t nTemp2;
int16_t nTemp3;
int16_t nHumid1;
int16_t nHumid2;
// 10
// Control
uint16_t nHeater1Duty; // (0..10000)
uint16_t nHeater2Duty; // (0..10000)
uint16_t nMistDuty; //
uint16_t nFanDuty; //
uint16_t nMotorDuty;
uint16_t nLightDuty;
uint16_t nLightTargetDuty;
// 24
// Current Time
uint32_t now;
// 28
uint16_t nFlags;
// 30
// AC status
uint8_t zcdAC;
uint8_t zcdLoad;
// 32
} STATUS_TYPE;
#pragma pack(pop) /* restore original alignment from stack */
// =======================================================
char *printStatus(unsigned long tick, bool bLong = false);
char *printTime(bool bLong = false);
void checkWiFi(unsigned long tick);
void checkWiFiHost(unsigned long tick);
void core0Task(void *pvParameters);
// =======================================================
// Status
extern STATUS_TYPE status;
// Time
extern volatile unsigned short g_nYear, g_nMonth, g_nDay, g_nHour, g_nMinute, g_nSecond;
// Environment
extern bool bShowSensor;
extern const char *COMPANY_NAME;
extern const char *SERVICE_NAME;
extern const char *HC__VERSION;
extern volatile uint32_t g_millis;
#endif