You are on page 1of 3

//Bài KT2

//Nhóm SV:
// - Họ tên: Tăng Hoàng Huy MSSV: 20146342
// - Họ tên: Đỗ Đình Thi MSSV: 20146037
// - Họ tên: Bùi Lê Minh Trí MSSV: 20146442

#include <wiringPi.h>
#include <time.h>
#include <stdio.h>
#include <wiringPiSPI.h>
#include <stdint.h>
#include <stdlib.h>

uint16_t numbers[4] = {};


unsigned char data[2]; //16bit = 2byte
unsigned char digits[10] = { // digit patterns for 0-9
0b01111110, // 0
0b00110000, // 1
0b01101101, // 2
0b01111001, // 3
0b00110011, // 4
0b01011011, // 5
0b01011111, // 6
0b01110000, // 7
0b01111111, // 8
0b01111011 // 9
};

int read_hour(){
int hour;
time_t currentTime = time(NULL); // Lấy thời gian hiện tại tính bằng giây
struct tm *localTime = localtime(&currentTime); // Chuyển đổi sang định dạng
ngày/giờ
hour = localTime->tm_hour;
return hour;
}

int read_minute(){
int minute;
time_t currentTime = time(NULL); // Lấy thời gian hiện tại tính bằng giây
struct tm *localTime = localtime(&currentTime); // Chuyển đổi sang định dạng
ngày/giờ
minute = localTime->tm_min;
return minute;
}

void send_data(unsigned char address, unsigned char value){


//doi voi MAX7219 can 16bit
data[0] = address;//address
data[1] = value;//data
wiringPiSPIDataRW(0,data,sizeof(data));// 0 la channel (mac dinh cua rasp la
0); 2 la 2 byte
}

void Init(void){
//reset decode mode
send_data(0x09,0x00);
//set intensity (do sang)
send_data(0x0A,0X09);
//set scan limit (so led can quet)
send_data(0x0B,0x07);
//no shutdown
send_data(0x0C,1);
//Display test is off
send_data(0x0F,0);
}

void max7219_display(int16_t digit0, int16_t digit1, int16_t digit2, int16_t


digit3) {
send_data(1, digit0);
send_data(2, digit1);
send_data(3, 0x17);
send_data(4, digit2);
send_data(5, digit3);
send_data(6, 0x01);
send_data(7, 0x01);
send_data(8, 0x01);
}
/*
float get_cpu_temp()
{
float temp = 0;
FILE *temp_file = fopen(TEMP_FILE, "r");
if (temp_file == NULL) {
fprintf(stderr, "Failed to open file %s\n", TEMP_FILE);
exit(1);
}
fscanf(temp_file, "%f", &temp);
fclose(temp_file);
return temp / 1000;
}
*/
/*
void display_temp(float temp)
{
char temp_str[TEMP_DISPLAY_LENGTH + 1];
sprintf(temp_str, "%04.1f", temp);
for (int i = 0; i < TEMP_DISPLAY_LENGTH; i++) {
unsigned char value = temp_str[i] - '0';
unsigned char dot = (i == 1) ? 0x80 : 0x00;
max7219_set_digit(i, value, dot);
}
}
*/
int main(void) {
wiringPiSPISetup(0,10000000);// khoi tao: spi0, speed = 10MHz
//setup operational mode for MAX7219
Init();

if(wiringPiSetup() == -1) {
printf("Khong the khoi tao wiringPi\n");
return 1;
}
//set time
printf("enter off-time following the format -> hh hh mm mm: \n");
for (int i = 0; i < 4; i++)
{
scanf("%d",&numbers[i]);
printf("the value is: %d\n",numbers[i]);

int16_t digit0, digit1, digit2, digit3;


while(1) {
/*
//--------------cauA

printf("Ngay/Gio hien tai: %02dh%02d\n",


read_hour(), read_minute());
digit3 = digits[(read_hour() / 10)% 10];
digit2 = digits[read_hour() % 10];
digit1 = digits[(read_minute() / 10)%10];
digit0 = digits[read_minute() % 10];

max7219_display(digit0, digit1, digit2, digit3);


*/
//-------------cauB

if ((((read_minute())%10) == numbers[3]) && ((read_minute())/10 ==


numbers[2]) && ((read_hour())%10 == numbers[1]) && ((read_hour())/10) ==
numbers[0])
{
for (int i = 0; i < 10; i++)
{
send_data(0x0A,i);
delay(500);
}
for (int j = 10; j > 0; j--)
{
send_data(0x0A,j);
delay(500);
}
}
}
return 0;
}

You might also like