Arduino 사용 사례
1. 시리얼 명령어 처리 (가장 많이 사용!)
char cmd[20];
void loop() {
if (Serial.available()) {
Serial.readStringUntil('\n').toCharArray(cmd, 20);
if (strcmp(cmd, "ON") == 0) {
digitalWrite(LED, HIGH);
Serial.println("LED 켜짐");
}
else if (strcmp(cmd, "OFF") == 0) {
digitalWrite(LED, LOW);
Serial.println("LED 꺼짐");
}
else if (strcmp(cmd, "STATUS") == 0) {
Serial.print("LED 상태: ");
Serial.println(digitalRead(LED));
}
else {
Serial.println("알 수 없는 명령");
}
}
}
2. 비밀번호 확인
const char* PASSWORD = "1234";
char input[20];
void checkAccess() {
Serial.print("비밀번호 입력: ");
// 입력 받기...
if (strcmp(input, PASSWORD) == 0) {
Serial.println("접근 허용!");
unlockDoor();
} else {
Serial.println("비밀번호 틀림!");
soundAlarm();
}
}
3. 메뉴 시스템
char menu[20];
void processMenu() {
if (strcmp(menu, "TEMP") == 0) {
showTemperature();
}
else if (strcmp(menu, "HUMID") == 0) {
showHumidity();
}
else if (strcmp(menu, "LIGHT") == 0) {
showLight();
}
else if (strcmp(menu, "ALL") == 0) {
showTemperature();
showHumidity();
showLight();
}
}
4. 센서 ID 확인
// 여러 센서 중 특정 센서만 처리
void processSensor(char* sensorId, int value) {
if (strcmp(sensorId, "TEMP01") == 0) {
temperature1 = value;
}
else if (strcmp(sensorId, "TEMP02") == 0) {
temperature2 = value;
}
else if (strcmp(sensorId, "HUMID01") == 0) {
humidity = value;
}
}
5. 통신 프로토콜 헤더 확인
// 패킷: "START:DATA:END"
void parsePacket(char* packet) {
char header[10];
strncpy(header, packet, 5);
header[5] = '\0';
if (strcmp(header, "START") == 0) {
// 유효한 패킷
processData(packet + 6);
} else {
Serial.println("잘못된 패킷 헤더");
}
}
6. 모터 방향 제어
void controlMotor(char* direction) {
if (strcmp(direction, "FWD") == 0) {
digitalWrite(MOTOR_A, HIGH);
digitalWrite(MOTOR_B, LOW);
Serial.println("전진");
}
else if (strcmp(direction, "BWD") == 0) {
digitalWrite(MOTOR_A, LOW);
digitalWrite(MOTOR_B, HIGH);
Serial.println("후진");
}
else if (strcmp(direction, "STOP") == 0) {
digitalWrite(MOTOR_A, LOW);
digitalWrite(MOTOR_B, LOW);
Serial.println("정지");
}
}
7. WiFi/블루투스 명령 처리
void handleBluetoothCommand(char* cmd) {
if (strcmp(cmd, "CONNECT") == 0) {
Serial.println("연결됨");
isConnected = true;
}
else if (strcmp(cmd, "DISCONNECT") == 0) {
Serial.println("연결 해제");
isConnected = false;
}
else if (strcmp(cmd, "PING") == 0) {
Serial.println("PONG");
}
}
8. 설정값 저장/불러오기
void handleConfig(char* cmd, char* value) {
if (strcmp(cmd, "SET_SPEED") == 0) {
motorSpeed = atoi(value);
Serial.print("속도 설정: ");
Serial.println(motorSpeed);
}
else if (strcmp(cmd, "SET_DELAY") == 0) {
delayTime = atoi(value);
Serial.print("딜레이 설정: ");
Serial.println(delayTime);
}
else if (strcmp(cmd, "SAVE") == 0) {
saveToEEPROM();
Serial.println("설정 저장됨");
}
}