1Byte 수신 후 문자열 비교 = C언어 strcmp 함수사용
1Bte 식 수신 후 문자열 비교 = C언어 strcmp() 함수 사용
// system Lib
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//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"
int cnt = 1234;
typedef unsigned char uchar; // 자료형 사용자 정의
uchar rx_buf[20]; // 수신 data 저장 buf
char rx_cnt = 0; // 수신 Byte 수 카운터용 및 수신 저장buf 인덱스
char rx_end_flag = 0; // 수신완료여부 chk flag = 1프레임 ,1 프로토클 수신 완료 체크flag
char run_flag =0;
#define debuging 0
#define debuging_2 0
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
// UART Interrupt func == IRQ Func
void serialEvent()
{
char buf; // 임시 버퍼
buf = Serial.read(); //들어오는데로 수신된 자료형 그대로 1:1로 읽어드림 = int형으로 읽어들임
Serial.println(buf); // echo, loopback
if(buf != '\r') // '\r'과 같지 않으면 == 수신 Data 수납후 저장
{
rx_buf[rx_cnt] = buf; // 수신 Data를 수신 buf에 저장 = rx_cnt = 배열변수 인덱스로 동작 함
rx_cnt++; // 수신 Data 저장할 배열변수 인텍스 값 1식 증가
}
else
{
// 통신 종료신호 = 1페킷, 프레임 통신 프로토클이 종료 됨
rx_cnt = 0; // 초기화 시키고 = 다음을 수신을 위해서
rx_end_flag = 1; // 통신완료 chk flag
}
#if debuging_2
tx_str("ok\r\n");
#endif
}
void com_chk()
{
rx_end_flag = 0; // 실행중에 또 수신이 들어오면 탈출하기위해서 사용됨
// c언어
if(strcmp("run", rx_buf) == 0) // C언어 문자열 비교 함수로 수신 문자열이 run 하고 같냐 ?
{
// 같으면
run_flag = 1;
}
else if(strcmp("stop", rx_buf) == 0) // C언어 문자열 비교 함수로 수신 문자열이 stop 하고 같냐 ?
{
// 같으면
run_flag = 0;
}
// Memory 지우기 == 3가지 방법 잘 익히기
memset(rx_buf, 0, 20 *sizeof(uint8_t));
memset(rx_buf, 0, sizeof(rx_buf));
memset(rx_buf, 0, 20 * sizeof(unsigned char));
#if debuging
//debuing
Serial.println("COM CHK");
tx_str("OK2 지운 후");
tx("Run_flag = ", sizeof("Run_flag = "));
tx_send(run_flag + 0x30);
dev_printf("RX_Buf = %s", rx_buf);
#endif
}
void loop() {
// put your main code here, to run repeatedly:
if(rx_end_flag == 1) com_chk();
if(run_flag == 1)
{
dev_printf("Now Count = %d\r\n", cnt);
cnt++;
delay(400);
}
}