timer starten met knop ?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: timer starten met knop ?
1: ik heb inderdaad een fout gemaakt door te stellen dat hij om de 5 minuten kijkt naar de temperatuur en niet 5 seconden. Dus ik zou het volgende doen:
a) verander FIVEMINUTES in FIVESECONDS (in het hele programma)
b) verander de 300000L in 5000L.
2: Dat je niet kan uitlezen klopt... daar vroeg je niet om. Dan zou je een LCD moeten toevoegen. Dat zou nog net kunnen (je hebt 6 pinnen nodig en je hebt er nog 6 over) of een nemen die via de SPI werkt. Heb je een paar pinnen minder nodig.
3: Nope je hebt nog steeds de klacht niet geuit
a) verander FIVEMINUTES in FIVESECONDS (in het hele programma)
b) verander de 300000L in 5000L.
2: Dat je niet kan uitlezen klopt... daar vroeg je niet om. Dan zou je een LCD moeten toevoegen. Dat zou nog net kunnen (je hebt 6 pinnen nodig en je hebt er nog 6 over) of een nemen die via de SPI werkt. Heb je een paar pinnen minder nodig.
3: Nope je hebt nog steeds de klacht niet geuit
Advertisement
Re: timer starten met knop ?
hoi Nico
dat van de FIVESECONDS had ik al gezien en dit had ik al naar een een kortere tijd terug gebracht
dat ik niet heb aangegeven dat ik er een lcd scherm aan wil klopt want ik kom er ook maar net achter dat ik dit nu mist maar dat is meer iets voor later
wat ik mij afvraag is hoe het nu werkt want hij schakelt niet op de temperatuur
daarom wil ik graag een Serial.println tijdelijk toevoegen waarmee ik de temperatuur uitlees en de ingestelde temperatuur uitlees zodat ik weet bij welke temperatuur hij uit zou moeten gaan schakelen
als ik nu het programma start en op de knop1 druk gaat de fan draaien en wordt de led van groen rood de tijd werkt dan netjes zoals ik het graag zou willen hebben
het lijkt er alleen op dat hij nu niets doet met de temperatuur regeling want als ik de potmeter naar nul draai dan blijft de fan aan als ik hem dan daar 100% draai gebeurt er ook niets
het lijkt in de software te zitten en niet in de hardware
ik kan namelijk wel via serial.println de sensor waarden uitlezen en ook de stand van de potmeter
verdere klacht nog niet gevonden
groet dirk ambu
dat van de FIVESECONDS had ik al gezien en dit had ik al naar een een kortere tijd terug gebracht
dat ik niet heb aangegeven dat ik er een lcd scherm aan wil klopt want ik kom er ook maar net achter dat ik dit nu mist maar dat is meer iets voor later
wat ik mij afvraag is hoe het nu werkt want hij schakelt niet op de temperatuur
daarom wil ik graag een Serial.println tijdelijk toevoegen waarmee ik de temperatuur uitlees en de ingestelde temperatuur uitlees zodat ik weet bij welke temperatuur hij uit zou moeten gaan schakelen
als ik nu het programma start en op de knop1 druk gaat de fan draaien en wordt de led van groen rood de tijd werkt dan netjes zoals ik het graag zou willen hebben
het lijkt er alleen op dat hij nu niets doet met de temperatuur regeling want als ik de potmeter naar nul draai dan blijft de fan aan als ik hem dan daar 100% draai gebeurt er ook niets
het lijkt in de software te zitten en niet in de hardware
ik kan namelijk wel via serial.println de sensor waarden uitlezen en ook de stand van de potmeter
verdere klacht nog niet gevonden
groet dirk ambu
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: timer starten met knop ?
Ik weet niet wat de sensor leest, maar er is een mapping die de potmeter waarde omzet in een range van 15-35 graden. als je zoekt op map kun je die veranderen. M.a.w. laagste stand is 15 en hoogste stand is 35.
geef ff je laatste source.
geef ff je laatste source.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: timer starten met knop ?
En wat print je uit via de serial? de meting van die LM of de geconverteerde waarde?
Re: timer starten met knop ?
beste nico
bij deze de code
ik heb via serial.print gekeken of ik wel de juiste analoge porten gebruikt
dat heb ik gedaan met onderstaande code
ik heb allen de port veranderd waardoor ik de waarde van de sensor kon zien en vervolgens de port veranderd zodat ik de waarde van de potmeter kon zien
echter geeft die dan een waarde van -50 tot + 480
met vriendelijke groet dirk ambu
bij deze de code
- Code: Alles selecteren
/**
* @mainpage Timerswitch program
* \n This program has relays that can be switched on and off based on
* a switch status or time limit.
* \n The time limit is currently set for 1 hour but my be extended with
* 15 minutes under the condition that a button corresponding to a relay is
* not pressed for longer than 5 seconds. If the button is pushed for more than
* 5 seconds, the timer is reset and switched off.
* @author Nico Verduin
* @date 21-6-2013
*/
/**
* Revision control
* Revision : $Revision$
* Author : $Author$
* Date : $Date$
*
*/
//
// global variables
//
unsigned long timer1Counter; // timer 1
unsigned long timer2Counter; // timer 2
unsigned long temp1Counter; // timer 1 for temperature
unsigned long temp2Counter; // timer 2 for temperature
float temperatureSensor1; // temperature sensor 1
float temperatureSensor2; // temperature sensor 2
unsigned int setTemperature1; // set temperature 1
unsigned int setTemperature2; // set temperature 2
//
// arduino pins
//
#define RELAY1 7 // pin 4
#define RELAY2 6 // pin 5
//#define RELAY3 5 // pin 6
//#define RELAY4 4 // pin 7
#define LEDPIN1 9 //pin 9
#define LEDPINN2 10 // pin 10
#define LEDPIN3 11 //pin 11
#define LEDPINN4 12 //pin 12
#define SWITCH1 2 // pin 2
#define SWITCH2 3 // pin 3
#define TEMP_SENSOR1 A0 // analog pin A0 Sensor1
#define TEMP_SENSOR2 A1 // analog pin A1 Sensor2
#define TEMP_SET1 A2 // analog pin A2 set temp 1
#define TEMP_SET2 A3 // analog pin A3 set temp 2
//
// other settings
//
#define ON LOW // on/off
#define OFF HIGH
#define TIME_TO_PRESS 3000L // time to push button for reset 5000L
#define HOUR 36000L // 3.6 million milliseconds in hour 3600000L
#define QUARTER 900000L // 900000 millsecs in 15 minutes 900000L
#define FIVESECONDS 5000L // 5 seconden period 300000L 100000L
#define DEBOUNCE_TIME 100 // 100 mSec debounce time 100
/**
* @name setup()
* Initializes the IO ports and resets any variables
*/
void setup()
{
//
// set pins input output. analog pins do not need to be setup
//
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
//pinMode(RELAY3, OUTPUT);
// pinMode(RELAY4, OUTPUT);
pinMode(LEDPIN1, OUTPUT);
pinMode(LEDPINN2, OUTPUT);
pinMode(LEDPIN3, OUTPUT);
pinMode(LEDPINN4, OUTPUT);
pinMode(SWITCH1, INPUT);
pinMode(SWITCH2, INPUT);
//
// pull up resistors
//
digitalWrite(SWITCH1, HIGH);
digitalWrite(SWITCH2, HIGH);
//
// make sure relays are switched off
//
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
//digitalWrite(RELAY3, LOW);
//digitalWrite(RELAY4, LOW);
//
// test led,s
//
digitalWrite(LEDPIN1, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN1, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN2, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN2, LOW); //make sure led works
delay (200);
digitalWrite(LEDPIN3, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN3, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN4, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN4, LOW); //make sure led works
delay (200);
digitalWrite(LEDPIN1, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN1, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN2, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN2, LOW); //make sure led works
delay (200);
digitalWrite(LEDPIN3, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN3, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN4, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN4, LOW); //make sure led works
delay (1000);
// other variables
//
timer1Counter = 0L; // timer counters
timer2Counter = 0L;
}
/**
* @name Loop()
* continues to loop through this routine until Arduino is switched off
* This routine just processes each timer in sequence
*/
void loop()
{
//
// read temperature settings from potmeters
//
setTemperature1 = map(analogRead(TEMP_SET1), 0, 1023, 15,35);
setTemperature2 = map(analogRead(TEMP_SET2), 0, 1023, 15,35);
//
// process timers
//
timer1Counter = processTimer(SWITCH1, RELAY1, LEDPIN1, LEDPINN2, timer1Counter);
timer2Counter = processTimer(SWITCH2, RELAY2, LEDPIN3, LEDPINN4, timer2Counter);
//
// process temperature
//
temp1Counter = processTemperature(RELAY1, LEDPIN1, LEDPINN2, TEMP_SENSOR1, setTemperature1, temp1Counter, timer1Counter);
temp2Counter = processTemperature(RELAY2, LEDPIN3, LEDPINN4, TEMP_SENSOR2, setTemperature2, temp2Counter, timer2Counter);
}
/**
* @name long procesTimer(int button, int relay, int setTemp, long counter)
* @param button button to process
* @param relay relay to process
* @param counter timer value to compare to millis
* @return long with new timer value
*
* this routine receives the timer value, button and relay.
* \n It tests if the button is pressed. If so:
* \n a) it just keeps counting time until the button is released.
* \n b) it checks how long the button was pressed:
* \n - if more (or equal to) than TIME_TO_PRESS, rest counter and relay
* \n - if not check if the counter was running:
* \n * if so Add 15 minutes
* \n * if not start the timer at one hour
* \n If button not pressed:
* \n a) if current time is greater(or equal to) timer value:
* \n - Reset the timer
* \n - Switch relay off
*
*/
long processTimer(int button, int relay, int ledpin, int ledpinn, unsigned long counter){
unsigned long returnCounter; // return value
unsigned long localCounter; // counter for pressed time
returnCounter = counter; // if unchanged we have the right value
//
// check if a button is pressed
// if so check if it is a TIME_TO_PRESS press
//
if (deBounce(button) == ON){
//
// button is pressed. No see for how long
//
localCounter = millis();
//
// now wait until button is released so don't forget to let go :)
//
while(1) {
//
// check if button is released
//
if (deBounce(button) == OFF){
//
// yes so quit this loop
//
break;
}
}
//
// the button is released check if we are passed the time limit
// the time is corrected for 2 x the DEBOUNCE_TIME as this time is
// already lost in the deBounce routine.
//
if ((millis() - localCounter) >= (TIME_TO_PRESS - (DEBOUNCE_TIME * 2))) {
//
// yes so switch the relay off
//
returnCounter = 0L;
digitalWrite(relay, LOW);
digitalWrite(ledpinn,LOW);
} else {
//
// The time pressed was less than the TIME_TO_PRESS so check
// if we have to switch the relay on for one hour or add 15 minutes
//
if (returnCounter == 0L) {
//
// No it wasn't so switch the relay on and set the timer
//
returnCounter = millis() + HOUR;
//
} else {
//
// it was already running so just add 15 minutes
//
returnCounter += QUARTER;
}
}
} else {
//
// no button was pressed so just check the timer
//
if (millis() >= returnCounter) {
//
// yes so switch off the relay and the timer
//
returnCounter = 0L;
digitalWrite(relay, LOW);
digitalWrite(ledpinn, HIGH);
digitalWrite(ledpin, LOW);
}
}
return returnCounter;
}
/**
* @name deBounce(int button)
* @param button button pin to read and do debouncing
* @returns state of button
*
* Reads a button and waits DEBOUNCE_TIME mSec and tests again
* Returns read if value unchanged and zero if it has changed for
* DEBOUNCE_TIME time
*/
int deBounce(int button) {
int state; // value of pin
//
// read the button
//
state = digitalRead(button);
delay(DEBOUNCE_TIME); // now wait a little time
//
// now check if it has changed
//
if (digitalRead(button) != state) {
return OFF; // the state has changed so consider it off
// if it went on halfway this routine it will
// have stabilized by the next time we read here
} else {
//
// return the button value
//
return state;
}
}
/**
* @name long processTemperature(int relay , int sensor, int tempSet, long tempCtr, long timerCtr)
* @param relay relay pin
* @param sensor sensor pin
* @param tempSet Set temperature as int value
* @param tempCtr 5 minute counter for temp readings
* @param timerCtr Main timer counter. If not 0 this timer is active
* @return long with new timer value for temperature readings
*
* this routine checks the timer counter. If non zeroe this timer is active.
* next check if the temp ctr has passed 5 minutes. If so check the temperature.
* \n Next check if the temperature is higher than the set temperature. If so
* switch the relay on. If it is below then the relay will be switched off.
*/
long processTemperature(int relay , int ledpin , int ledpinn, int sensor, int tempSet, unsigned long tempCtr, unsigned long timerCtr){
unsigned int tempReading; // temperature from LM35
float convertedTemp; // temperature in degrees
//
// first check if a counter is running and if not if it should be running
//
if (timerCtr != 0L) {
//
// there is a timer running so let's see if we need to read the temperature
//
if (millis() >= tempCtr) {
//
// yes so let's read the sensor
//
tempReading = analogRead(sensor);
//
// and convert it to a temperature
//
convertedTemp = (5.0 * tempReading *100.0)/1024.0;
//
// now check if we are above the set temperature
//
if (convertedTemp > tempSet) {
//
// switch the relay on
//
digitalWrite(relay, HIGH); // relay is aan
digitalWrite(ledpinn, LOW); // rode led is uit
digitalWrite(ledpin, HIGH); // groene led is aan
} else {
//
// switch the relay off
//
digitalWrite(relay, LOW); // relay is uit
digitalWrite(ledpinn, HIGH); // rode led is aan
digitalWrite(ledpin, LOW); // groene led is aan
}
//
// set the temperature for the next sensing period
//
tempCtr = millis() + FIVESECONDS;
}
} else {
//
// no activity so reset the tempCtr timer
//
tempCtr = 0L;
}
//
// and hand the timer back
//
return tempCtr;
}
ik heb via serial.print gekeken of ik wel de juiste analoge porten gebruikt
dat heb ik gedaan met onderstaande code
ik heb allen de port veranderd waardoor ik de waarde van de sensor kon zien en vervolgens de port veranderd zodat ik de waarde van de potmeter kon zien
echter geeft die dan een waarde van -50 tot + 480
- Code: Alles selecteren
/* ---------------------------------------------------------
* | Arduino Experimentation Kit Example Code |
* | CIRC-10 .: Temperature :. (TMP36 Temperature Sensor) |
* ---------------------------------------------------------
*
* A simple program to output the current temperature to the IDE's debug window
*
* For more details on this circuit: http://tinyurl.com/c89tvd
*/
//TMP36 Pin Variables
int temperaturePin = A2; //the analog pin the TMP36's Vout (sense) pin is connected to
//the resolution is 10 mV / degree centigrade
//(500 mV offset) to make negative temperatures an option
/*
* setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
Serial.begin(9600); //Start the serial connection with the copmuter
//to view the result open the serial monitor
//last button beneath the file bar (looks like a box with an antenae)
}
void loop() // run over and over again
{
float temperature = getVoltage(temperaturePin); //getting the voltage reading from the temperature sensor
temperature = (temperature - .5) * 100; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((volatge - 500mV) times 100)
Serial.println(temperature); //printing the result
delay(1000); //waiting a second
}
/*
* getVoltage() - returns the voltage on the analog input defined by
* pin
*/
float getVoltage(int pin){
return (analogRead(pin) * .004882814); //converting from a 0 to 1024 digital range
// to 0 to 5 volts (each 1 reading equals ~ 5 millivolts
}
met vriendelijke groet dirk ambu
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: timer starten met knop ?
Leuk geprobeerd
Maar ga eerst maar een serial.print statements in bouwen in de echte source. Daar wil je zien wat de waardes zijn. Niet in een ander programma.
"ja meneer mijn auto is stuk want er stond er net zo een aan de snelweg.....
Ik zie het morgen wel. in de source print de variabelen van de meting van de LM35, de converted temperature, de waarde van de potmeter enz. Dan kan je in de software kijken. Nu prakkezeer ik er niet over.
Maar ga eerst maar een serial.print statements in bouwen in de echte source. Daar wil je zien wat de waardes zijn. Niet in een ander programma.
"ja meneer mijn auto is stuk want er stond er net zo een aan de snelweg.....
Ik zie het morgen wel. in de source print de variabelen van de meting van de LM35, de converted temperature, de waarde van de potmeter enz. Dan kan je in de software kijken. Nu prakkezeer ik er niet over.
Re: timer starten met knop ?
oke ik ga proberen om de twee waardes uit te lezen via serial print
of me dat lukt voor morgen ochtend weet ik haha
groet dirk ambu
of me dat lukt voor morgen ochtend weet ik haha
groet dirk ambu
Re: timer starten met knop ?
beste nico
ik kan nu 1 sensor uitlezen maar of dit de juiste manier is ??
nu even proberen om de potmeter ernaast te krijgen
groet dirk ambu
ik kan nu 1 sensor uitlezen maar of dit de juiste manier is ??
- Code: Alles selecteren
/**
* @mainpage Timerswitch program
* \n This program has relays that can be switched on and off based on
* a switch status or time limit.
* \n The time limit is currently set for 1 hour but my be extended with
* 15 minutes under the condition that a button corresponding to a relay is
* not pressed for longer than 5 seconds. If the button is pushed for more than
* 5 seconds, the timer is reset and switched off.
* @author Nico Verduin
* @date 21-6-2013
*/
/**
* Revision control
* Revision : $Revision$
* Author : $Author$
* Date : $Date$
*
*/
//
// global variables
//
unsigned long timer1Counter; // timer 1
unsigned long timer2Counter; // timer 2
unsigned long temp1Counter; // timer 1 for temperature
unsigned long temp2Counter; // timer 2 for temperature
float temperatureSensor1; // temperature sensor 1
float temperatureSensor2; // temperature sensor 2
unsigned int setTemperature1; // set temperature 1
unsigned int setTemperature2; // set temperature 2
//
// arduino pins
//
#define RELAY1 7 // pin 4
#define RELAY2 4 // pin 5
//#define RELAY3 5 // pin 6
//#define RELAY4 4 // pin 7
#define LEDPIN1 9 //pin 9
#define LEDPINN2 10 // pin 10
#define LEDPIN3 11 //pin 11
#define LEDPINN4 12 //pin 12
#define SWITCH1 2 // pin 2
#define SWITCH2 3 // pin 3
#define TEMP_SENSOR1 A0 // analog pin A0 Sensor1
#define TEMP_SENSOR2 A1 // analog pin A1 Sensor2
#define TEMP_SET1 A2 // analog pin A2 set temp 1
#define TEMP_SET2 A3 // analog pin A3 set temp 2
//
// other settings
//
#define ON LOW // on/off
#define OFF HIGH
#define TIME_TO_PRESS 3000L // time to push button for reset 5000L
#define HOUR 36000L // 3.6 million milliseconds in hour 3600000L
#define QUARTER 900000L // 900000 millsecs in 15 minutes 900000L
#define FIVESECONDS 5000L // 5 seconden period 300000L 100000L
#define DEBOUNCE_TIME 100 // 100 mSec debounce time 100
/**
* @name setup()
* Initializes the IO ports and resets any variables
*/
void setup()
{
//
//Start the serial connection with the computer
//
Serial.begin(9600);
//
// set pins input output. analog pins do not need to be setup
//
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
//pinMode(RELAY3, OUTPUT);
// pinMode(RELAY4, OUTPUT);
pinMode(LEDPIN1, OUTPUT);
pinMode(LEDPINN2, OUTPUT);
pinMode(LEDPIN3, OUTPUT);
pinMode(LEDPINN4, OUTPUT);
pinMode(SWITCH1, INPUT);
pinMode(SWITCH2, INPUT);
//
// pull up resistors
//
digitalWrite(SWITCH1, HIGH);
digitalWrite(SWITCH2, HIGH);
//
// make sure relays are switched off
//
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
//digitalWrite(RELAY3, LOW);
//digitalWrite(RELAY4, LOW);
//
// test led,s
//
digitalWrite(LEDPIN1, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN1, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN2, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN2, LOW); //make sure led works
delay (200);
digitalWrite(LEDPIN3, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN3, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN4, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN4, LOW); //make sure led works
delay (200);
digitalWrite(LEDPIN1, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN1, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN2, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN2, LOW); //make sure led works
delay (200);
digitalWrite(LEDPIN3, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPIN3, LOW); //make sure led works
delay (200);
digitalWrite(LEDPINN4, HIGH); //make sure led works
delay (200);
digitalWrite(LEDPINN4, LOW); //make sure led works
delay (1000);
// other variables
//
timer1Counter = 0L; // timer counters
timer2Counter = 0L;
}
/**
* @name Loop()
* continues to loop through this routine until Arduino is switched off
* This routine just processes each timer in sequence
*/
void loop()
{
//
//getting the voltage reading from the temperature sensor
//
float temperature = getVoltage(TEMP_SENSOR1);
temperature = (temperature - .5) * 100;
//
// read temperature settings from potmeters
//
setTemperature1 = map(analogRead(TEMP_SET1), 0, 1023, 15,35);
setTemperature2 = map(analogRead(TEMP_SET2), 0, 1023, 15,35);
//
// process timers
//
timer1Counter = processTimer(SWITCH1, RELAY1, LEDPIN1, LEDPINN2, timer1Counter);
timer2Counter = processTimer(SWITCH2, RELAY2, LEDPIN3, LEDPINN4, timer2Counter);
//
// process temperature
//
temp1Counter = processTemperature(RELAY1, LEDPIN1, LEDPINN2, TEMP_SENSOR1, setTemperature1, temp1Counter, timer1Counter);
temp2Counter = processTemperature(RELAY2, LEDPIN3, LEDPINN4, TEMP_SENSOR2, setTemperature2, temp2Counter, timer2Counter);
Serial.println(temperature);
}
float getVoltage(int pin){
return (analogRead(pin) * .004882814);
}
/**
* @name long procesTimer(int button, int relay, int setTemp, long counter)
* @param button button to process
* @param relay relay to process
* @param counter timer value to compare to millis
* @return long with new timer value
*
* this routine receives the timer value, button and relay.
* \n It tests if the button is pressed. If so:
* \n a) it just keeps counting time until the button is released.
* \n b) it checks how long the button was pressed:
* \n - if more (or equal to) than TIME_TO_PRESS, rest counter and relay
* \n - if not check if the counter was running:
* \n * if so Add 15 minutes
* \n * if not start the timer at one hour
* \n If button not pressed:
* \n a) if current time is greater(or equal to) timer value:
* \n - Reset the timer
* \n - Switch relay off
*
*/
long processTimer(int button, int relay, int ledpin, int ledpinn, unsigned long counter){
unsigned long returnCounter; // return value
unsigned long localCounter; // counter for pressed time
returnCounter = counter; // if unchanged we have the right value
//
// check if a button is pressed
// if so check if it is a TIME_TO_PRESS press
//
if (deBounce(button) == ON){
//
// button is pressed. No see for how long
//
localCounter = millis();
//
// now wait until button is released so don't forget to let go :)
//
while(1) {
//
// check if button is released
//
if (deBounce(button) == OFF){
//
// yes so quit this loop
//
break;
}
}
//
// the button is released check if we are passed the time limit
// the time is corrected for 2 x the DEBOUNCE_TIME as this time is
// already lost in the deBounce routine.
//
if ((millis() - localCounter) >= (TIME_TO_PRESS - (DEBOUNCE_TIME * 2))) {
//
// yes so switch the relay off
//
returnCounter = 0L;
digitalWrite(relay, LOW);
digitalWrite(ledpinn,LOW);
} else {
//
// The time pressed was less than the TIME_TO_PRESS so check
// if we have to switch the relay on for one hour or add 15 minutes
//
if (returnCounter == 0L) {
//
// No it wasn't so switch the relay on and set the timer
//
returnCounter = millis() + HOUR;
//
} else {
//
// it was already running so just add 15 minutes
//
returnCounter += QUARTER;
}
}
} else {
//
// no button was pressed so just check the timer
//
if (millis() >= returnCounter) {
//
// yes so switch off the relay and the timer
//
returnCounter = 0L;
digitalWrite(relay, LOW);
digitalWrite(ledpinn, HIGH);
digitalWrite(ledpin, LOW);
}
}
return returnCounter;
}
/**
* @name deBounce(int button)
* @param button button pin to read and do debouncing
* @returns state of button
*
* Reads a button and waits DEBOUNCE_TIME mSec and tests again
* Returns read if value unchanged and zero if it has changed for
* DEBOUNCE_TIME time
*/
int deBounce(int button) {
int state; // value of pin
//
// read the button
//
state = digitalRead(button);
delay(DEBOUNCE_TIME); // now wait a little time
//
// now check if it has changed
//
if (digitalRead(button) != state) {
return OFF; // the state has changed so consider it off
// if it went on halfway this routine it will
// have stabilized by the next time we read here
} else {
//
// return the button value
//
return state;
}
}
/**
* @name long processTemperature(int relay , int sensor, int tempSet, long tempCtr, long timerCtr)
* @param relay relay pin
* @param sensor sensor pin
* @param tempSet Set temperature as int value
* @param tempCtr 5 minute counter for temp readings
* @param timerCtr Main timer counter. If not 0 this timer is active
* @return long with new timer value for temperature readings
*
* this routine checks the timer counter. If non zeroe this timer is active.
* next check if the temp ctr has passed 5 minutes. If so check the temperature.
* \n Next check if the temperature is higher than the set temperature. If so
* switch the relay on. If it is below then the relay will be switched off.
*/
long processTemperature(int relay , int ledpin , int ledpinn, int sensor, int tempSet, unsigned long tempCtr, unsigned long timerCtr){
unsigned int tempReading; // temperature from LM35
float convertedTemp; // temperature in degrees
//
// first check if a counter is running and if not if it should be running
//
if (timerCtr != 0L) {
//
// there is a timer running so let's see if we need to read the temperature
//
if (millis() >= tempCtr) {
//
// yes so let's read the sensor
//
tempReading = analogRead(sensor);
//
// and convert it to a temperature
//
convertedTemp = (5.0 * tempReading *100.0)/1024.0;
//
// now check if we are above the set temperature
//
if (convertedTemp > tempSet) {
//
// switch the relay on
//
digitalWrite(relay, HIGH); // relay is aan
digitalWrite(ledpinn, LOW); // rode led is uit
digitalWrite(ledpin, HIGH); // groene led is aan
} else {
//
// switch the relay off
//
digitalWrite(relay, LOW); // relay is uit
digitalWrite(ledpinn, HIGH); // rode led is aan
digitalWrite(ledpin, LOW); // groene led is aan
}
//
// set the temperature for the next sensing period
//
tempCtr = millis() + FIVESECONDS;
}
} else {
//
// no activity so reset the tempCtr timer
//
tempCtr = 0L;
}
//
// and hand the timer back
//
return tempCtr;
}
nu even proberen om de potmeter ernaast te krijgen
groet dirk ambu
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: timer starten met knop ?
Nee
Want ik wil het in de source zien waar het thuis hoort. En ik wil zien welke waarde het huidige algoritme geeft. Nu gebruik je weer een andere algoritme als dat ooit in het begin gebruikte. Elke keer maar iets proberen zonder te begrijpen wat er mis is met de andere, lost niets op. Lijkt #$%^&*&^%$# gitaarnet.nl wel......
Want ik wil het in de source zien waar het thuis hoort. En ik wil zien welke waarde het huidige algoritme geeft. Nu gebruik je weer een andere algoritme als dat ooit in het begin gebruikte. Elke keer maar iets proberen zonder te begrijpen wat er mis is met de andere, lost niets op. Lijkt #$%^&*&^%$# gitaarnet.nl wel......
Re: timer starten met knop ?
ik doe me best maar japans lezen zonder een woorden boek erbij valt niet mee
om het voor mij begrijpelijk te maken heb ik het volgende eerst gemaakt
en dat werkt de waarde die ik te zien krijg kan ik gelijk leggen met elkaar
nu ik dit werkend heb ga ik op basis hiervan het in de ander code proberen te verwerken
om het voor mij begrijpelijk te maken heb ik het volgende eerst gemaakt
en dat werkt de waarde die ik te zien krijg kan ik gelijk leggen met elkaar
- Code: Alles selecteren
*// programma voor het serial uitlezen van een lm35 en een potmeter met een vertaling van 0-1023 naar 15-35
float temperatureSensor1; // temperature sensor 1
float potmetersensor1; // temperature sensor 2
#define TEMP_SENSOR1 A0
#define POTMETER1 A2
void setup()
{
Serial.begin(9600);
Serial.print("dirk ambu test");
Serial.println(TEMP_SENSOR1);
Serial.println(POTMETER1);
Serial.println();
}
void loop() // run over and over again
{
float temperatureSensor1 = getVoltage(TEMP_SENSOR1); //getting the voltage reading from the temperature sensor
temperatureSensor1 = (temperatureSensor1 - .5) * 100; //converting from 10 mv per degree wit 500 mV offset
Serial.println(temperatureSensor1); //printing the result
delay(1000); //waiting a second
float potmetersensor1 = getVoltage(POTMETER1); //getting the voltage reading from the temperature sensor
potmetersensor1 = map(analogRead(POTMETER1), 0, 1023, 15,35);
Serial.println(potmetersensor1); //printing the result
delay(1000); //waiting a second
}
float getVoltage(int pin){
return (analogRead(pin) * .004882814); //converting from a 0 to 1024 digital range
// to 0 to 5 volts (each 1 reading equals ~ 5 millivolts
}
nu ik dit werkend heb ga ik op basis hiervan het in de ander code proberen te verwerken
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 19 gasten