card installation checking
This commit is contained in:
parent
1862887d30
commit
1481c08d3a
|
@ -3,7 +3,9 @@
|
||||||
AnalogCard::AnalogCard() : dac0(DAC0_ADDRESS),
|
AnalogCard::AnalogCard() : dac0(DAC0_ADDRESS),
|
||||||
dac1(DAC1_ADDRESS),
|
dac1(DAC1_ADDRESS),
|
||||||
dac2(DAC2_ADDRESS),
|
dac2(DAC2_ADDRESS),
|
||||||
dac3(DAC3_ADDRESS)
|
dac3(DAC3_ADDRESS),
|
||||||
|
analogInputBankA(),
|
||||||
|
analogInputBankB()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,16 +38,45 @@ uint16_t AnalogCard::analogRead(uint8_t pin)
|
||||||
return this->analogInputBankB.readADC_SingleEnded(pin - 4);
|
return this->analogInputBankB.readADC_SingleEnded(pin - 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void AnalogCard::begin()
|
bool AnalogCard::begin()
|
||||||
{
|
{
|
||||||
this->dac0 = MCP4725(DAC0_ADDRESS);
|
this->dac0 = MCP4725(DAC0_ADDRESS);
|
||||||
this->dac1 = MCP4725(DAC1_ADDRESS);
|
this->dac1 = MCP4725(DAC1_ADDRESS);
|
||||||
this->dac2 = MCP4725(DAC2_ADDRESS);
|
this->dac2 = MCP4725(DAC2_ADDRESS);
|
||||||
this->dac3 = MCP4725(DAC3_ADDRESS);
|
this->dac3 = MCP4725(DAC3_ADDRESS);
|
||||||
this->dac0.begin();
|
if (!this->dac0.begin())
|
||||||
this->dac1.begin();
|
{
|
||||||
this->dac2.begin();
|
Serial.println("Card Analog ERROR: Failed to install DAC0");
|
||||||
this->dac3.begin();
|
return false;
|
||||||
this->analogInputBankA.begin(ANALOG_INPUT_BANK_A_ADDRESS);
|
}
|
||||||
this->analogInputBankB.begin(ANALOG_INPUT_BANK_B_ADDRESS);
|
if (!this->dac1.begin())
|
||||||
|
{
|
||||||
|
Serial.println("Card Analog ERROR: Failed to install DAC1");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this->dac2.begin())
|
||||||
|
{
|
||||||
|
Serial.println("Card Analog ERROR: Failed to install DAC2");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this->dac3.begin())
|
||||||
|
{
|
||||||
|
Serial.println("Card Analog ERROR: Failed to install DAC3");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this->analogInputBankA.begin())
|
||||||
|
{
|
||||||
|
Serial.println("Card Analog ERROR: Failed to install analog input bank A");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this->analogInputBankB.begin())
|
||||||
|
{
|
||||||
|
Serial.println("Card Analog ERROR: Failed to install analog input bank B");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnalogCard::loop()
|
||||||
|
{
|
||||||
}
|
}
|
|
@ -15,7 +15,8 @@ class AnalogCard : public ExpansionCard {
|
||||||
AnalogCard();
|
AnalogCard();
|
||||||
void dacWrite(uint8_t pin, uint16_t value);
|
void dacWrite(uint8_t pin, uint16_t value);
|
||||||
uint16_t analogRead(uint8_t pin);
|
uint16_t analogRead(uint8_t pin);
|
||||||
void begin();
|
bool begin();
|
||||||
|
void loop();
|
||||||
private:
|
private:
|
||||||
MCP4725 dac0;
|
MCP4725 dac0;
|
||||||
MCP4725 dac1;
|
MCP4725 dac1;
|
||||||
|
|
|
@ -30,12 +30,18 @@ DigitalInputCard::DigitalInputCard(bool bit0, bool bit1, bool bit2, bool bit3, b
|
||||||
this->address_b += 4;
|
this->address_b += 4;
|
||||||
}
|
}
|
||||||
// Initialize the card
|
// Initialize the card
|
||||||
void DigitalInputCard::begin()
|
bool DigitalInputCard::begin()
|
||||||
{
|
{
|
||||||
this->inputBankA = PCF8574(this->address_a);
|
this->inputBankA = PCF8574(this->address_a);
|
||||||
this->inputBankB = PCF8574(this->address_b);
|
this->inputBankB = PCF8574(this->address_b);
|
||||||
this->inputBankA.begin();
|
if (!this->inputBankA.begin()) {
|
||||||
this->inputBankB.begin();
|
Serial.println("Input Card ERROR: Failed to install input bank A");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!this->inputBankB.begin()) {
|
||||||
|
Serial.println("Input Card ERROR: Failed to install input bank B");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Set the debounce time for all pins to 50ms
|
// Set the debounce time for all pins to 50ms
|
||||||
for (int i = 0; i < 16; i++)
|
for (int i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
|
@ -48,6 +54,7 @@ void DigitalInputCard::begin()
|
||||||
this->pinMap[i] = i;
|
this->pinMap[i] = i;
|
||||||
this->virtualPinMap[i] = i;
|
this->virtualPinMap[i] = i;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
// Refresh and Read the input from the specified pin, always refresh the input buffers
|
// Refresh and Read the input from the specified pin, always refresh the input buffers
|
||||||
bool DigitalInputCard::digitalRead(uint8_t pin)
|
bool DigitalInputCard::digitalRead(uint8_t pin)
|
||||||
|
|
|
@ -9,7 +9,7 @@ class DigitalInputCard : public ExpansionCard {
|
||||||
// Instantiate the card with the specified position on the dip switch
|
// Instantiate the card with the specified position on the dip switch
|
||||||
DigitalInputCard(bool bit0, bool bit1, bool bit2, bool bit3, bool bit4, bool bit5);
|
DigitalInputCard(bool bit0, bool bit1, bool bit2, bool bit3, bool bit4, bool bit5);
|
||||||
// Initialize the card
|
// Initialize the card
|
||||||
void begin();
|
bool begin();
|
||||||
// Refresh and Read the input from the specified pin, always refresh the input buffers
|
// Refresh and Read the input from the specified pin, always refresh the input buffers
|
||||||
bool digitalRead(uint8_t pin);
|
bool digitalRead(uint8_t pin);
|
||||||
// Read the input from the specified pin, also refresh the input buffers if refresh is true
|
// Read the input from the specified pin, also refresh the input buffers if refresh is true
|
||||||
|
|
|
@ -15,9 +15,14 @@ DigitalOutputCard::DigitalOutputCard(bool bit0, bool bit1, bool bit2, bool bit3,
|
||||||
|
|
||||||
}
|
}
|
||||||
// Initialize the card
|
// Initialize the card
|
||||||
void DigitalOutputCard::begin() {
|
bool DigitalOutputCard::begin() {
|
||||||
this->pwm = Adafruit_PWMServoDriver(this->address);
|
this->pwm = Adafruit_PWMServoDriver(this->address);
|
||||||
this->pwm.begin();
|
this->pwm.begin();
|
||||||
|
pwm.reset();
|
||||||
|
pwm.setOutputMode(true);
|
||||||
|
// Output card don't send ack, we can't check if it's connected
|
||||||
|
// so we just return true
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
// Set the output to the specified state
|
// Set the output to the specified state
|
||||||
void DigitalOutputCard::digitalWrite(uint8_t pin, bool state) {
|
void DigitalOutputCard::digitalWrite(uint8_t pin, bool state) {
|
||||||
|
@ -29,4 +34,8 @@ void DigitalOutputCard::analogWrite(uint8_t pin, uint16_t value) {
|
||||||
if (value > 4095) value = 4095;
|
if (value > 4095) value = 4095;
|
||||||
// Set the pwm value
|
// Set the pwm value
|
||||||
this->pwm.setPin(pin, value);
|
this->pwm.setPin(pin, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dummy loop function
|
||||||
|
void DigitalOutputCard::loop() {
|
||||||
}
|
}
|
|
@ -9,7 +9,9 @@ public:
|
||||||
// Instantiate the card with the specified position on the dip switch
|
// Instantiate the card with the specified position on the dip switch
|
||||||
DigitalOutputCard(bool bit0, bool bit1, bool bit2, bool bit3, bool bit4);
|
DigitalOutputCard(bool bit0, bool bit1, bool bit2, bool bit3, bool bit4);
|
||||||
// Initialize the card
|
// Initialize the card
|
||||||
void begin();
|
bool begin();
|
||||||
|
// Dummy loop function
|
||||||
|
void loop();
|
||||||
// Set the output to the specified state
|
// Set the output to the specified state
|
||||||
void digitalWrite(uint8_t pin, bool state);
|
void digitalWrite(uint8_t pin, bool state);
|
||||||
// Set the output to the specified pwm value
|
// Set the output to the specified pwm value
|
||||||
|
|
|
@ -2,28 +2,49 @@
|
||||||
ESPMegaPRO::ESPMegaPRO() {
|
ESPMegaPRO::ESPMegaPRO() {
|
||||||
|
|
||||||
}
|
}
|
||||||
void ESPMegaPRO::begin() {
|
bool ESPMegaPRO::begin() {
|
||||||
Wire.begin(14, 33);
|
Wire.begin(14, 33);
|
||||||
inputs.begin();
|
Serial.begin(115200);
|
||||||
|
if(!inputs.begin()) {
|
||||||
|
Serial.println("Failed to initialize inputs");
|
||||||
|
Serial.println("Is this an ESPMegaPRO device?");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
outputs.begin();
|
outputs.begin();
|
||||||
fram.begin(FRAM_ADDRESS);
|
if(!fram.begin(FRAM_ADDRESS)) {
|
||||||
|
Serial.println("Failed to initialize FRAM");
|
||||||
|
Serial.println("Is this an ESPMegaPRO device?");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
uint8_t pinMap[16] = {0, 1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8};
|
uint8_t pinMap[16] = {0, 1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8};
|
||||||
inputs.loadPinMap(pinMap);
|
inputs.loadPinMap(pinMap);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
void ESPMegaPRO::loop() {
|
void ESPMegaPRO::loop() {
|
||||||
inputs.loop();
|
inputs.loop();
|
||||||
outputs.loop();
|
outputs.loop();
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 255; i++) {
|
||||||
if (cardInstalled[i]) {
|
if (cardInstalled[i]) {
|
||||||
cards[i]->loop();
|
cards[i]->loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void ESPMegaPRO::installCard(uint8_t slot, ExpansionCard* card) {
|
bool ESPMegaPRO::installCard(uint8_t slot, ExpansionCard* card) {
|
||||||
|
if (slot > 255) return;
|
||||||
|
if (cardInstalled[slot]) {
|
||||||
|
Serial.println("Card already installed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!card->begin()) {
|
||||||
|
Serial.print("Failed to install card at slot ");
|
||||||
|
Serial.println(slot);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
cards[slot] = card;
|
cards[slot] = card;
|
||||||
cardInstalled[slot] = true;
|
cardInstalled[slot] = true;
|
||||||
cardCount++;
|
cardCount++;
|
||||||
card->begin();
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
bool ESPMegaPRO::updateTimeFromNTP() {
|
bool ESPMegaPRO::updateTimeFromNTP() {
|
||||||
struct tm timeinfo;
|
struct tm timeinfo;
|
||||||
|
|
|
@ -29,9 +29,9 @@ struct rtctime_t {
|
||||||
class ESPMegaPRO {
|
class ESPMegaPRO {
|
||||||
public:
|
public:
|
||||||
ESPMegaPRO();
|
ESPMegaPRO();
|
||||||
void begin();
|
bool begin();
|
||||||
void loop();
|
void loop();
|
||||||
void installCard(uint8_t slot, ExpansionCard* card);
|
bool installCard(uint8_t slot, ExpansionCard* card);
|
||||||
bool updateTimeFromNTP();
|
bool updateTimeFromNTP();
|
||||||
rtctime_t getTime();
|
rtctime_t getTime();
|
||||||
void setTime(int hours, int minutes, int seconds, int day, int month, int year);
|
void setTime(int hours, int minutes, int seconds, int day, int month, int year);
|
||||||
|
|
|
@ -5,7 +5,7 @@ class ExpansionCard {
|
||||||
public:
|
public:
|
||||||
// Instantiate the card with the specified address
|
// Instantiate the card with the specified address
|
||||||
ExpansionCard() {}
|
ExpansionCard() {}
|
||||||
virtual void begin() {}
|
virtual bool begin() {}
|
||||||
// Preform a loop to refresh the input buffers
|
// Preform a loop to refresh the input buffers
|
||||||
virtual void loop() {}
|
virtual void loop() {}
|
||||||
};
|
};
|
|
@ -5,19 +5,21 @@
|
||||||
|
|
||||||
// This code demonstrates how to use the cards
|
// This code demonstrates how to use the cards
|
||||||
|
|
||||||
|
|
||||||
ESPMegaPRO espmega = ESPMegaPRO();
|
ESPMegaPRO espmega = ESPMegaPRO();
|
||||||
AnalogCard analogCard = AnalogCard();
|
AnalogCard analogCard = AnalogCard();
|
||||||
|
|
||||||
void inputCallback(uint8_t pin, bool state) {
|
void inputCallback(uint8_t pin, bool state)
|
||||||
|
{
|
||||||
Serial.print("Input ");
|
Serial.print("Input ");
|
||||||
Serial.print(pin);
|
Serial.print(pin);
|
||||||
Serial.print(" changed to ");
|
Serial.print(" changed to ");
|
||||||
Serial.println(state);
|
Serial.println(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printInputs() {
|
void printInputs()
|
||||||
for (int i = 0; i < 16; i++) {
|
{
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
Serial.print("Input ");
|
Serial.print("Input ");
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(": ");
|
Serial.print(": ");
|
||||||
|
@ -26,37 +28,49 @@ void printInputs() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup() {
|
void setup()
|
||||||
Serial.begin(115200);
|
{
|
||||||
// Instantiate ESPMega
|
// Instantiate ESPMega
|
||||||
espmega.begin();
|
espmega.begin();
|
||||||
|
Serial.println("ESPMega initialized");
|
||||||
// Read all the inputs and print them
|
// Read all the inputs and print them
|
||||||
printInputs();
|
printInputs();
|
||||||
// Turn on all the outputs
|
// Turn on all the outputs
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
espmega.outputs.digitalWrite(i, true);
|
espmega.outputs.digitalWrite(i, true);
|
||||||
}
|
}
|
||||||
// Set the debounce time for all inputs to 200ms
|
// Set the debounce time for all inputs to 200ms
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
espmega.inputs.setDebounceTime(i, 200);
|
espmega.inputs.setDebounceTime(i, 200);
|
||||||
}
|
}
|
||||||
// Register the callback function
|
// Register the callback function
|
||||||
espmega.inputs.registerCallback(inputCallback);
|
espmega.inputs.registerCallback(inputCallback);
|
||||||
|
|
||||||
// Install the analog card
|
// Install the analog card
|
||||||
espmega.installCard(0, &analogCard);
|
Serial.println("Installing analog card");
|
||||||
|
if (espmega.installCard(0, &analogCard))
|
||||||
|
{
|
||||||
|
Serial.println("Analog card installed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serial.println("Failed to install analog card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long previousMillis = 0;
|
unsigned long previousMillis = 0;
|
||||||
const unsigned long interval = 1000; // 1 second
|
const unsigned long interval = 1000; // 1 second
|
||||||
|
|
||||||
void loop() {
|
void loop()
|
||||||
|
{
|
||||||
unsigned long currentMillis = millis();
|
unsigned long currentMillis = millis();
|
||||||
|
|
||||||
if (currentMillis - previousMillis >= interval) {
|
if (currentMillis - previousMillis >= interval)
|
||||||
|
{
|
||||||
previousMillis = currentMillis;
|
previousMillis = currentMillis;
|
||||||
printInputs();
|
printInputs();
|
||||||
}
|
}
|
||||||
espmega.loop();
|
espmega.loop();
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue