Hi guys,
I'm new to arduino and doing my first project at the moment. It's a thermometer and now I've ran into a problem while trying to add push-button to it.
Push-button should be used to choose if the sensor is active or not: active when pressed, not active when pressed again. Also an extra LED should be indicating the state of the button: ON = sensor active; OFF = sensor not active.
I've tried to find different ways to solve this (while, if/else) but can't get the system working. I got the button working fine with if and else statements but it made the sensor read only one value while it wasn't pressed, and different value when pressed.
All the help is appreciated since I'm kinda out of ideas now.
Here is what I've managed to do so far:
// set variables
int sensorVal;
int heartBeat = 0;
int blinkingMIN = 0;
int blinkingMAX = 0;
unsigned long timer1;
unsigned long timer2;
unsigned long timer3;
unsigned long timer4;
const int sensorPin = A0; // the number of pin for the temperature sensor (analog input)
const float roomTemp = 21.0; // room temperature in Celsius
float temperature;
void setup() {
// open a serial connection to display values
Serial.begin(9600);
// set the LED pins as outputs
pinMode(13, OUTPUT);
for (int pinNumber = 2; pinNumber < 8; pinNumber++) {
pinMode(pinNumber, OUTPUT);
digitalWrite(pinNumber, LOW);
}
//LED test at startup
digitalWrite(2,HIGH);
delay(100);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(7,HIGH);
delay(500);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
delay(500);
}
void loop() {
// Make the LED blink
if (millis() - timer1 > 500){
heartBeat = !heartBeat;
digitalWrite (13, heartBeat);
timer1 = millis();
}
// update sensor value at 1Hz and print the values to serial monitor
if(millis() - timer2 > 1000) {
sensorVal = analogRead(sensorPin);
temperature = (5.0 * sensorVal * 100.0) / 1024;
Serial.print("degrees C: ");
Serial.println(temperature);
timer2 = millis();
}
// if the current temperature is lower than the roomTemp: turn off all LEDs and blink the LED in pin 2 -> temperature under minimum value
if (temperature < roomTemp + 2) {
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
// Make the LED blink
if (millis() - timer3 > 500){
blinkingMIN = !blinkingMIN;
digitalWrite (2, blinkingMIN);
timer3 = millis();
}
}
// if the temperature rises 2-3 degrees: turn an LED on
else if (temperature >= roomTemp + 2 && temperature < roomTemp + 3) {
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// if the temperature rises 3-4 degrees: turn a second LED on
else if (temperature >= roomTemp + 3 && temperature < roomTemp + 4) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// if the temperature rises 4-5 degrees: turn a third LED on
else if (temperature >= roomTemp + 4 && temperature < roomTemp + 5) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// if the temperature rises 5-6 degrees: turn a fourth LED on
else if (temperature >= roomTemp + 5 && temperature < roomTemp + 6) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
// if the temperature rises 6-7 degrees, turn a fifth LED on
else if (temperature >= roomTemp + 6 && temperature < roomTemp + 7) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
// if the temperature goes 7 degrees over the roomTemp: turn on all LEDs and blink the led in pin 7 -> maximum value has been crossed
else if (temperature >= roomTemp + 7) {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
// Make the LED blink
if (millis() - timer4 > 500) {
blinkingMAX = !blinkingMAX;
digitalWrite (7, blinkingMAX);
timer4 = millis();
}
}
}