2022. 7. 22. 15:46ㆍARM/[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) 함수를 이용해서
명령어가 들어오면 해당 명령어가 올바른지 확인 후 전역함수에 저장하는 기능만
넣는다.
'ARM > [Project]블루투스 알람시계' 카테고리의 다른 글
| [ARM] 블루투스 알람시계_2 [EXTI / UART] (0) | 2022.07.20 |
|---|---|
| [ARM] 블루투스 알람시계_1 [IOC 설정] (1) | 2022.07.20 |