[Project] 블루투스 알람시계_0 구상

2022. 7. 22. 15:46ARM/[Project]블루투스 알람시계

1. 시계가 작동하면 flash 메모리를 읽는다.

  flash 메모리에 key 값이 있다면 저장된 시간과 설정 값을 불러온다.

  만약 없다면... flash 메모리에 초기값을 설정하고, 그 초기값으로 시간을 셋팅한다.


2. lcd_dispaly_number 변수를 만들어서 변수 값에 맞게 디스플레이를 변화시킬예정이다.

 

lcd_dispaly_number  = 0;

// 시간 표시

lcd_dispaly_number  = 1;

// 시간 설정

lcd_dispaly_number  = 2;

// 알람 설정

lcd_dispaly_number  = 3;

// 멜로디 설정

 

lcd_dispaly_number 변수는 오직  

HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) () 함수에서만 변경된다.

< Nucleo 보드의 user button 을 한번 클릭할것 >

 


3. HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) ()  기능

콜백 함수는 인터럽트가 발생할 경우 동작하는 함수이다.

시간이 걸리는 코드를 작성할 경우 문제가 발생 할 수도 있기 때문에

최대한 간단하게 작성한다.

 

1번 . NOMAL 인터럽트 발생 시

lcd_dispaly_number 값을 1씩 증가시킨다.

lcd_dispaly_number 값이 4보다 크거나 같으면 0으로 바뀐다.

 

 

2번.  LONG 인터럽트 발생 시

상승 / 하강 에지 타이밍을 검출해서 LONG 클릭 / 노멀 클릭을 구분 할 수 있게

만들 생각이다.

 

전역 변수로 int long_clik = 0 ; 을 선언 후 콜백 함수에서는

long_clik 변수에 1을 대입하는 동작만 한다.

그 후 main() 함수에서 조건문 long_clik == 1 을 작성하여 

lcd_dispaly_number 값에 따라 동작하도록 한다.

 

if( lcd_display_number == 1 ) :

화면에 표시된 시간이 lcd_display_number_0 화면에 복사된다.

 

if( lcd_display_number == 2 || lcd_display_number ==  3) :
화면에 표시된 내용이 플레시 메모리에 저장된다.

 


4. 블루투스를 이용한 명령어

SET+T+A+12+11+30

시간을 오전 12시 11분 30초로 변경

SET+A+P+02+05+11

알람 시간을 오전 2시 5분 11초로 설정

SET+M+1

알람 멜로디를 1번으로 저장

 

HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 함수를 이용해서

명령어가 들어오면 해당 명령어가 올바른지 확인 후 전역함수에 저장하는 기능만

넣는다.