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