Describe the bug
DisplaySH1106_128x64_I2C::begin() crashes when external interrupts are enabled.
To Reproduce
Steps to reproduce the behavior:
Create arduino sketch with following code
#include <HardwareSerial.h>
#include "lcdgfx.h"
#include "lcdgfx_gui.h"
constexpr float fVFac = 5.0f * ((220.0f + 33.0f) / 33.0f) * (1.0f / 1023.0f);
DisplaySH1106_128x64_I2C d = DisplaySH1106_128x64_I2C(-1);
volatile bool bPressed = false;
volatile uint16_t nDelayCnt = 0;
void setup() {
Serial.begin(115200);
Serial.println("*");
PCICR |= (1 << PCIE1);
// If these lines are uncommented, the program will die at the marked spot below and be stuck in a reboot loop
//PCMSK1 = (1 << PCINT13);
//EICRA |= (0 << ISC11) | (1 << ISC10);
Serial.println("begin...");
delay(250);
// This is the call that crashes
d.begin(); // Address 0x3C default
Serial.println("set font...");
delay(250);
d.setFixedFont(ssd1306xled_font6x8);
Serial.println("fill...");
delay(250);
d.fill( 0x00 );
Serial.println("setup done!");
delay(250);
}
void loop()
{
float fAR = analogRead(A2);
float fV = fVFac * fAR;
uint8_t w = (100.0f / 18.0f) * fV;
uint8_t v = floor(fV);
uint8_t mv = 10 * (fV - v);
char szText[5];
sprintf(szText, "%2u.%1.1u V", v, mv);
Serial.println("VCC: ");Serial.println(fV);
Serial.println("set color...");
delay(250);
const char* p = szText;
d.setColor(0);
Serial.println("fill...");
delay(250);
d.fillRect(0, 0, 128, 64);
Serial.println("set color...");
delay(250);
d.setColor(1);
Serial.println("draw text...");
delay(250);
d.printFixed(0, 0, szText, STYLE_NORMAL);
delay(1);
if (nDelayCnt > 0) nDelayCnt--;
}
ISR(PCINT19_vect)
{
Serial.print("X");
if (nDelayCnt == 0)
{
bPressed = true;
nDelayCnt = 200;
}
}
Uncommenting the two lines will cause a crash but otherwise the program works fine
Expected behavior
As it appears to me, enabling the external interrupts causes the reboot loop. I need those to interface with buttons, and would like not to need polling. So hopefully there is a workaround that allows both to run at the same time.
Screenshots
If applicable, add screenshots to help explain your problem.
Please complete the following information:
lcdgfx 1.1.4
SHT1106
Windows
Arduino UNO
Arduino IDE
Additional context
Switching lcdgfx init and the register change did not help
Describe the bug DisplaySH1106_128x64_I2C::begin() crashes when external interrupts are enabled.
To Reproduce Steps to reproduce the behavior:
Expected behavior As it appears to me, enabling the external interrupts causes the reboot loop. I need those to interface with buttons, and would like not to need polling. So hopefully there is a workaround that allows both to run at the same time.
Screenshots If applicable, add screenshots to help explain your problem.
Please complete the following information:
Additional context Switching lcdgfx init and the register change did not help