CAFE

한국직업능력교육원

[Arduino 실습 14] OLED에서 dev_printf 사용하기

작성자송명규|작성시간26.06.10|조회수11 목록 댓글 0



// 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);

  }

}

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼