Hi all! I'm still getting myself acquainted with C, so I expect this is a very basic issue I'm facing. I've got an OLED screen connected to a Teensy LC and can display text on it just fine. The Teensy receives bytes via I2C, and I want to reassemble those bytes into strings and display them on the OLED. Let's see if this is an X/Y problem!
My relevant code:
#define I2C_ADDRESS 4
char buf[16];
void setup(void) {
Serial.begin(9600);
Wire.begin(I2C_ADDRESS);
Wire.onReceive(receiveData);
u8g2.begin();
}
void loop(void) {
// U8G2 setup code snipped
// This line doesn't output anything on the screen:
u8g2.drawStr(0, 0, buf);
// This line does:
u8g2.drawStr(0, 20, "Foobar!");
u8g2.sendBuffer();
delay(1000);
}
void receiveData(int byteCount){
Serial.print("Data received: ");
int i;
for (i=0; i<byteCount; i++)
{
buf[i] = Wire.read();
Serial.println(buf[i]);
}
buf[i] = '\0';
Serial.println(buf);
}
In the receiveData() function, the Serial.println() within the for loop prints out each letter of the payload as it's received, one after the other - but the Serial.println() below the for loop, which in my estimation should print out the whole message, prints out a blank line. I presume that's related to the fact that the received string doesn't show up on the OLED display.