Stap 5: Code
En hier is mijn code van de steekproef, die leest de 3 thermistors, de datum en tijd van de RTC-module en weergegeven op het LCD-scherm. Er zijn een paar functies onderaan waarmee alles weergeven van de manier waarop ik wilde (opvulling van de tijd tot 2 cijfers en omzetten van het uur van middernacht tot en met 12 van 0). Er is een video op de volgende pagina waarin wordt weergegeven hoe alles op het scherm worden weergegeven.
#include < LiquidCrystal.h >
#include < Wire.h >
#include "RTClib.h"
#include < math.h >
RTC_DS1307 de rtc;
initialiseren van de bibliotheek met de nummers van de pennen van de interface
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
Sommige aangepaste tekens maken:
byte fan1 [8] = {B00000, B01100, B01011, B10101, B11010, B00110, B00000, B00000};
byte fan2 [8] = {B00000, B00110, B11010, B10101, B01011, B01100, B00000, B00000};
byte fan3 [8] = {B00000, B11011, B11011, B00100, B11011, B11011, B00000, B00000};
int pictogram = 1;
int delayTime = 100;
VOID Setup {}
Serial.begin(57600);
maken van een nieuw karakter
lcd.createChar (1, fan1);
lcd.createChar (2, fan2);
lcd.createChar (3, fan3);
de LCD's aantal kolommen en rijen instellen:
LCD.begin(20,4);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); Schild I2C pinnen verbinden met alt I2C bus op Arduino Due
#endif
RTC.begin();
Als (! rtc.isrunning()) {}
Serial.println ("RTC is NOT running!");
de RTC gevolgd ingesteld op de datum en tijd die deze schets werd samengesteld
RTC.adjust (DateTime (__DATE__, __TIME__));
}
}
void loop {}
De datum opmaken...
DateTime nu = rtc.now();
Lees de temperaturen...
lcd.setCursor (0, 0);
LCD.Print("temp.");
lcd.setCursor (0, 1);
LCD.Print("1:");
LCD.Print(int(Thermister(analogRead(0)));
LCD.Print((char)223);
LCD.Print('F');
lcd.setCursor (0, 2);
LCD.Print("2:");
LCD.Print(int(Thermister(analogRead(1)));
LCD.Print((char)223);
LCD.Print('F');
lcd.setCursor (0, 3);
LCD.Print("3:");
LCD.Print(int(Thermister(analogRead(2)));
LCD.Print((char)223);
LCD.Print('F');
lcd.setCursor (8, 0);
LCD.Print(Now.month(), DEC);
LCD.Print('/');
LCD.Print(Now.Day(), DEC);
LCD.Print('/');
LCD.Print(Now.Year(), DEC);
Uur
lcd.setCursor (8, 1);
LCD.Print(pad(ClockHours(Now.Hour()));
Minuten
lcd.setCursor (10, 1);
LCD.Print(':');
lcd.setCursor (11, 1);
LCD.Print(pad(Now.Minute()));
Seconden
lcd.setCursor (13, 1);
LCD.Print(':');
lcd.setCursor (14, 1);
LCD.Print(pad(Now.Second()));
FanSpinFn();
delay(delayTime);
}
dubbele Thermister (int RawADC) {}
dubbele Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp)) * Temp);
Temp = Temp - 273.15; Converteren van Kelvin naar Celsius
Temp = (Temp * 9.0) / 5.0 + 32,0; Celsius converteren naar Fahrenheit
retourneren Temp;
}
VOID FanSpinFn() {}
lcd.setCursor (19, 3);
LCD.write(icon);
Als (pictogram < 3) {pictogram ++;}
else {pictogram = 1;}
}
String Pad (int Time_Segment) {}
Als (Time_Segment < 10) {return "0" + String (Time_Segment, DEC);}
else {retourneert de tekenreeks (Time_Segment, DEC);}
}
int ClockHours (int uur) {}
Als (uur < 1) {terugkeer 12;}
else {return uur;}
}