Pada halaman web arduinoecia disajikan jam Arduino dengan tampilan grafis LCD 128x64, potensiometer untuk mengatur kontras tampilan, modul DS3231 RTC dan tombol tekan. Modul RTC terhubung ke Arduino pada pin A4 (SDA) dan A5 (SCL). Tombol terhubung ke pin 3 digital, dengan resistor pull-up internal Arduino diaktifkan melalui perangkat lunak. Program ini menggunakan beberapa perpustakaan yang harus Anda instal sebelum kompilasi. Buka zip perpustakaan dan letakkan di dalam folder PERPUSTAKAAN pada Arduino IDE.
Program memiliki dua layar:yang pertama ( screen_1 ), menampilkan jam analog, jam digital, serta tanggal dan suhu saat ini.
Layar kedua ( screen_2 ) menunjukkan jam digital, hari dalam seminggu, tanggal dan informasi suhu saat ini, suhu minimum dan suhu maksimum. Layar dipilih dengan menekan tombol tekan, terhubung ke pin digital 3.
Untuk mengatur tanggal dan waktu modul RTC DS3231, gunakan monitor serial dan masukkan informasi dalam format tahun, bulan, hari, jam, menit, detik.
Jika Anda mengetik informasi dengan benar, pesan " " akan ditampilkan.
Kode
kodeArduino
//Programa:Display LCD 128x64 e RTC DS3231//Autor:Arduino e Cia#include #include #include #include #include //A linha abaixo didefinisikan sebagai kerucut yang ditampilkan dan dikembangkan //ajustada kesesuaian model utilizadoU8GLIB_ST7920_128X64_1X u8g(6, 5, 4 , 7); //Aktifkan, RW, RS, RESETint X2 =0;int Y2 =0;int X3 =0;int Y3 =0;float angulo =0;int posicao =0;int posicaoh =0;int temperatur =0;int min_temp =500;int max_temp =-500;int ScreenWith =128;int ScreenWithC =96;int ScreenHeight =64;int ScreenHeightC =32;#define botao 3int estado_botao =0;char* dia_da_semana[]={ "Sun", "Sen ", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};void tela_1() { u8g.drawRFrame(0, 0, 128, 64, 3); //Suhu paling banyak u8g.setPrintPos(20, 30); u8g.print(suhu); u8g.drawStr( 42, 30, "C"); u8g.drawCircle(37, 34, 2); mostra_relogio_digital(); //Mostra relogio analogico fundo_relogio(); //Atualiza Ponteiro de horas desenha_ponteiro(jam()-1, 12.0, 10); //Atualiza Ponteiro de minutos desenha_ponteiro(menit()-5, 60.0, 19); //Atualiza Ponteiro de segundos desenha_ponteiro(kedua()-5, 60, 21);}kosongkan tela_2(){ u8g.drawRFrame(0, 0, 128, 64, 3); u8g.drawRFrame(68, 4, 55, 56, 2); mostra_relogio_digital(); u8g.setFont(u8g_font_5x8); u8g.drawStr( 78, 35, "MIN"); u8g.drawStr( 78, 53, "MAX"); u8g.setFont(u8g_font_6x13); u8g.setPrintPos(25, 41); u8g.print(dia_da_semana[(hari kerja()-1)]); //Suhu paling tinggi sebenarnya u8g.setPrintPos(83, 19); u8g.print(suhu); u8g.drawStr( 105, 19, "C"); u8g.drawCircle(100, 12, 2); //Suhu paling minima u8g.setPrintPos(98, 36); u8g.print(min_temp); u8g.drawCircle(113, 29, 2); //Mostra temperaturea maxima u8g.setPrintPos(98, 54); u8g.print(max_temp); u8g.drawCircle(113, 47, 2);}void desenha_ponteiro(float valor, float rotacao, int Radius) { angulo =valor * 2.0 * 3.1415 / rotacao - 1.5707; X2 =LayarDenganC + Radius * cos(angulo); Y2 =Tinggi LayarC + Radius * sin(angulo); u8g.drawLine(ScreenWithC, ScreenHeightC, X2, Y2);}void fundo_relogio() { u8g.drawCircle(ScreenWithC, ScreenHeightC, 27); u8g.drawCircle(ScreenWithC, ScreenHeightC, 1); u8g.setFont(u8g_font_6x13); u8g.setFontPosTop(); u8g.drawStr(90, 9, "12"); u8g.drawStr(114, 25, "3"); u8g.drawStr(94, 44, "6"); u8g.drawStr(74, 25, "9"); for(int traco_minuto =0; traco_minuto<12; traco_minuto++) { //Desenha linhas relogio analogico angulo =traco_minuto / 12.0 * 2 * 3.1415; X2 =LayarDenganC + 25 * cos(angulo); Y2 =Tinggi LayarC + 25 * sin(angulo); X3 =LayarDenganC + 25 * cos(angulo); Y3 =Tinggi LayarC + 25 * sin(angulo); u8g.drawLine(X2, Y2, X3, Y3); }}void mostra_relogio_digital(){ //Mostra a data u8g.setFont(u8g_font_5x8); u8g.setPrintPos(8, 55); u8g.print(hari()); u8g.drawStr( 19, 55, "/"); u8g.setPrintPos(24, 55); u8g.print(bulan()); u8g.drawStr( 35, 55, "/"); u8g.setPrintPos(41, 55); u8g.print(tahun()); //Mostra hora e minutos u8g.drawRBox(3, 4, 62, 21,2); u8g.setColorIndex(0); u8g.setFont(u8g_font_fub17); u8g.drawStr(29,21,":"); //Acerta a posicao do digito caso a hora //seja menor do que 10 if (hour() <10) { u8g.drawStr(3,23,"0"); posicaoh =16; } lain posicaoh =3; u8g.setPrintPos(posicaoh, 23); u8g.print(jam()); //Acerta a posicao do digito caso o minuto //seja menor do que 10 if (minute() <10) { u8g.drawStr(38,23,"0"); posicao =51; } lain posicao =38; u8g.setPrintPos(posicao ,23); u8g.print(menit()); u8g.setColorIndex(1);}pengaturan batal() { pinMode(3, INPUT_PULLUP); Serial.begin(9600); if ( u8g.getMode() ==U8G_MODE_R3G3B2 ) u8g.setColorIndex(255); // putih lain if ( u8g.getMode() ==U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3); // intensitas maksimal else if ( u8g.getMode() ==U8G_MODE_BW ) u8g.setColorIndex(1); // piksel pada setSyncProvider(RTC.get); Serial <=max_temp) { max_temp =suhu; } if (suhu <=min_temp) { min_temp =suhu; } static time_t tLast; waktu_tt; tmElements_t tm; //Verifikasi se foi setado um novo horario //Format:ano, mes, dia, hora, minuto, segundo if (Serial.available()>=12) { int y =Serial.parseInt(); if (y>=100 &&y <1000) Serial<=1000) tm.Tahun =KalenderYrToTm(y); else //(y <100) tm.Tahun =y2kTahunToTm(y); tm.Bulan =Serial.parseInt(); tm.Hari =Serial.parseInt(); tm.Jam =Serial.parseInt(); tm.Minute =Serial.parseInt(); tm.Second =Serial.parseInt(); t =waktu make(tm); RTC.set(t); setWaktu(t); Serial < 0) Serial.read(); } } t =sekarang(); if (t !=tTerakhir) { tTerakhir =t; printDateTime(t); Seri< 0) Serial < perpustakaanArduino
Tidak ada pratinjau (hanya unduhan).
Skema