2014-06-10 3 views
0

Android 앱에서 SMS를 수신하는 Arduino GSM Shield를 사용하고 있습니다. 이 SMS의 내용은 LED를 제어합니다. 이 SMS의 내용이 "꺼짐"이 아닌 경우 LED가 켜지고 내용이 직렬 모니터에 인쇄됩니다. 그러나 꺼져 있으면 LED가 즉시 꺼집니다. 게다가 LED는 "꺼짐"메시지가 오기 전까지 계속 켜져 있습니다. 지금은 소프트웨어의 예제 코드를 사용했습니다. 하지만이 SMS의 내용을 사용하여 LED 상태를 제어 할 수는 없습니다. 아래 코드를 사용하면 LED를 켤 수 없으며 내용을 모니터에 표시 할 수 없습니다. 스케치가이 SMS의 전체 내용을 가져 오지 못해서 였다고 생각합니다. 아무도이 문제를 해결하는 방법을 말해 줄 수 있습니까? 감사. 당신이 "off"로 C의 값을 설정하는이 라인Arduino GSM 방패에 의하여 SMS를 받고이 SMS의 내용으로 LED를 통제하십시오?

if(c='off'){ 

#include <GSM.h> 
GSM gsmAccess; 
GSM_SMS sms; 
char senderNumber[20]; 
int led=13; 
void setup() 
{ 
Serial.begin(9600); 
pinMode(led,OUTPUT); 
digitalWrite(led,LOW); 
while (!Serial) { 
    ; 
} 
Serial.println("SMS Messages Receiver"); 
boolean notConnected = true; 
while(notConnected) 
{ 
if(gsmAccess.begin("6442")==GSM_READY) 
    notConnected = false; 
else 
{ 
    Serial.println("Not connected"); 
    delay(1000); 
} 
} 
     Serial.println("GSM initialized"); 
     Serial.println("Waiting for messages"); 
} 

    void loop() 
    { 
    char c; 
    int val=0; 
    val=digitalRead(led); 
    if (val==HIGH){ 
    digitalWrite(led,HIGH); 
    } 
    if (sms.available()) 
    { 
    Serial.println("Message received from:"); 
    sms.remoteNumber(senderNumber, 20); 
    Serial.println(senderNumber); 

if(sms.peek()=='#') 
{ 
    Serial.println("Discarded SMS"); 
    sms.flush(); 
} 
    while(c=sms.read()) 
    if(c='off'){ 
    digitalWrite(led,LOW); 
}else{ 
    digitalWrite(led,HIGH); 
    Serial.print(c); 
} 
    Serial.println("\nEND OF MESSAGE"); 
    sms.flush(); 
    Serial.println("MESSAGE DELETED"); 
} 
    delay(1000); 
} 

답변

1

. 나는 c 값을 "off"문자열과 비교하기를 원한다고 생각한다. = 대신 ==를 사용하십시오.

누군가가 "꺼짐"대신 "꺼짐"을 보내면 어떻게됩니까? ......? 그 사건도 처리해야합니다. 비교하기 전에 SMS를 낮은 문자로 변환 해보십시오.

+0

또한 c가 'OFF'문자열의 주소와 함께 C를 지정하려고 시도 할 때 c = 'OFF'또는 c == 'OFF'는 의미가 없습니다. 두 번째 문자는 동일한 문자와 비교됩니다 주소. –

관련 문제