0% found this document useful (0 votes)
2 views

code

The document contains C code for an Arduino-based system that interfaces with a DHT22 temperature and humidity sensor and a DS1307 real-time clock. It includes functions for reading sensor data, displaying it on an LCD, and setting time and alarm features through button inputs. The code manages the display of current time, date, and allows users to adjust settings for time and alarms.

Uploaded by

Nhon Nguyen
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

code

The document contains C code for an Arduino-based system that interfaces with a DHT22 temperature and humidity sensor and a DS1307 real-time clock. It includes functions for reading sensor data, displaying it on an LCD, and setting time and alarm features through button inputs. The code manages the display of current time, date, and allows users to adjust settings for time and alarms.

Uploaded by

Nhon Nguyen
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 12

#include <mega2560.

h>
#include <i2c.h>
#include <ds1307.h>
#include <stdio.h>
#include <alcd.h>
#include <delay.h>
#define pin_data PORTD.7

unsigned char data_bit[41];


unsigned char a, b, m, n, p, x, y, z;
unsigned int humi, temp;
unsigned int time;
unsigned char hour, min, sec, mode=0, hoAl,miAl;
unsigned char dow, day, month,year;

void dht22_calcular(){
m = (humi / 100) + 48;
n = (humi % 100)/10 + 48;
p = (humi % 10) + 48;

x = (temp / 100) + 48;


y = (temp % 100)/10 + 48;
z = (temp % 10) + 48;
}

//-----------------------------------------------------------------------

void test_bit0(){
time = 0;
while(PIND.7 == 0){
time++;
}
a = time;
}

void test_bit1(){
time = 0;
while(PIND.7 == 1){
time++;
}
b = time;
}

//-----------------------------------------------------------------------

void dht22_data(){
unsigned char i;
while(PIND.7 == 1){};

for(i = 0; i <= 40; i++){


test_bit0();
test_bit1();
data_bit[i] = (a < b);
}

for(i = 1; i < 17; i++){


humi = (humi << 1)|data_bit[i];
}
for(i = 17; i < 33; i++){
temp = (temp << 1)|data_bit[i];
}
}

//-----------------------------------------------------------------------

void dht22_start(){
DDRD.7 = 1;
pin_data = 0;
delay_ms(10);
pin_data = 1;
DDRD.7 = 0;
}

//-----------------------------------------------------------------------

void sensor_dht22(){
dht22_start();
dht22_data();
dht22_calcular();
}
void display_sensor(void){
lcd_gotoxy(0,0);
lcd_puts("humi : ");
lcd_gotoxy(0,1);
lcd_puts("temp : ");
sensor_dht22();
lcd_gotoxy(8,0);
lcd_putchar(m);

delay_ms(10);
lcd_putchar(n);

delay_ms(10);
lcd_putchar('.');
delay_ms(10);
lcd_putchar(p);

delay_ms(10);
lcd_puts(" %");

lcd_gotoxy(8,1);
lcd_putchar(x);
delay_ms(10);
lcd_putchar(y);
delay_ms(10);
lcd_putchar('.');
delay_ms(10);
lcd_putchar(z);
delay_ms(10);
lcd_puts(" 'C");
delay_ms(2000);
}

}
//unsigned char HOUR_ARL[15];
//unsigned char MIN_ARL[15];

//if(HOUR_ARL[0] == HOUR && MIN_ARL[0] == MIN && SEC_ARL[0] == SEC);


//{
// BUZZ_ON
//}
void kiemtra_mode(void){
if(PINB.2 == 0){
int a=0;
while(PINB.2 == 0){
a++;
delay_ms(100);
if(a>20) mode = 7;
}
if(a<20) mode++;
delay_ms(300);
}
}

void kiemtra_up(void){
if(PINB.1==0){
int a = 0;
while(PINB.1 == 0){
a++;
delay_ms(100);

if(a>20)
{
if(mode == 1){
lcd_gotoxy(0,1);lcd_puts(" Set time ");
hour++; delay_ms(200); if(hour>23) hour = 0;
}

if( mode == 2){


lcd_gotoxy(0,1);lcd_puts(" Set time ");
min++; delay_ms(200); if(min>59) min=0;
}

if(mode == 3){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
dow++;
delay_ms(200);
if(dow > 7) dow = 1;
}

if(mode == 4){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
day++;
delay_ms(200);
if(day > 31) day = 1;
}

if(mode == 5){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
month++;
delay_ms(200);
if(month>12) month = 1;
}

if(mode == 6){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
year++;
delay_ms(200);
if(year>99) year = 00;
}

if(mode == 7){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
hoAl++;
delay_ms(200);
if(hoAl>23) hoAl = 0;
}

if(mode == 8){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
miAl++;
delay_ms(200);
if(miAl>59) miAl=0;
}
rtc_set_time(hour, min,sec);
rtc_set_date(dow,day,month,year);
}
}

if(a<20)
{
if(mode == 1){
lcd_gotoxy(0,1);lcd_puts(" Set time ");
hour++; delay_ms(200); if(hour>23) hour = 0;
}

if( mode == 2){


lcd_gotoxy(0,1);lcd_puts(" Set time ");
min++; delay_ms(200); if(min>59) min=0;
}

if(mode == 3){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
dow++;
delay_ms(200);
if(dow > 7) dow = 1;
}

if(mode == 4){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
day++;
delay_ms(200);
if(day > 31) day = 1;
}
if(mode == 5){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
month++;
delay_ms(200);
if(month>12) month = 1;
}

if(mode == 6){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
year++;
delay_ms(200);
if(year>99) year = 00;
}

if(mode == 7){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
hoAl++;
delay_ms(200);
if(hoAl>23) hoAl = 0;
}

if(mode == 8){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
miAl++;
delay_ms(200);
if(miAl>59) miAl=0;
}
rtc_set_time(hour, min,sec);
rtc_set_date(dow,day,month,year);
}

}
}

void kiemtra_down(void){
if(PINB.0==0){
int a = 0;
while(PINB.0 == 0){
a++;
delay_ms(100);

if(a>20)
{
if(mode == 1){
lcd_gotoxy(0,1);lcd_puts(" Set time ");
hour--; delay_ms(200);
if(hour < 0) hour = 23;
}

if( mode == 2){


lcd_gotoxy(0,1);lcd_puts(" Set time ");
min--; delay_ms(200);
if(min < 0) min = 59;
}
if(mode == 3){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
dow--;
delay_ms(200);
if(dow < 1) dow = 7;
}

if(mode == 4){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
day--;
delay_ms(200);
if(day < 1) day = 31;
}

if(mode == 5){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
month--;
delay_ms(200);
if(month < 1) month = 12;
}

if(mode == 6){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
year--;
delay_ms(200);
if(year < 00) year = 99;
}

if(mode == 7){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
hoAl--;
delay_ms(200);
if(hoAl < 0) hoAl = 23;
}

if(mode == 8){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
miAl--;
delay_ms(200);
if(miAl < 0) miAl = 59;
}
rtc_set_time(hour, min,sec);
rtc_set_date(dow,day,month,year);
}
}

if(a<20)
{
if(mode == 1){
lcd_gotoxy(0,1);lcd_puts(" Set time ");
hour--; delay_ms(200);
if(hour < 0) hour = 23;
}

if( mode == 2){


lcd_gotoxy(0,1);lcd_puts(" Set time ");
min--; delay_ms(200);
if(min < 0) min = 59;
}

if(mode == 3){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
dow--;
delay_ms(200);
if(dow < 1) dow = 7;
}

if(mode == 4){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
day--;
delay_ms(200);
if(day < 1) day = 31;
}

if(mode == 5){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
month--;
delay_ms(200);
if(month < 1) month = 12;
}

if(mode == 6){
lcd_gotoxy(0,0);
lcd_puts(" Set date ");
year--;
delay_ms(200);
if(year < 00) year = 99;
}

if(mode == 7){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
hoAl--;
delay_ms(200);
if(hoAl < 0) hoAl = 23;
}

if(mode == 8){
lcd_gotoxy(0,0);
lcd_puts(" Set Alarm ");
miAl--;
delay_ms(200);
if(miAl < 0) miAl = 59;
}
rtc_set_time(hour, min,sec);
rtc_set_date(dow,day,month,year);
}
}

//void settime(void){
// switch (mode){
// case 1:
// lcd_gotoxy(0,1);
// lcd_puts(" Set time ");
// if(PINB.1 == 0){
// hour++;
// delay_ms(500);
// if(hour>23) {
// hour = 0;}
// }
//
// if(PINB.0 == 0) {
// hour--;
// delay_ms(500);
// if( hour < 0 ){
// hour = 23;}
// }
// rtc_set_time(hour, min,sec);
// break;
// case 2:
// lcd_gotoxy(0,1);
// lcd_puts(" Set time ");
// if(PINB.1 == 0){
// min++;
// delay_ms(500);
// if(min>59){
// min=0;}
// }
//
// if(PINB.0 == 0) {
// min--;
// delay_ms(500);
// if(min<0){
// min = 59;}
// }
// rtc_set_time(hour, min,sec);
// break;
//
// }
// }
//void setdate(void){
// switch (mode){
// case 3:
// lcd_gotoxy(0,0);
// lcd_puts(" Set date ");
// if(PINB.1 == 0){
// dow++;
// delay_ms(500);
// if(dow>7) {
// dow=0; }
// }
//
// if(PINB.0 == 0){
// dow--;
// delay_ms(500);
// if(dow < 0) {
// dow = 7;}
// }
// rtc_set_date(dow,day,month,year);
// break;
//
// case 4:
// lcd_gotoxy(0,0);
// lcd_puts(" Set date ");
// if(PINB.1 == 0){
// day++;
// delay_ms(500);
// if(day>31){
// day=1;}
// }
//
// if(PINB.0 == 0){
// day--;
// delay_ms(500);
// if(day<1){
// day=31;}
// }
// rtc_set_date(dow,day,month,year);
// break;
//
// case 5:
// lcd_gotoxy(0,0);
// lcd_puts(" Set date ");
// if(PINB.1 == 0){
// month++;
// delay_ms(500);
// if(month>12){
// month=1;}
// }
//
// if(PINB.0 == 0){
// month--;
// delay_ms(500);
// if(month<1){
// month=12;}
// }
// rtc_set_date(dow,day,month,year);
// break;
//
// case 6:
// lcd_gotoxy(0,0);
// lcd_puts(" Set date ");
// if(PINB.1 == 0){
// year++;
// delay_ms(500);
// if(year>99){
// year=1;}
// }
//
// if(PINB.0 == 0){
// year--;
// delay_ms(500);
// if(year<1){
// year=99;}
// }
// rtc_set_date(dow,day,month,year);
// break;
// }
// }

void display_time(unsigned char a){


while(a--){
switch(mode){
case 0:
lcd_gotoxy(0,0);
lcd_puts("RTC");
lcd_gotoxy(7,0);
lcd_putchar(hour/10+48);
lcd_putchar(hour%10+48);
lcd_gotoxy(9,0);
lcd_puts(":");
lcd_gotoxy(10,0);
lcd_putchar(min/10+48);
lcd_putchar(min%10+48);
lcd_gotoxy(12,0);
lcd_puts(":");
lcd_gotoxy(13,0);
lcd_putchar(sec/10+48);
lcd_putchar(sec%10+48);
break;
case 1:
lcd_gotoxy(7,0);
lcd_puts(" ");
delay_ms(200);
lcd_gotoxy(7,0);
lcd_putchar(hour/10+48);
lcd_putchar(hour%10+48);
break;
case 2:
lcd_gotoxy(10,0);
lcd_puts(" ");
delay_ms(20);
lcd_gotoxy(9,0);
break;
}
}
}
void display_date(unsigned char a){
while(a--){
switch(dow){
case 7: lcd_gotoxy(0,1);
lcd_puts("Sun");
break;
case 1: lcd_gotoxy(0,1);
lcd_puts("MON");
break;
case 2: lcd_gotoxy(0,1);
lcd_puts("Tue");
break;
case 3: lcd_gotoxy(0,1);
lcd_puts("Wed");
break;
case 4: lcd_gotoxy(0,1);
lcd_puts("Thu");
break;
case 5: lcd_gotoxy(0,1);
lcd_puts("Fri");
break;
case 6: lcd_gotoxy(0,1);
lcd_puts("Sat");
break;}

switch(mode){
case 3:

break;
case 4:
lcd_gotoxy(4,1);
lcd_puts(" ");
delay_ms(20);
lcd_gotoxy(4,1);
lcd_putchar(day/10+48);
lcd_putchar(day%10+48);
break;
case 5:
lcd_gotoxy(7,1);
lcd_puts(" ");
delay_ms(20);
lcd_gotoxy(7,1);
lcd_putchar(month/10+48);
lcd_putchar(month%10+48);
break;
case 6:
lcd_gotoxy(12,1);
lcd_puts(" ");
delay_ms(20);
lcd_gotoxy(12,1);
lcd_putchar(year/10+48);
lcd_putchar(year%10+48);
break;
}
lcd_gotoxy(12,1);
lcd_putchar(year/10+48);
lcd_putchar(year%10+48);
lcd_gotoxy(7,1);
lcd_putchar(month/10+48);
lcd_putchar(month%10+48);
lcd_gotoxy(4,1);
lcd_putchar(day/10+48);
lcd_putchar(day%10+48);
lcd_gotoxy(6,1);
lcd_puts("/");
lcd_gotoxy(9,1);
lcd_puts("/");
lcd_gotoxy(10,1);
lcd_puts("20");

}
}

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1


#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

i2c_init();

// DS1307 Real Time Clock initialization


// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
rtc_set_time(8,51,00);
rtc_set_date(6,5,4,19); //set lan dau, sau do an di neu khong se bi set lai lan khi
mo nguon lai
lcd_init(16);
//DDRE = 0x00;
//PORTE = 0xff;
DDRD = 0xff;
DDRF = 0xff;
DDRB = 0x00;
PORTB = 0xff;
while (1)
{
rtc_get_time(&hour, &min, &sec);
rtc_get_date(&dow,&day,&month,&year);
display_time(1);
display_date(1);
kiemtra_mode();
kiemtra_up();
kiemtra_down();
display_sensor();
}
}

You might also like