시리얼을 통하여 여러 센서의 값을 하나의 문자열로 받아 쉽게 파싱하는 방법을 공유합니다.
gcc 컴파일러에서만 될 수도 있는 비표준 코드이니 이런게 있다는 것만 알아두시길 바랍니다. 하지만 임베디드 리눅스에서는 압도적으로 gcc를 사용하니..
아래는 sscanf 의 사용과 gcc에서 지원하는 정규표현식을 이용하여 필요한 부분만을 재가공하여 넘겨주는 코드입니다.
사용방법은 어렵지 않으니 한번씩 해보시면 나중에 크게 도움될거라 생각합니다.
/* Vaisala WXT520 온도 습도 기압 값 파서 */
int getSensorValue10sec_WXT520(multiSensorArr *valueFromSensor, char sensor)
{
float pressure;
float temp;
float humidity;
char buff[20]; /* 쓸모없는 문자열을 저장 */
/* 센서가 출력한 아래와 같은 문자열을 파싱
* 0R2,Ta=24.6C,Ua=55.1P,Pa=1005.5H */
sscanf(valueFromSensor -> rev10secBuff, "%[^=]=%f%[^=]=%f%[^=]=%f",
buff, &temp,
buff, &humidity,
buff, &pressure);
/* 요청받은 센서의 값을 리턴 */
switch (sensor) {
case 'T': /* 온도 */
return (int)((temp + 100) * 10);
case 'H': /* 습도 */
return (int)(humidity * 10);
case 'P': /* 기압 */
return (int)(pressure * 10);
default:
}
return 1;
}
'코스웨어 > 12년 내장형하드웨어' 카테고리의 다른 글
소스 작성의 나쁜 예.. (4) | 2013.07.04 |
---|---|
으앙 (6) | 2013.06.20 |
디버그용 printf 찍을 때 tip (4) | 2013.06.19 |
대소식!! (5) | 2013.06.18 |
입사 3개월 (7) | 2013.06.07 |
일하다 말고.. 간단한 리눅스 팁 몇 개.. (4) | 2013.06.04 |
오예 (12) | 2013.04.10 |
[정철/근황공개]다들 어찌 지내시요 (1) | 2013.03.12 |