2011-02-10 4 views
3

wifi가 내장 된 BlackWidow 버전을 사용하는 arduino 코드를 작업 중입니다. WiServer.h 라이브러리를 사용하여 modClient와 함께 SimpleClient.pde 예제를 사용하여 단순히 0, 1 또는 2의 정수를 반환하는 웹 서버를 호출하십시오. 최종 목표는 신호등의 적색, 녹색 또는 황색에 맞는 핀을 켜는 것입니다. 정수는 Hudson CI의 전체 상태를 나타냅니다.C++ char 스트림에서 문자 감지하기

저는 PHP의 게으른 자식이고 포인터가 나를 놀라게합니다. 내가 함께 일하고 코드는

// Function that prints data from the server 
void printData(char* data, int len) { 

    // Print the data returned by the server 
    // Note that the data is not null-terminated, may be broken up into smaller packets, and 
    // includes the HTTP header. 
    while (len-- > 0) { 
    Serial.print(*(data++)); 
    } 
} 

printData()는 웹 서버에 대한 호출의 콜백입니다, 그리고 실행할 때 그것은 (이 3 개 루프, 새로운 출력 전에 어떤 줄 바꿈입니다) 시리얼 모니터에 다음을 전송 :

HTTP/1.1 200 OK 
Date: Thu, 10 Feb 2011 17:37:37 GMT 
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11 
X-Powered-By: PHP/5.2.11 
Content-Length: 1 
Connection: close 
Content-Type: text/html 

0HTTP/1.1 200 OK 
Date: Thu, 10 Feb 2011 17:37:45 GMT 
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11 
X-Powered-By: PHP/5.2.11 
Content-Length: 1 
Connection: close 
Content-Type: text/html 

0HTTP/1.1 200 OK 
Date: Thu, 10 Feb 2011 17:37:58 GMT 
Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2 PHP/5.2.11 
X-Powered-By: PHP/5.2.11 
Content-Length: 1 
Connection: close 
Content-Type: text/html 

0 

내가 확인해야 할 부분은 1 대신 printData()의

2.이 기능이 간단하게 설정하여, turnOnAppropriateLight() 또는 뭔가 될 것입니다 수있는 0이다 핀을 HIGH로하십시오. 이렇게하면 해당 LED 배열에 전원을 공급하기 위해 릴레이가 활성화됩니다.

이제이 글을 작성 했으므로 마지막 문자를 유지하고 값을 기준으로 스위치를 수행해야합니다. * (data ++)는 포인터 인덱스를 증가시키는 것을 알고 있지만 혼란 스럽습니다 ... 나는 그 인덱스의 마지막 문자로 직접 이동하는 방법을 모르겠습니다. 이 루핑이 결과를 내뱉을 필요가 없습니다.

이 전혀 강력하지 arduino and 4-relay board enter image description here

+0

당신이 문자 스트림에서 사용할 수 있습니다 또는 당신이에 * 해석 * 스트림의 문자를 필요로 할 때 알아야합니까? –

답변

2

하지만

Serial.print(data[len-1]) 

는이이어야

+0

SimpleClientLights.cpp : 함수에서 'void printData (char *, int)': SimpleClientLights : 69 : 오류 : 'unary *'의 유형 인수가 올바르지 않습니다. – Brian

+0

NM - 여전히 포인터를 사용 중이 었습니다. 그러나 출력은 현재 t0t0t0t0t0t0 ... – Brian

+0

이상한 - printData func은 각 GET 요청마다 두 번 호출됩니다. WiServer의 일종 ... – Brian

1

당신이 얻을 것을 모두보기 당신이 필요합니다

data[len - 1] 
0

당신에게 신경증 일 수 있고 각 줄을 파싱 할 수있다. 또는 마지막 태그를 찾으십시오. Content-Type :.

C 스타일 문자열을 C++ std::string으로 변환 한 다음 find_first 메서드를 사용하여 키워드를 찾습니다.

std::istringstream는 텍스트 "0"으로 변환하는 데 사용할 수있는 숫자 0