You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
The text was updated successfully, but these errors were encountered:
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
The text was updated successfully, but these errors were encountered: