// Sys Lib
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Arduino API
#include <MsTimer2.h>
#include <TimerOne.h>
// My Lib
#include <value.h>
#include <My_Arduino_GPIO_Lib_V1_8.h>
//#include <My_Arduino_FND_Lib_V2_7.h>
// PRJ Lib
#define GPIO_IF 1
#define Digit_4 2
//#define Fnd_Dis 3
#define Fnd_Led_Dis 4
//#define En_Font_Dis 5
#include "fnd_dis.h"
#include <My_LCD_User_Font_Lib_V1_4.h>
#define I2C_IF 1
#include <My_Arduino_LiqCry_LCD_Lib_V1_5.h>
#include <My_Arduino_SSD1306_LIB_V1_2.h>
//#include <My_Arduino_U8G2_Lib_V1_2.h>
#define Arduino_Mode 1
#define HW_Uart_mode 2
#define Arduino_i2c_Char_LCD 3
#define SSD1306_I2C_OLED 4
extern int out_dev_set_mode;
#include <My_MCU_Printf_Lib_V2_6.h>
void tm1_irq()
{
//1ms
fnd_led_dis(ct -> cnt16, map(ct -> cnt16, 1234, 2000, 0, 255));
}
void tm2_irq()
{
// 실습1
//500ms
ct -> t_loop = 0;
ct-> cnt16 = ((*ct).cnt16 > 2000) ? 1234 : cnt.cnt16 + 1;
fg -> t2_flag = 1;
}
void setup() {
// 1. GPIO init
for(int i = 0; i<= 7;)
{ // LED + FND DIR Set
pinMode(LED_pin[i], OUTPUT);
Led_Byte_Out(0xff); // init
i++;
}
pinMode(x1000, OUTPUT);
pinMode(x100, OUTPUT);
pinMode(x10, OUTPUT);
pinMode(x1, OUTPUT);
#if Fnd_Led_Dis
pinMode(led_scan_pin, OUTPUT);
#endif
//--------------------------------------------
// 2. UART init
Serial.begin(115200);
out_dev_set_mode = HW_Uart_IF_Mode;
//-------------------------------------------------
// 3. I2C LCD Init
lcd_init();
// i2c_scan_id();
//Lcd_Test();
LCD_All_CLr;
LCD_Home;
print_xy_str(2,0,"Up Cnt: ");
print_xy_str(2,1,"Dn Cnt: ");
//------------------------------------------------
// 4. Timer 1, 2 Init
// Timer2 Interrupt
MsTimer2::set(500, tm2_irq); //1sec
MsTimer2::start();
// Timer1 Interrupt = IRQ
Timer1.initialize(1000); // 1ms ==fnd display
Timer1.attachInterrupt(tm1_irq);
//---------------------------------------------------------
// 5. OLED init = SSD1306 Lib
SSD1306_LIB_OLED_init();
OLED_test();
// move_test();
//i2c_scan_id();
display.clearDisplay();
display.setCursor(40, 2);
display.setTextSize(2); // MAX 8
display.print("CNT");
display.display();
}
void loop() {
// put your main code here, to run repeatedly:
if(fg -> t2_flag ==1)
{
fg -> t2_flag = 0;
// lcd out
gotoxy(10, 0);
out_dev_set_mode = i2c_Char_LCD_IF_Mode;
dev_printf("%d", ct -> cnt16);
sprintf(d_buf,"%4d", 2000-ct -> cnt16);
print_xy_str(10,1, d_buf);
// OLED Display
display.clearDisplay();
display.setCursor(40,2);
display.print("CNT");
display.setCursor(20, 40);
//display.print(ct ->cnt16);
out_dev_set_mode = SSD1306_I2C_OLED_IF_Mode;
dev_printf("ct %d", ct -> cnt16);
display.display();
// UArt TX
out_dev_set_mode = HW_Uart_IF_Mode;
dev_printf("Up Cnt: %d, Dn Cnt: %d\r\n", (*ct).cnt16, 2000-ct -> cnt16);
}
}