Actually with the regulator they use you should be fine down to about 6.5v not sure why they ask for 9.
Are you using an UNO?
Actually with the regulator they use you should be fine down to about 6.5v not sure why they ask for 9.
Are you using an UNO?
Problem Solved!
It was part of the code, LEDs was actually blinking very fast, not glowing.
Removed the last part of the code that set the LEDs Low and instead only made them go low when it passed a threshold.
Here is new code.
//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, -5.0, 30.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);
if (setStatus != 0 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 0;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 0;
}
}
//If cold
else if (actualTemp > tempDangerLow && actualTemp <= tempLow) {
digitalWrite(blueLed, HIGH);
delay(blinkTime);
digitalWrite(blueLed, LOW);
delay(blinkTime);
if (setStatus != 1 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 1;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 1;
}
}
// if temp OK
else if (actualTemp <= tempNormal + tempRangeNormal / 2 && actualTemp >= tempNormal - tempRangeNormal / 2 ){
digitalWrite(greenLed, HIGH);
if (setStatus != 3 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 3;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 3;
}
}
// temp OK but Low
else if (actualTemp > tempLow && actualTemp <= tempLow + tempRangeNormal / 2){
digitalWrite(greenLed, HIGH);
delay(blinkTime);
digitalWrite(greenLed, LOW);
delay(blinkTime);
if (setStatus != 2 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 2;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 2;
}
}
// temp OK but High
else if (actualTemp < tempHigh && actualTemp >= tempHigh - tempRangeNormal / 2){
digitalWrite(greenLed, HIGH);
delay(blinkTime);
digitalWrite(greenLed, LOW);
delay(blinkTime);
if (setStatus != 4 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 4;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 4;
}
}
//If Hot
else if (actualTemp >= tempHigh && actualTemp < tempDangerHigh) {
digitalWrite(redLed, HIGH);
delay(blinkTime);
digitalWrite(redLed, LOW);
delay(blinkTime);
if (setStatus != 5 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 5;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 5;
}
}
//If Danger Hot
else if (actualTemp >= tempDangerHigh) {
digitalWrite(redLed, HIGH);
if (setStatus != 6 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 6;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
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);
if (setStatus != 7 ){
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
setStatus = 7;
Serial.print(statusCheck[setStatus]);
Serial.print(actualTemp);
Serial.println("°C");
}
else {
setStatus = 7;
}
}
}
nice, i thought that looked funny... it's something you would put at setup if needed.
Put it at the bottom since LEDs stayed on when it went between some of the thresholds, but now i see why that wasn´t the smartest ![]()
Could it be that the code runs faster without the Oled part so it became like a PWM?
long code - long time low - not much light, short code - short time low - glowing brighter?