DIY Arduino temperaturgivare (7 / 7 steg)
Steg 7: Koden...
/*
Termometer baserat på Maxims DS600u + chip + RTC
*/
#include "U8glib.h"
#include < math.h >
#include < Wire.h >
#include < DS1307.h >
int rtc [7].
flyta leverans = 4,91; Här måste vara in uppmätta matningsspänningen av arduino styrelsen
Läs sensor utspänningen
char timmar [2].
char minuter [2].
char sekunder [2].
char dagar [2].
char månader [2].
röding år [4].
U8GLIB_ST7920_128X64_4X u8g (8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); 8 bitars Com: D0... D7: 8,9,10,11,4,5,6,7 sv = 18, di = 17, rw = 16
void u8g_prepare(void) {
U8G.setFont(u8g_font_6x10);
U8G.setFontRefHeightExtendedText();
U8G.setDefaultForegroundColor();
U8G.setFontPosTop();
}
void setup(void) {
Serial.BEGIN(9600);
Flip skärmen, om det behövs
U8G.setRot180();
tilldela färg standardvärde
om (u8g.getMode() == U8G_MODE_R3G3B2)
U8G.setColorIndex(255); vit
annat if (u8g.getMode() == U8G_MODE_GRAY2BIT)
U8G.setColorIndex(3); Max intensitet
annat if (u8g.getMode() == U8G_MODE_BW)
U8G.setColorIndex(1); pixel på
U8G.setContrast(0x30);
pinMode (13, OUTPUT);
digitalWrite 13, hög.
u8g_prepare();
}
void draw(void) {
U8G.drawFrame(0,0,127,63);
U8G.drawFrame(13,7,103,21);
U8G.drawBox(15,9,99,17);
RTC.get(rtc,true);
U8G.setColorIndex(0);
dtostrf(RTC[2],2,0,hours);
om (rtc [2] < 10)
{
U8G.drawStr(26,14,"0");
}
U8G.drawStr(26,14,hours);
dtostrf(RTC[1],2,0,minutes);
U8G.drawStr(45,14,":");
om (rtc [1] < 10)
{
U8G.drawStr(58,14,"0");
}
U8G.drawStr(58,14,minutes);
dtostrf(RTC[0],2,0,Seconds);
U8G.drawStr(78,14,":");
om (rtc [0] < 10)
{
U8G.drawStr(91,14,"0");
}
U8G.drawStr(91,14,Seconds);
U8G.setColorIndex(1);
Switch (rtc [3])
{
fall 1: u8g.drawStr (4,33,"söndag"); bryta;
fall 2: u8g.drawStr (4,33,"måndag"); bryta;
fall 3: u8g.drawStr (4,33,"tisdag"); bryta;
fall 4: u8g.drawStr(4,33,"Wednesday"); bryta;
fall 5: u8g.drawStr (4,33, "Torsdag"); bryta;
mål 6: u8g.drawStr (4,33,"fredag"); bryta;
fall 7: u8g.drawStr (4,33, "Lördag"); bryta;
}
dtostrf(RTC[4],2,0,Days);
om (rtc [4] < 10)
{
U8G.drawStr(64,33,"0");
}
U8G.drawStr(64,33,Days);
U8G.drawStr(75,33,".");
dtostrf(RTC[5],2,0,months);
om (rtc [5] < 10)
{
U8G.drawStr(80,33,"0");
}
U8G.drawStr(80,33,months);
U8G.drawStr(90,33,".");
dtostrf(RTC[6],4,0,years);
U8G.drawStr(96,33,years);
int läsa = analogRead(0);
flyta v_out = (läst * leverera) / 1.024;
Visa på LCD-temperaturen
flyta temperatur = (v_out - 509) / 6,45;
char temp [5].
dtostrf(temperature,5,1,temp);
U8G.drawStr(4,48,"temperature:");
U8G.drawStr(76,48,temp);
U8G.drawStr(108,48,"\260C");
}
void loop(void) {
bild loop
U8G.firstPage();
göra {
draw();
} medan (u8g.nextPage());
återskapa bilden efter viss fördröjning
Delay(1000);
}
Som du ser kräver här koden biblioteket DS1307. Jag har bifogat detta bibliotek för att hjälpa dig med de förvirring som orsakas av de olika DS1307 bibliotek tillgängliga.
Detta verkar vara i slutet av projektet:-).