Go Down

### Topic: IF temperature > 24 --> hot hot hot (Read 3285 times)previous topic - next topic

#### lomohelm

##### Mar 14, 2013, 11:45 pmLast Edit: Mar 14, 2013, 11:58 pm by lomohelm Reason: 1
EDIT1: put the whole code in here as said in the forum rules. Sorry for posting things like a cowboy.

Hi there,

I've been fiddling around with my Arduino Uno board for a couple of weeks now. I went through the standard lessons to blink LED's and such. I also bought an 2x16 LCD display and i thought I'd make myself a fun thermometer. This worked following the tutorials online. The TMP36 temperature sensor works splendid (However i miswired it first and it became very hot, unpluged it after 3 seconds) and i got the display to print "(temperature) °C".

What I tried to do now was to put a message on the second line of my display when temperature exceeds 24° which i did as so:

Code: [Select]
`#include <LiquidCrystal.h>// Arduino pins used for LCDLiquidCrystal lcd(7, 8, 9, 10, 11, 12);void setup() {    // initialize the LCD display    lcd.begin(16, 2);}void loop() {    float temperature = 0.0;   // stores the calculated temperature    int sample;                // counts through ADC samples    float ten_samples = 0.0;   // stores sum of 10 samples      // take 10 samples from the MCP9700    for (sample = 0; sample < 10; sample++) {        // convert A0 value to temperature        temperature = ((float)analogRead(A0) * 5.0 / 1024.0) - 0.5;        temperature = temperature / 0.01;        // sample every 0.1 seconds        delay(100);        // sum of all samples        ten_samples = ten_samples + temperature;    }    // get the average value of 10 temperatures    temperature = ten_samples / 10.0;    // display the temperature on the LCD    lcd.setCursor(0, 0);    lcd.print(temperature);    lcd.print(" \337C");    ten_samples = 0.0;    lcd.setCursor (0,1);if (temperature > 24) lcd.print("Hot Hot Hot");}`
Now, even when the temperature drops below 24°c the text remains on the screen. so i tried adding:

Code: [Select]
`if (temperature < 24) lcd.print("ice ice baby');`

But this only gives a flickering screen changing quickly from ice ice baby to hot hot hot and vice versa. i tried to reset it and then once above 24°c the text remained Hot Hot Hot even when after the first increase of temp. the temp. dropped back below 24.

How can I solve this? Does it have something to do with the wrong wired TMP36? maybe it does not accurately read the temp. anymore since i almost fried it?

#### AWOL

#1
##### Mar 14, 2013, 11:47 pm
At the top of this section there are two related sticky threads in bold.
Please read and understand them
"Pete, it's a fool (who) looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.
I speak for myself, not Arduino.

#### lomohelm

#2
##### Mar 15, 2013, 12:06 am
Ok I think I know where the problem lies: if i use the same amount of characters (none being space) it will replace if the temperature drops/increases.
Code: [Select]
`if (temperature > 24) lcd.print("Hot Hot Hot");if (temperature < 24) lcd.print("ice ice baby!!!!');`

However the first 10 seconds the TMP36 acts out of control after putting my warm finger on it, switching between 22 and 24 degrees like a blinking led. I can live with the fact that it is sensitive and with a little bit of patience and acclimatisation this code does the trick.

Nonetheless, How can I do the same trick with an empty second line? in other words: how do I clear the Hot Hot Hot line when temp drops below 24°c?

#### Arrch

#3
##### Mar 15, 2013, 12:41 am

Nonetheless, How can I do the same trick with an empty second line? in other words: how do I clear the Hot Hot Hot line when temp drops below 24°c?

Either clear the lcd or set the cursor and print enough blank spaces.

#### Tumbleweed

#4
##### Mar 15, 2013, 12:44 am
lomohelm,
Code: [Select]
`if (argument){action;}`
'nuff said
TomJ
Einstein once said you don't really understand anything until you can explain it to your Grandmother

#### noobdude

#5
##### Mar 15, 2013, 12:44 amLast Edit: Mar 15, 2013, 12:48 am by noobdude Reason: 1
I'm beginner as well but I'll try to help. You have less than 24 degrees and greater than 24 degrees there. May want to add less than or equal to 24 degrees. Once its 24 degrees exactly what would happen?

Code: [Select]
`if (temperature <= 24)`

For clearing the hot hot hot you simply set the cursor to where you need to and

Code: [Select]
`lcd.print("            "); `

Just prints spaces. Was this what you're trying to do? Remember that when you want to print the hot hot hot you'll need to set the cursor back to the correct position.

@arrch good call haha! I missed your post.

I'm not sure if there's a better way to do that but it works. Hopefully someone else with more experience can chime in.

#### PeterH

#6
##### Mar 15, 2013, 01:51 am

Ok I think I know where the problem lies: if i use the same amount of characters (none being space) it will replace if the temperature drops/increases.
Code: [Select]
`if (temperature > 24) lcd.print("Hot Hot Hot");if (temperature < 24) lcd.print("ice ice baby!!!!');`

Assuming you want to display one thing or the other, you should use if/else rather than two if statements. (As coded above, it does nothing when the value is exactly 24.)

#### Tumbleweed

#7
##### Mar 15, 2013, 01:59 am
No if statement will work without CURLY BRACES.
Einstein once said you don't really understand anything until you can explain it to your Grandmother

#### Arrch

#8
##### Mar 15, 2013, 02:14 am

No if statement will work without CURLY BRACES.

Incorrect, but including them is always recommended.

#### GoForSmoke

#9
##### Mar 15, 2013, 02:44 am
Code: [Select]
`if (temperature > 24) lcd.print("Hot Hot Hot");if (temperature < 24) lcd.print("ice ice baby!!!!');`

What is it supposed to do when (temperature == 24) ?  Or maybe if (temperature >= 24) is hot?

Why not have a "Just right baby!" in between Hot and Cold? Ice is way colder than 23 C.

Code: [Select]
`if (temperature < 24) lcd.print("ice ice baby!!!!');`

There's something wrong with the syntax at the end of that line above. You start the text to print with " and end with '.
1) http://gammon.com.au/blink  <-- tasking Arduino 1-2-3
2) http://gammon.com.au/serial <-- techniques howto
3) http://gammon.com.au/interrupts
Your sketch can sense ongoing process events in time.
Your sketch can make events to control it over time.

#### noobdude

#10
##### Mar 15, 2013, 03:35 am
I don't think he was posting actual code just idea like I was.

#### GoForSmoke

#11
##### Mar 15, 2013, 06:21 am
Try reading the first post again.

1) http://gammon.com.au/blink  <-- tasking Arduino 1-2-3
2) http://gammon.com.au/serial <-- techniques howto
3) http://gammon.com.au/interrupts
Your sketch can sense ongoing process events in time.
Your sketch can make events to control it over time.

#### Chaul

#12
##### Mar 15, 2013, 06:42 am
I don't see how that code would flicker quickly between the two texts unless you call once a second quickly. But it depends on how exactly you added that second line into the sketch because that line wouldn't even compile. You need an if else and make it so that at least when anything should change on screen, it also clears the line that used to have text on it, or writes on top of it, but not both at the same time.

Secondly, from what I've seen, temperature sensors can produce spikes or drops. Suddenly the reading would just drop by up to several degrees in my tests. You can add a check on passed time so that your printed line possibly cannot flicker too quickly between states.

#### wildbill

#13
##### Mar 15, 2013, 12:20 pm
A subtle issue that may bite you here is that three exclamation points mean something special to the bootloader - you may want to change your ice message to contain fewer.

#### lomohelm

#14
##### Mar 15, 2013, 03:57 pm
Thanks heaps for the help!

I'm at work now but I will try your suggestions later tonight.

Go Up