Hi
I have a problem with my code.
I can't get my stepper motor to rotate ONLY at a fixed temperature. for example, when the temperature is 20 degrees, it must turn one way and at 24 degrees it must turn the other way.
It works in the code now, but it rotates constantly. It should ONLY run once until further temperature is reached. Anyone have a good idea for solving this problem?
My code:
#include <DHT.h> // sensor Bibliotek
#include <DHT_U.h>
#include <LiquidCrystal.h> // LCD Bibliotek
#include <Stepper.h>
#define STEPS 2038 // Stepper Motor, 2038 steps muligt hver vej
#define DHTPIN 6 // DHT 22 (AM2302) - bruger pin 6
#define DHTTYPE DHT22 // Definerer typen
LiquidCrystal lcd(13, 12, 8, 7, 4, 2); // Definere brug af Ben på Mikrocontroler OBS: Brug ikke PWM Out, da de skal bruges!
int relay_Pin = 3; // Set up af relæ "Pin" Varme enhed.
int SetTemp = 23; // Set punkt af temp
int TempMin = 20; // Temp der slukker blæseren
int TempMax = 25; // Temp der starter blæseren
DHT dht(DHTPIN, DHTTYPE);
//Variabler
boolean a=LOW,b=HIGH; // En boolsk variabel eller boolean er en variabel som kun kan antage to værdier.
float h; // Læring af fugtigheds værdi
float t; // Læring af temperatur værdi
int Pin = 3;
float hum; // Læring af fugtigheds værdi
float temp; // Læring af temperatur værdi
const byte fan = 6; // Definerer konstant
unsigned long timer = millis(); // Timer i milli sec (Denne funktion returnerer antallet af millisekunder, som den aktuelle skitse har kørt siden sidste nulstilling.)
Stepper stepper(STEPS, 5, 10, 9, 11); // a-5, b-11, c-10, d-9,
void setup() {
pinMode(fan, OUTPUT); // Setup køre logning af temperatur og fugtighed
pinMode (relay_Pin, OUTPUT);
Serial.begin(9600); // "baud rate" Serial Monitor med en datahastighed på 9600 bit pr. Sekund. via USB
dht.begin();
Serial.print(" Luftfugtighed "); // Printer resultat til Monitor
Serial.print(" %\t"); // Luftfugtighed udlæses i %
Serial.print(" Temperatur "); // Printer Resultat til Monitor
Serial.print(" %\t"); //
Serial.println(" Celcius"); // Temperatur udlæses i Celcius
{
lcd.begin(16, 2); // Print opstart besked til LCD
lcd.setCursor (3,0); // Sætter cursor på øverste linje
lcd.print("GN-Resound");
lcd.setCursor(1,0);
lcd.setCursor (0,1); // Sætter curser på nederste linje
lcd.print(" By K.N.Friis"); // Mellemrummet er for placering på LCD, kan ændres ved "setCursor"
lcd.setCursor(0,1);
delay(5000); // Pause i x antal milli sec
lcd.clear(); // Clear LCD, ellers overskriver "GN-Resound" øverste linje
}
}
void loop() {
if (millis() - timer > 3000) { // Opdaterin af udskrift/logning hver 3 sec
hum = dht.readHumidity(); // Læs Fugtighed
temp = dht.readTemperature(); // Læs Temperatur
Serial.print("Luftfugtighed "); // Printer fugtighed til monitor / LCD
Serial.print(hum);
lcd.setCursor(0,0); // Sætter cursor på øverste linje
lcd.print("Fugt: "); // Printer fugt % til LCD
lcd.print(hum);
lcd.print(" %");
Serial.print(" Temperatur "); // Printer temperatur til monitor / LCD
Serial.print(temp);
Serial.println(" Celcius");
lcd.setCursor(0,1); // Sætter curser på nederste linje
lcd.print("Temp: "); // Sætter curser på nederste linje, mellemrummet udgør placering på skærm
lcd.print(temp);
lcd.println(" C"); // Printer til LCD, ( C ) for celsius
timer = millis(); // Timer er sat i milli sec
}
if (t >= 23 ){ // Hvis temperaturen overstiger 25 gr. så drejer motor/hjulet i åben position
stepper.setSpeed(6); // Sætter hastighed
stepper.step(500); // Step til højre, slusen er åben
delay(5000);
}
if (t <= 20 ){ // Hvis temperaturen er under 20 gr. Så drejer motor/hjulet i lukke position.
stepper.setSpeed(6); // Sætter hastighed
stepper.step(-500); // Step til venstre; slusen er lukket
delay(5000); // Pause
}
if (t> 20 ){ // Hvis temp er under x-tal skal relæ gå ON
digitalWrite(relay_Pin, LOW);
a=HIGH; // Er defineret under boolean
b=LOW;
}
if (t<= 24 ){ // Hvis temp er over x-tal skal relæ gå OFF
digitalWrite(relay_Pin, HIGH);
a=LOW; // Er defineret under boolean
b=HIGH;
}
}