From 7e3b0b992a9e8317c9287a443daed8df488d7afe Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Mon, 26 Feb 2024 23:24:57 +0700 Subject: [PATCH] ct code, idk if it works or not. --- src/ise_display_definitions.hpp | 8 ++++++++ src/main.cpp | 30 ++++++++++++++++++++++++++++++ src/main.hpp | 5 +++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/ise_display_definitions.hpp b/src/ise_display_definitions.hpp index 53dba75..3bbd03d 100644 --- a/src/ise_display_definitions.hpp +++ b/src/ise_display_definitions.hpp @@ -1,6 +1,13 @@ #pragma once //start definition +#define CT_RMS_VOLTAGE 220 +#define CT_PIN_LIGHT_PHASE1 0 +#define CT_PIN_LIGHT_PHASE2 1 +#define CT_PIN_SOCKET 2 +#define CT_PIN_AC_PHASE1 3 +#define CT_PIN_AC_PHASE2 4 +#define CT_PIN_AC_PHASE3 5 /* tentetive pin mapping @@ -11,6 +18,7 @@ tentetive pin mapping 4: row 4 (value from 0-3) + change light assignment 1: row 1 column 1 2: row 1 column 2 diff --git a/src/main.cpp b/src/main.cpp index 716a133..27e02e9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,15 @@ RemoteVariable weather = RemoteVariable(); RemoteVariable pm_switch = RemoteVariable(); RemoteVariable pm_fan_speed = RemoteVariable(); +AnalogCard AnalogCard = AnalogCard(); +float *voltage = CT_RMS_VOLTAGE; +CurrentTransformerCard ct_light_phase1 = CurrentTransformerCard(&AnalogCard, CT_PIN_AC_PHASE1, &voltage, &adcToCurrent, 1000); +CurrentTransformerCard ct_light_phase2 = CurrentTransformerCard(&AnalogCard, CT_PIN_AC_PHASE2, &voltage, &adcToCurrent, 1000); +CurrentTransformerCard ct_socket = CurrentTransformerCard(&AnalogCard, CT_PIN_SOCKET, &voltage, &adcToCurrent, 1000); +CurrentTransformerCard ct_ac_phase1 = CurrentTransformerCard(&AnalogCard, CT_PIN_AC_PHASE1, &voltage, &adcToCurrent, 1000); +CurrentTransformerCard ct_ac_phase2 = CurrentTransformerCard(&AnalogCard, CT_PIN_AC_PHASE2, &voltage, &adcToCurrent, 1000); +CurrentTransformerCard ct_ac_phase3 = CurrentTransformerCard(&AnalogCard, CT_PIN_AC_PHASE3, &voltage, &adcToCurrent, 1000); + const char *mode_names[] = {"off", "cool", "fan_only", "dry"}; const char *fan_speed_names[] = {"auto", "high", "medium", "low"}; uint8_t row = 4; @@ -37,6 +46,15 @@ ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac, AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN, AIR_CONDITIONER_RMT_CHANNEL); +void adc2current(uint16_t adc_value) +{ + // 16 bit ADC value to current in amps + // ADC Range is 0-65535, It have an input range of 0-3.3V + // However, it have a resistor network that map 0-3.3V to 0-12V + // The current transformer output 0-10V with 0V as 0A and 10V as 50A + return (adc_value / 65535.0) * 12.0 / 10.0 * 50.0; +} + void handleMqttMessage(char *topic, char *payload) { } @@ -115,6 +133,18 @@ void setup() climateCard.loadStateFromFRAM(); climateCard.setFRAMAutoSave(true); espmega.display->bindClimateCard(&climateCard); + espmega.installCard(4, &ct_light_phase1); + espmega.installCard(5, &ct_light_phase2); + espmega.installCard(6, &ct_socket); + espmega.installCard(7, &ct_ac_phase1); + espmega.installCard(8, &ct_ac_phase2); + espmega.installCard(9, &ct_ac_phase3); + espmega->iot.registerCard(4); + espmega->iot.registerCard(5); + espmega->iot.registerCard(6); + espmega->iot.registerCard(7); + espmega->iot.registerCard(8); + espmega->iot.registerCard(9); // auto binded_display_update_on_pm25_out = std::bind(&display_update,0,std::placeholders::_1); // auto binded_display_update_on_pm25_in = std::bind(&display_update,1,std::placeholders::_1); // auto binded_display_update_on_temp_out = std::bind(&display_update,2,std::placeholders::_1); diff --git a/src/main.hpp b/src/main.hpp index 61aa049..7d3ad06 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -19,7 +19,7 @@ SET_LOOP_TASK_STACK_SIZE(32*1024); // Air Conditioner Configuration #define AIR_CONDITIONER_SENSOR_TYPE AC_SENSOR_TYPE_DHT22 #define AIR_CONDITIONER_SENSOR_PIN 32 -#define AIR_CONDITIONER_IR_PIN 5 +#define AIR_CONDITIONER_IR_PIN #define AIR_CONDITIONER_RMT_CHANNEL RMT_CHANNEL_0 void handleMqttMessage(char *topic, char *payload); @@ -45,4 +45,5 @@ void pm25inupdatedisplay(char* value); void tempoutupdatedisplay(char* value); void weatherupdatedisplay(char* value); void pmfanspeedupdatedisplay(char* value); -void pmswitchupdatedisplay(char* value); \ No newline at end of file +void pmswitchupdatedisplay(char* value); +float adc2current(uint16_t adc_value); \ No newline at end of file