strlen

Arduino 사용 사례

Arduino 사용 사례

1. 시리얼 수신 데이터 유효성 검사

char received[50];
int idx = 0;

void loop() {
    while (Serial.available()) {
        received[idx++] = Serial.read();
    }
    received[idx] = '\0';

    // 최소 길이 확인
    if (strlen(received) >= 3) {
        processCommand(received);
    } else if (strlen(received) > 0) {
        Serial.println("명령이 너무 짧습니다");
    }

    idx = 0;  // 리셋
}

2. LCD 중앙 정렬

// 16x2 LCD에서 문자열을 가운데 정렬

void printCenter(char* text) {
    int len = strlen(text);
    int startPos = (16 - len) / 2;  // 중앙 위치 계산

    lcd.setCursor(startPos, 0);
    lcd.print(text);
}

// 사용 예시
printCenter("Hello");       // "     Hello      "
printCenter("Temperature"); // "  Temperature   "

3. 명령어 길이로 종류 구분

void processCommand(char* cmd) {
    int len = strlen(cmd);

    if (len == 2) {
        // 짧은 명령: "ON", "OF"
        if (strcmp(cmd, "ON") == 0)
            digitalWrite(LED, HIGH);
    }
    else if (len == 4) {
        // 중간 명령: "STOP", "PLAY"
        if (strcmp(cmd, "STOP") == 0)
            stopMotor();
    }
    else if (len > 4) {
        // 긴 명령: "SPEED:100"
        parseComplexCommand(cmd);
    }
}

4. 버퍼 오버플로우 방지

char buffer[20];

void safeAppend(char* newText) {
    // 추가해도 버퍼를 넘지 않는지 확인
    if (strlen(buffer) + strlen(newText) < sizeof(buffer) - 1) {
        strcat(buffer, newText);
    } else {
        Serial.println("버퍼 오버플로우 방지!");
    }
}

5. 패킷 길이 검증

// 예상 패킷: "CMD:DATA" (최소 8글자)

void receivePacket(char* packet) {
    if (strlen(packet) < 8) {
        Serial.println("패킷이 불완전합니다");
        return;
    }

    if (strlen(packet) > 50) {
        Serial.println("패킷이 너무 깁니다");
        return;
    }

    // 정상 처리
    parsePacket(packet);
}

6. 문자열 배열에서 가장 긴 것 찾기

// 여러 센서 이름 중 가장 긴 것 찾기 (LCD 레이아웃용)

char* sensorNames[] = {"Temp", "Humidity", "Pressure", "Light"};
int numSensors = 4;

int findMaxLength() {
    int maxLen = 0;

    for (int i = 0; i < numSensors; i++) {
        if (strlen(sensorNames[i]) > maxLen) {
            maxLen = strlen(sensorNames[i]);
        }
    }

    return maxLen;  // "Humidity" = 8
}

7. 비밀번호 길이 검사

char password[20];

void checkPassword() {
    int len = strlen(password);

    if (len < 4) {
        Serial.println("비밀번호가 너무 짧습니다 (최소 4자)");
        return;
    }

    if (len > 12) {
        Serial.println("비밀번호가 너무 깁니다 (최대 12자)");
        return;
    }

    // 비밀번호 확인 진행
    verifyPassword(password);
}

8. 동적 출력 포맷팅

// 값에 맞춰 출력 형식 조정

void printValue(char* label, int value) {
    // 라벨 길이에 따라 간격 조정
    int spaces = 12 - strlen(label);

    Serial.print(label);
    for (int i = 0; i < spaces; i++) {
        Serial.print(" ");
    }
    Serial.print(": ");
    Serial.println(value);
}

// 결과:
// Temp        : 25
// Humidity    : 60
// Pressure    : 1013

댓글

댓글 본문
버전 관리
anton
현재 버전
선택 버전
graphittie 자세히 보기