I want to remove the delay ();, and I've tried to do it with long-variables, but I can't figure it out... ![]()
I've attached the code below.
Thanks in advance ![]()
Vejrstation_ekst.ino (4.09 KB)
I want to remove the delay ();, and I've tried to do it with long-variables, but I can't figure it out... ![]()
I've attached the code below.
Thanks in advance ![]()
Vejrstation_ekst.ino (4.09 KB)
Please see Read this before posting a programming question and follow the instructions regarding posting code
I see no long variables in your code nor any use of millis() for timing
See Using millis() for timing. A beginners guide, Several things at the same time and the BlinkWithoutDelay example in the IDE for ideas
if you use code tags, you get this
#include <DHT.h>// fugtighedssensor library
#include <Wire.h>//LCD library
#include <LiquidCrystal_I2C.h> //LCD library
LiquidCrystal_I2C lcd(0x27, 16, 2); //Fortæller, hvordan skærmen ser ud
#define DHTPIN 2 // pin'en, som målebenet sidder på
#define DHTTYPE DHT11 // DHT 11
const int blue = 6; //denne pin bruges til den blå lysdiode
const int green = 7; //denne pin bruges til den grønne lysdiode
const int yellow = 8; //denne pin bruges til den gule lysdiode
const int red = 9; //denne pin bruges til den røde lysdiode
const int hvid = 10; //denne pin bruges til at styre den hvide diode, der viser at systemet virker som det skal
int knap = 13;
DHT dht(DHTPIN, DHTTYPE);//definere først porten sensoren er forbundet til og typen af sensor
void setup() {
Serial.begin(9600); //åbner for den serielle forbindelse ift. målinger
Serial.println("DHT11 test!");//Kan fjernes eller ses i den serielle monitor
dht.begin(); //sensoren starter op, så den er klar til at levere data til skærmen
pinMode(blue, OUTPUT); //ben til led
pinMode(green, OUTPUT); //ben til led
pinMode(yellow, OUTPUT); //ben til led
pinMode(red, OUTPUT); //ben til led
pinMode(hvid, OUTPUT); //ben til led
pinMode(knap, INPUT);// Ben til input fra knappen
lcd.init(); //lcd-skærmen initialiseres
}
void loop() {
void updateSensor() {
delay(2000); // Da sensorens målinger kan være op til 2 sekunder gamle, ventes der 2 sekunder
// Det tager desuden ca. 250 ms at måle med sensoren
float h = dht.readHumidity(); //fugtigheden defineres som "h", med en integer, der ikke er konstant, da der ikke er grund til at gøre det her
float t = dht.readTemperature(); //temperaturen defineres som "t" med en integer, der ikke er konstant
if (t <= 2) {
digitalWrite(blue, HIGH);
} else {
digitalWrite(blue, LOW);
}
if (t >= 19 && t <= 24) { //tænder dioden på pin 7 hvis temperaturen er mellem 19 og 24 grader
digitalWrite(green, HIGH); //den røde led sendes et "HIGH" signal, hvilket betyder at den får 5V
} else
{
digitalWrite(green, LOW);
}
if (t >= 2 && t <= 19) { //tænder dioden på pin 8 hvis temperaturen er mellem 2 og 19 grader
digitalWrite(yellow, HIGH);
} else
{
digitalWrite(yellow, LOW);
}
if (t >= 23) { //tænder dioden på pin 9 hvis temperaturen er over 23
digitalWrite(red, HIGH);
} else
{
digitalWrite(red, LOW);
}
}
void ButtonUpdate() {
if (knap == HIGH) {
lcd.noBacklight();
Serial.println("HEJ");
}
}
void updateScreenState() {// Den første streng kan bruges til at tjekke om temperaturen og fugtigheden måles, hvis ikke er der noget galt med kredsløbet
if (isnan(t) || isnan(h)) {// Hvis der ikke returneres et tal, kan man se at noget er galt
Serial.println("Failed to read from DHT"); //er der fejl kan det ses i serial monitor
} else {
Serial.print(t); //der printes i serial monitor, kan skrives ud, eller bruges til test af h/t - vises der bogstaver er noget galt
lcd.backlight(); //Lcd skærmen startes op så karakterene er lettere at se
//Generelt har jeg sat mellemrum ind de steder, hvor der ellers ville kunne stå bogstaver, for at få displayet til at se 'rent' ud
lcd.setCursor(0, 0); //Cursoren sættes til den første karakterplads på den første linje
lcd.print("Temp.:"); //Der skrives temperatur
lcd.print(t, 1); // // Temperaturen printes med et decimal. Dette defineres ved 1-tallet
lcd.print((char)223); // Der indsættes en speciel karakter for grader tegnet
lcd.print("C"); // Der indsættes en
lcd.setCursor(0, 1); // Cursoren sættes til den første karakterplads på den anden linje
lcd.print("Fugtighed: ");//Der skrives 'Fugtighed'
lcd.print(h, 0); //Værdien for fugtighed skrives på skærmen
lcd.print("% "); //Der vises et procenttegn
}
}
if (h >= 90) { // er fugtigheden over 90% vises der en advarsel
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Advarsel, fugtig");
lcd.setCursor(0, 1);
lcd.print("hed for hoej! ");
delay(2000);
lcd.clear();
}
}
And if you autoformat your code (Ctrl-T in the IDE), you will see that all your functions have been placed inside your loop() function. This is not allowed. Function definitions need to be at the global level.
Show us what you have tried.
There are many many many many many examples on this web site !
Here are examples:
//Blink without Delay skeleton
//4 examples demonstrated
//
//LED wiring options
//=============================================
//Depending which way your LEDs are wired, uncomment the next line.
//#define PlusEqualsON
#ifdef PlusEqualsON
//wired so +5V turns LED ON
#define ledON HIGH
#define ledOFF LOW
//=========================
#else
//wired so +5V turns LED OFF
#define ledON LOW
#define ledOFF HIGH
//=========================
#endif
//switch wiring options
//=============================================
//Depending which way your switches are wired, uncomment the next line.
#define PushEqualsLOW
#ifdef PushEqualsLOW
//pushing the switch makes pin LOW
#define Pushed LOW
#define Released HIGH
//=========================
#else
//pushing the switch makes pin HIGH
#define Pushed HIGH
#define Released LOW
//=========================
#endif
//=============================================
unsigned long currentMillis;
unsigned long pin13Millis;
unsigned long pin12Millis;
unsigned long pin11Millis;
unsigned long SwitchMillis;
//if these are not changed in the sketch, they can be const
unsigned long debounceMillis = 100UL; //100ms
unsigned long ledOnTime = 5*1000UL; //5 seconds
byte laststartSwitchState = HIGH;
byte buttonState = HIGH;
byte counter = 0;
//the following are enable/disable flags
//some of these might not be used in this sketch
boolean flag13 = true;
boolean flag12 = true;
boolean flag11 = true;
boolean flag10 = true;
const byte startSwitch = 2; //pushed = LOW
const byte testSwitch = 3; //pushed = LOW
//**********************************************************************
void setup()
{
Serial.begin(9600);
digitalWrite(13,ledOFF);
pinMode(13, OUTPUT);
digitalWrite(12,ledOFF);
pinMode(12, OUTPUT);
digitalWrite(11,ledOFF);
pinMode(11, OUTPUT);
digitalWrite(10,ledOFF);
pinMode(10, OUTPUT);
pinMode(startSwitch, INPUT_PULLUP); //pushed = LOW
pinMode(testSwitch, INPUT_PULLUP); //pushed = LOW
} // >>>>>>>>>>>>>> E N D O F s e t u p ( ) <<<<<<<<<<<<<<<<<
void loop()
{
//save the current time
currentMillis = millis();
//************************************* E x a m p l e 1
//toggle pin 13 every 200mS
//has 200ms or more gone by?
if (currentMillis - pin13Millis >= 200UL)
{
//code here runs every 200ms
//get ready for next iteration
pin13Millis = pin13Millis + 200UL;
//toggle pin 13
digitalWrite(13,!digitalRead(13));
}
//************************************* E x a m p l e 2
//at power up, pin 12 LED goes ON, after 3 seconds goes OFF and stays OFF
//could be used as a powerup reset signal
if (flag12 == true && currentMillis - pin12Millis <= 3000UL)
{
//code here runs for 3 seconds after power up, then stops
digitalWrite(12,ledON);
}
else
{
digitalWrite(12,ledOFF);
//disable further pin 12 control
flag12 = false;
}
//************************************* E x a m p l e 3
//if testSwitch is pushed and released
//pin 11 LED goes ON for 5 seconds, then goes OFF
buttonState = digitalRead(testSwitch);
//are we are allowed to check the switch and is it pressed?
if(flag11 == true && buttonState == Pushed)
{
//enable timing of LED on pin 11
flag11 = false; //false --> timing is enabled
//turn LED ON
digitalWrite(11,ledON);
//record the time LED turned ON
pin11Millis = currentMillis;
}
//are we allowed and is it time to control pin 11
if (flag11 == false && currentMillis - pin11Millis >= ledOnTime)
{
//if enabled, code here runs after ledOnTime ms goes by
digitalWrite(11,ledOFF);
//allow switch press detection again
flag11 = true; //true --> switch monitoring is enabled
}
//************************************* E x a m p l e 4
//is it time to check the switches?
//in particular, pushing startSwitch will turn ON/OFF (toggle) an output pin 10
//is it time to check the switches
if (currentMillis - SwitchMillis >= debounceMillis)
{
//code here runs every debounceMillis ms
//get ready for the next iteration
SwitchMillis += debounceMillis;
//go and check the switches
checkSwitches();
}
//*********************************
//put other non-blocking stuff here
//*********************************
} // >>>>>>>>>>>>>> E N D O F l o o p ( ) <<<<<<<<<<<<<<<<<
//======================================================================
// F U N C T I O N S
//======================================================================
//****************** c h e c k S w i t c h e s ( ) *********************
//switches are checked every debounceValue milli seconds
//no minimum switch press time is validated with this code (i.e. No glitch filter)
void checkSwitches()
{
//re-usable for all the switches
boolean thisState;
//************************************* E x a m p l e Push ON push OFF (toggle)
//check if this switch has changed state
thisState = digitalRead(startSwitch);
if (thisState != laststartSwitchState)
{
//update the switch state
laststartSwitchState = thisState;
//this switch position has changed so do some stuff
//"HIGH condition code"
//switch went from LOW to HIGH
if(thisState == HIGH)
{
//Do some HIGH switch stuff here
}
//"LOW condition code"
//switch went from HIGH to LOW
else
{
//Do some LOW switch stuff here
digitalWrite(10, !digitalRead(10));
//print number of pushes
counter++;
Serial.println(counter);
}
} //END of startSwitch code
//*****************************************
//similar code for other switches goes here
//*****************************************
} //END of checkSwitches()
//**********************************************************************
//======================================================================
// E N D O F C O D E
//======================================================================
jexzy:
I want to remove the delay ();, and I've tried to do it with long-variables, but I can't figure it out...
I've attached the code below.
Thanks in advance
Are you adding other things to the code?
This is wrong. You do not define functions inside your loop() function.
void loop() {
void updateSensor() {