ThermoClock: En OpenSource Arduino UNO OLED klocka som mäter även temperatur (4 / 5 steg)
Steg 4: Kod & bibliotek
I det här steget kommer jag visa dig viktigaste kod som du kan kopiera eller ladda ner den som full .ino-fil som du kan öppna med Arduino IDE. Filen heter ThermoClock_v2.6.16. det är i BETA-test så jag vill ha dina förslag på hur och vad ska jag ändra för att göra det bättre.
Nu ta en titt på den.
< br >< p > / *** bibliotek *** / < br > #include < U8glib.h > / / OLED
#include < Wire.h > / / I2C
#include < Time.h > / / tid Manipulation
#include < DS1307RTC.h > / / DS1307 RTC
/*************VARIABLES**********************/
char timebuf [10]. Tid
char datebuf [10]. Datum
int year2digit; 2 siffrigt år
int year4digit; 4-siffriga år
int tmp102Address = 0x48; < /p >< p > const int SwitchTime = 10000; byta tid på millis
/********************************************/
U8GLIB_SH1106_128X64 u8g (13, 11, 10, 9, 8); CLK = 13, DIN = 11, CS = 10, DC = 9, återställa = 8
//
//
//
/ *** DRA FUNKTION *** /
void draw(void) {< /p >< p > u8g.setFont(u8g_font_fub17r); / / Välj teckensnitt
U8G.setPrintPos (30, 28); Ange position
U8G.Print(timebuf); Visa tid
U8G.drawHLine(0,33,128); Rita linje
U8G.setPrintPos (12, 55); Ange position
U8G.Print(datebuf); Visa datum
} < /p >< p > void draw1(void)
{
flyta celsius = getTemperature();
flyta fahrenheit = (1,8 * celsius) + 32;
U8G.setFont(u8g_font_fub17r);
U8G.setPrintPos (15, 28);
U8G.Print(Celsius);
U8G.Print ("C").
U8G.setPrintPos (12, 55);
U8G.Print(Fahrenheit);
U8G.println "F".
} < /p >< p > float getTemperature() {
Wire.requestFrom(tmp102Address,2); < /p >< p > byte MSB = Wire.read();
byte LSB = Wire.read(); < /p >< p > //it's en 12 bit int, med två komplimang för negativa
int TemperatureSum = ((MSB << 8) | LSB) >> 4. < /p >< p > flyta celsius = TemperatureSum * 0,0625;
om (celsius > 180)
{
Celsius = (celsius - 256); För negativa temperaturer
}
annat
{
Celsius;
}
returnera celsius;
} < /p >< p > void setup(void) {
}
void loop(void) {< /p >< p > tmElements_t tm;
om (RTC.read(tm))
{
year2digit = tm. År - 30; 2 siffrigt år variabel
year4digit = tm. År + 1970; 4-siffriga år variabel < /p >< p > sprintf (timebuf, "% 02d: % 02d", tm. Timme, tm. Minut, tm. Andra). formatet tid
sprintf (datebuf, "% 02d/%02d/%02d",tm. Dag, tm. Månad, year2digit); formatet datum
/ *** / < /p >< p > u8g.firstPage(); Lägga in information på OLED
göra {
draw();
} medan (u8g.nextPage());
Delay(SwitchTime); < /p >< p > u8g.firstPage(); Lägga in information på OLED
göra {
draw1();
} medan (u8g.nextPage());
}
Delay(SwitchTime); Dröjsmål
} < /p >
Om du inte gillar det aktuella teckensnittet kan du ändra det genom att redigera koden. Du kan hitta alla stöds typsnitt här.
Biblioteken behöver du:
DS1307RTC, u8glib och tid, Hämta biblioteken och sedan packa upp dem på /Program Files(x86)/Arduino/arkiv (standard).