Hi!
Im new to Arduino and trying my first own Project running on a Arduino Uno.
It´s a temperature monitor with a display that prints current temperature to display, and a RGB-LED that shows current status by lighting up in different colors or blinking in different colors, depending on thresholds.
it also includes a button that prints the current status and temperature to serial monitor, my plan was to replace it with a GSM module that sends a text message if pressed.
It all worked fine untill i added the display.
The diodes works fine while blinking but as soon as they´re about to shine constantly, they´re only glowing very weak.
As soon as i Comment the code for the display in IDE the LEDs work fine again.
The display is connected to its own power supply.
What have i made wrong?
//Include buttons library
#include <Button.h>
//Include Oled Library
#include <U8glib.h>
//New display
U8GLIB_SSD1306_128X64 oled(U8G_I2C_OPT_NONE);
//Define time of blink
byte blinkTime = 500;
//Define temperature tresholds
const int tempHigh = 25;
const int tempDangerHigh =28;
const int tempDangerLow = 0;
const int tempLow = 5;
const int tempNormal = tempHigh / 2 + tempLow / 2;
const int tempRangeNormal = tempHigh / 2 - tempLow / 2;
const String statusCheck[] = {
"Temperature is dangerously low, current temperature is: ",
"Temperature is low, current temperature is: ",
"Temperature is low but OK, current temperature is; ",
"Temperature is OK, Current temperature is: ",
"Temperature is high but OK, current temperature is: ",
"Temperature is high, Current temperature is: ",
"Temperature is dangerously high, current temperature is: ",
"Couldnt get status, Current temperature is: "
};
//Setting Status
byte setStatus;
//Define sensor
int tempSensor = A0;
//Storage of sensor value
int actualTemp;
//Define button
Button btnTestMessage(2);
//Define LEDS
int redLed = 7;
int greenLed = 4;
int blueLed = 8;
void setup() {
// Set LEDs as output
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
// Set Button as input
btnTestMessage.begin();
// Start serial monitor
Serial.begin(9600);
}
void loop() {
//Read temperature from sensor
actualTemp = analogRead(tempSensor);
actualTemp = map(actualTemp, 0, 1023, -40.0, 40.0);
//Print to Oled.
oled.firstPage();
do {
oled.setFont(u8g_font_helvB08);
char currentTxt[] = "Current Temperature: ";
int xCurrentTxt = (oled.getWidth() - oled.getStrWidth(currentTxt)) / 2;
oled.drawStr(xCurrentTxt, 10, currentTxt);
oled.setFont(u8g_font_helvB14);
char buf[9];
sprintf (buf, "%d", actualTemp);
int xBuf = (oled.getWidth() - oled.getStrWidth(buf)) /2;
oled.drawStr(xBuf, 40, buf);
oled.setFont(u8g_font_helvB08);
char degreesTxt[] = "Degrees Celsius";
int xDegreesTxt = (oled.getWidth() - oled.getStrWidth(degreesTxt)) / 2;
oled.drawStr(xDegreesTxt, 60, degreesTxt);
}
while(oled.nextPage());
//If testbutton is pressed
if (btnTestMessage.pressed()){
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
//If Danger Cold
if (actualTemp <= tempDangerLow){
digitalWrite(blueLed, HIGH);
setStatus = 0;
}
//If cold
else if (actualTemp > tempDangerLow && actualTemp <= tempLow) {
digitalWrite(blueLed, HIGH);
delay(blinkTime);
digitalWrite(blueLed, LOW);
delay(blinkTime);
setStatus = 1;
}
// if temp OK
else if (actualTemp <= tempNormal + tempRangeNormal && actualTemp >= tempNormal - tempRangeNormal ){
digitalWrite(greenLed, HIGH);
setStatus = 3;
}
// temp OK but Low
else if (actualTemp > tempLow && actualTemp <= tempLow + tempRangeNormal / 2){
digitalWrite(greenLed, HIGH);
delay(blinkTime);
digitalWrite(greenLed, LOW);
delay(blinkTime);
setStatus = 2;
}
// temp OK but High
else if (actualTemp < tempHigh && actualTemp >= tempHigh - tempRangeNormal / 2){
digitalWrite(greenLed, HIGH);
delay(blinkTime);
digitalWrite(greenLed, LOW);
delay(blinkTime);
setStatus = 4;
}
//If Hot
else if (actualTemp >= tempHigh && actualTemp < tempDangerHigh) {
digitalWrite(redLed, HIGH);
delay(blinkTime);
digitalWrite(redLed, LOW);
delay(blinkTime);
setStatus = 5;
}
//If Danger Hot
else if (actualTemp >= tempDangerHigh) {
digitalWrite(redLed, HIGH);
setStatus = 6;
}
//If Error
else {
digitalWrite(blueLed, HIGH);
delay(blinkTime);
digitalWrite(blueLed, LOW);
delay(blinkTime);
digitalWrite(greenLed, HIGH);
delay(blinkTime);
digitalWrite(greenLed, LOW);
delay(blinkTime);
digitalWrite(redLed, HIGH);
delay(blinkTime);
digitalWrite(redLed, LOW);
delay(blinkTime);
setStatus = 7;
}
//Set all LEDs Low
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
}