strcmp

Arduino 사용 사례

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("설정 저장됨");
    }
}

댓글

댓글 본문