/*
UART4 == 기능은 uart 3하고 같고, 다만 C++의 문자열 비교함수 compare 함수 사용
RX 수신 Data 를 1 Byte 방식으로 수신하지 않고
문자열 방식으로 수신하여 처리
그리고 문자열로 수신 저장시 '\r' 문자열은 제외 시키고 저장
*/
// system Lib
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <iostream> // C++에서 string.compare 함수 사용하기 위해서 호출 == Arduino에서는 안 먹음 = 사용 못 함
//My Lib
#include "My_Arduino_GPIO_Lib_V1_6.h"
#define Aduino_Mode 1
#define HW_Uart_mode 2 // Arduino HW UART 사용가능
#include "My_MCU_Printf_Lib_V2_2.h"
#include "My_Uart_MCU_Lib_V1_4.h"
char rx_end_flag = 0;
char run_flag = 0;
int cnt_16 = 1234;
typedef unsigned char uchar;
uchar rx_buf[20]; // 수신 Data가 저장될 버퍼
char rx_cnt = 0; // 수신 data 수 카운터 == 이는 곳 수신 data가 저장될 배열의 인덱스로 사용 됨
String rx_data; // 문자열을 수신하여 저장하는 버퍼
#define debuing 1
// Interrupt 방식
void serialEvent()
{
rx_data = Serial.readStringUntil('\r'); // '\r'를 만날때까지 문자열을 읽어 rx_data string 변수에 저장한다.
rx_end_flag = 1;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void com_chk()
{
// 수신 Data 명령어 체크
rx_end_flag = 0; // 수신완료 및 체크 플레그 초기화 = 다음 수신을 위해서 0으로 클리어, 기능 수행중 수신이 있을대 기능 탈출을 위해서 초기화 함
// C++ 의 string.compare를 사용코드 == 그러나 Arduino에서는 동작하지 않습니다. 아마 지원 안 하는거 같음
// = 그대신 Arduino에서는 이와 비숫한 기능의 string.compareTo() 함수를 지원 함
//if(rx_data.compare("run") == 0) run_flag = 1; // 문자열 비교 == C++언어용 함수, run_flag = 기능동작 시작용 플레그 = 미지원으로 사용 못 함
//else if(rx_data.compare("run") == 0) run_flag = 0; // 기능동작 정지용 flag, C++언어용 함수 = Arduino에서 미지워능로 사용 못 함
if((rx_data.compareTo("run") == 0) || rx_data.compareTo("RUN") == 0) run_flag = 1; // 문자열 비교 == Arduino 전용 함수, run_flag = 기능동작 시작용 플레그
else if((rx_data.compareTo("stop") == 0) || rx_data.compareTo("STOP") == 0)
{
run_flag = 0; // 기능동작 정지용 flag, Arduino 전용 함수
tx("Count STOP\r\n", 12);
tx("Count STOP 1\r\n", sizeof("Count STOP\r\n"));
}
// debuging 용
#if debuging
Serial.println("0k");
dev_printf("RX Buf = %s\r\n", rx_buf);
tx_str("Run_flag = ");
tx_send(run_flag + 0x30);
#endif
}
void loop() {
// put your main code here, to run repeatedly:
if(rx_end_flag == 1) com_chk();
if(run_flag == 1)
{
cnt_16++;
dev_printf("Now Count = %d\r\n", cnt_16);
delay(300);
}
}