Compare commits
2 Commits
09aee8d5f8
...
a22c8ef55c
Author | SHA1 | Date |
---|---|---|
Siwat Sirichai | a22c8ef55c | |
Siwat Sirichai | 268218f546 |
|
@ -60,11 +60,13 @@ bool DigitalInputCard::begin()
|
||||||
if (!this->inputBankA.begin())
|
if (!this->inputBankA.begin())
|
||||||
{
|
{
|
||||||
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Failed to install input bank A");
|
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Failed to install input bank A");
|
||||||
|
this->initOk = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!this->inputBankB.begin())
|
if (!this->inputBankB.begin())
|
||||||
{
|
{
|
||||||
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Failed to install input bank B");
|
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Failed to install input bank B");
|
||||||
|
this->initOk = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Set the debounce time for all pins to 50ms
|
// Set the debounce time for all pins to 50ms
|
||||||
|
@ -79,6 +81,7 @@ bool DigitalInputCard::begin()
|
||||||
this->pinMap[i] = i;
|
this->pinMap[i] = i;
|
||||||
this->virtualPinMap[i] = i;
|
this->virtualPinMap[i] = i;
|
||||||
}
|
}
|
||||||
|
this->initOk = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,6 +105,11 @@ bool DigitalInputCard::digitalRead(uint8_t pin)
|
||||||
*/
|
*/
|
||||||
bool DigitalInputCard::digitalRead(uint8_t pin, bool refresh)
|
bool DigitalInputCard::digitalRead(uint8_t pin, bool refresh)
|
||||||
{
|
{
|
||||||
|
if(!this->initOk)
|
||||||
|
{
|
||||||
|
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Card not initialized");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
pin = pinMap[pin];
|
pin = pinMap[pin];
|
||||||
// First check if the pin is in bank A or B
|
// First check if the pin is in bank A or B
|
||||||
if (pin >= 0 && pin <= 7)
|
if (pin >= 0 && pin <= 7)
|
||||||
|
@ -120,7 +128,7 @@ bool DigitalInputCard::digitalRead(uint8_t pin, bool refresh)
|
||||||
// Extract the bit from the buffer
|
// Extract the bit from the buffer
|
||||||
return ((inputBufferB >> (15 - pin)) & 1);
|
return ((inputBufferB >> (15 - pin)) & 1);
|
||||||
}
|
}
|
||||||
return 255;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -291,6 +299,11 @@ uint8_t DigitalInputCard::registerCallback(std::function<void(uint8_t, bool)> ca
|
||||||
*/
|
*/
|
||||||
void DigitalInputCard::refreshInputBankA()
|
void DigitalInputCard::refreshInputBankA()
|
||||||
{
|
{
|
||||||
|
if(!this->initOk)
|
||||||
|
{
|
||||||
|
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Card not initialized");
|
||||||
|
return;
|
||||||
|
}
|
||||||
inputBufferA = inputBankA.read8();
|
inputBufferA = inputBankA.read8();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,6 +312,11 @@ void DigitalInputCard::refreshInputBankA()
|
||||||
*/
|
*/
|
||||||
void DigitalInputCard::refreshInputBankB()
|
void DigitalInputCard::refreshInputBankB()
|
||||||
{
|
{
|
||||||
|
if(!this->initOk)
|
||||||
|
{
|
||||||
|
ESP_LOGE("DigitalInputCard", "Input Card ERROR: Card not initialized");
|
||||||
|
return;
|
||||||
|
}
|
||||||
inputBufferB = inputBankB.read8();
|
inputBufferB = inputBankB.read8();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,4 +388,14 @@ void DigitalInputCard::preloadInputBuffer()
|
||||||
refreshInputBankB();
|
refreshInputBankB();
|
||||||
previousInputBufferA = inputBufferA;
|
previousInputBufferA = inputBufferA;
|
||||||
previousInputBufferB = inputBufferB;
|
previousInputBufferB = inputBufferB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the status of the card
|
||||||
|
*
|
||||||
|
* @return True if the card is initialized, false otherwise
|
||||||
|
*/
|
||||||
|
bool DigitalInputCard::getStatus()
|
||||||
|
{
|
||||||
|
return this->initOk;
|
||||||
}
|
}
|
|
@ -43,9 +43,12 @@ class DigitalInputCard : public ExpansionCard {
|
||||||
void loadPinMap(uint8_t pinMap[16]);
|
void loadPinMap(uint8_t pinMap[16]);
|
||||||
// Preload previousInputBuffer and inputBuffer
|
// Preload previousInputBuffer and inputBuffer
|
||||||
void preloadInputBuffer();
|
void preloadInputBuffer();
|
||||||
|
// Status of card
|
||||||
|
bool getStatus();
|
||||||
// Get type of card
|
// Get type of card
|
||||||
uint8_t getType();
|
uint8_t getType();
|
||||||
private:
|
private:
|
||||||
|
bool initOk = false;
|
||||||
PCF8574 inputBankA;
|
PCF8574 inputBankA;
|
||||||
PCF8574 inputBankB;
|
PCF8574 inputBankB;
|
||||||
uint8_t address_a;
|
uint8_t address_a;
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
*/
|
*/
|
||||||
bool DigitalInputIoT::begin(uint8_t card_id, ExpansionCard *card, PubSubClient *mqtt, char *base_topic) {
|
bool DigitalInputIoT::begin(uint8_t card_id, ExpansionCard *card, PubSubClient *mqtt, char *base_topic) {
|
||||||
this->card = (DigitalInputCard *)card;
|
this->card = (DigitalInputCard *)card;
|
||||||
|
if(!this->card->getStatus()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
this->card_id = card_id;
|
this->card_id = card_id;
|
||||||
this->mqtt = mqtt;
|
this->mqtt = mqtt;
|
||||||
this->base_topic = base_topic;
|
this->base_topic = base_topic;
|
||||||
|
|
|
@ -144,6 +144,12 @@ void ESPMegaIoT::registerCard(uint8_t card_id)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Check if the physical card is installed
|
||||||
|
if (cards[card_id] == NULL)
|
||||||
|
{
|
||||||
|
ESP_LOGE("ESPMegaIoT", "Registering card %d failed: Card not installed", card_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Get the card type
|
// Get the card type
|
||||||
uint8_t card_type = cards[card_id]->getType();
|
uint8_t card_type = cards[card_id]->getType();
|
||||||
// Create the respective IoT component
|
// Create the respective IoT component
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
// #define CT_ENABLE
|
// #define CT_ENABLE
|
||||||
// #define SMART_VARIABLE_ENABLE
|
// #define SMART_VARIABLE_ENABLE
|
||||||
#define EXTERNAL_DIGITAL_OUTPUT_CARD_ENABLE
|
#define EXTERNAL_DIGITAL_OUTPUT_CARD_ENABLE
|
||||||
|
#define EXTERNAL_DIGITAL_INPUT_CARD_ENABLE
|
||||||
// Demo PLC firmware using the ESPMegaPRO OOP library
|
// Demo PLC firmware using the ESPMegaPRO OOP library
|
||||||
|
|
||||||
ESPMegaPRO espmega = ESPMegaPRO();
|
ESPMegaPRO espmega = ESPMegaPRO();
|
||||||
|
@ -35,6 +36,15 @@ ESPMegaPRO espmega = ESPMegaPRO();
|
||||||
DigitalOutputCard externalDigitalOutputCard = DigitalOutputCard(1, 0, 1, 1, 0);
|
DigitalOutputCard externalDigitalOutputCard = DigitalOutputCard(1, 0, 1, 1, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef EXTERNAL_DIGITAL_INPUT_CARD_ENABLE
|
||||||
|
void handleExternalDigitalInput(uint8_t pin, uint8_t state)
|
||||||
|
{
|
||||||
|
Serial.printf("Digital Input External %d: %d\n", pin, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
DigitalInputCard externalDigitalInputCard = DigitalInputCard(0, 0, 1, 0, 1, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Remote Variable
|
// Remote Variable
|
||||||
#ifdef REMOTE_VARIABLE_ENABLE
|
#ifdef REMOTE_VARIABLE_ENABLE
|
||||||
RemoteVariable testVar = RemoteVariable();
|
RemoteVariable testVar = RemoteVariable();
|
||||||
|
@ -172,6 +182,10 @@ void setup()
|
||||||
espmega.begin();
|
espmega.begin();
|
||||||
#ifdef EXTERNAL_DIGITAL_OUTPUT_CARD_ENABLE
|
#ifdef EXTERNAL_DIGITAL_OUTPUT_CARD_ENABLE
|
||||||
espmega.installCard(6, &externalDigitalOutputCard);
|
espmega.installCard(6, &externalDigitalOutputCard);
|
||||||
|
#endif
|
||||||
|
#ifdef EXTERNAL_DIGITAL_INPUT_CARD_ENABLE
|
||||||
|
espmega.installCard(7, &externalDigitalInputCard);
|
||||||
|
externalDigitalInputCard.registerCallback(handleExternalDigitalInput);
|
||||||
#endif
|
#endif
|
||||||
espmega.setTimezone("UTC-7");
|
espmega.setTimezone("UTC-7");
|
||||||
ESP_LOGI("Initializer", "Enabling IOT module");
|
ESP_LOGI("Initializer", "Enabling IOT module");
|
||||||
|
@ -216,6 +230,10 @@ void setup()
|
||||||
ESP_LOGI("Initializer", "Registering cards 6");
|
ESP_LOGI("Initializer", "Registering cards 6");
|
||||||
espmega.iot->registerCard(6);
|
espmega.iot->registerCard(6);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef EXTERNAL_DIGITAL_INPUT_CARD_ENABLE
|
||||||
|
ESP_LOGI("Initializer", "Registering cards 7");
|
||||||
|
espmega.iot->registerCard(7);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
ESP_LOGI("Initializer", "Registering Input change callback");
|
ESP_LOGI("Initializer", "Registering Input change callback");
|
||||||
espmega.inputs.registerCallback(input_change_callback);
|
espmega.inputs.registerCallback(input_change_callback);
|
||||||
|
|
Loading…
Reference in New Issue