gsm shield vraag

Hallo iedereen

hier ben ik weeral
Ik ben nu bezig met het gsm shield van arduino (1ste gen) in combinatie met een uno
Ik zou graag een uitgang willen aan- en uitsturen
Ik ben vertrokken vanuit de receivesms sketch
en geprobeerd met sms.read maar ik krijg niets te zien op de seriele monitor en er gebeurd ook niets
hoe kan ik de sms.read functie verder nog gebruiken ?
of zit ik ergens anders fout ?
Groeten Gert

[code]
/*
 SMS receiver

 This sketch, for the Arduino GSM shield, waits for a SMS message
 and displays it through the Serial port.

 Circuit:
 * GSM shield attached to and Arduino
 * SIM card that can receive SMS messages

 created 25 Feb 2012
 by Javier Zorzano / TD

 This example is in the public domain.

 http://www.arduino.cc/en/Tutorial/GSMExamplesReceiveSMS

*/

// include the GSM library
#include <GSM.h>

// PIN Number for the SIM
#define PINNUMBER ""

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

// Array to hold the number a SMS is retreived from
char senderNumber[20];

int relay1 = 13;

void setup() {
  pinMode(relay1, OUTPUT);
  
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("SMS Messages Receiver");

  // connection state
  boolean notConnected = true;

  // Start GSM connection
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
    } else {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");
  Serial.println("Waiting for messages");
}

void loop() {
  char c;

  // If there are any SMSs available()
  if (sms.available()) {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // An example of message disposal
    // Any messages starting with # should be discarded
    if (sms.peek() == '#') {
      Serial.println("Discarded SMS");
      sms.flush();
    }

     // Read message bytes and print them
    while (c = sms.read()) {
      Serial.println(c);
    }
    
    if (sms.read() == 'aan1'){
     Serial.println("relay1 aan");
     digitalWrite (relay1, HIGH);
    }

     if (sms.read() == 'uit1'){
     Serial.println("relay1 uit");
     digitalWrite (relay1, LOW);
    }
   
    
    // Delete message from modem memory
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }
  
  delay(1000);

}

[/code]

Wat doet hij wel eigenlijk? Maw zie je helemaal niets op de Serial?

ik krijg dit te zien
message received from : ....
a
a
n
1
message deleted

maar dit kreeg ik eerder niet te zien

Groeten Gert

Ik denk dat hier de fout zit:

// Read message bytes and print them
while (c = sms.read()) {
Serial.println(c);
}
als er geen teken is dan geeft hij -1 terug. Mogelijk dat dat vroeger goed ging in die libraries.
Ik zou die regel splitsen.
vb:

 c = sms.read();   
while (c != -1) {
   Serial.println(c);
   c = sms.read();
}

En maak ff van die char c ergens boven in int c.

Hallo

Ik heb het net geprobeerd maar nu krijg ik alleen een paar cijfers te zien in seriele monitor en dan altijd 0
verder gebeurd er niets

Groeten

Heb je eigenlijk de gewone voorbeelden uberhaupt aan de praat gekregen?

ja het gewone receiveSms sketch aan de praat dat is geen probleem

en als ik deze sketch gebruik hier v h topic dan krijg ik ook het smsbericht te zien
alleen het stukje
if (sms.read() == 'aan1'){
Serial.println("relay1 aan");
digitalWrite (relay1, HIGH);
}
doet helemaal niets ook niets op de serial monitor

trouwens een int is dat niet alleen voor cijfers en een char voor letters ?
of zit ik nu verkeerd ?

Groeten Gert

Ik heb iets gevonden maar het is nog niet helemaal zoals het de bedoeling is

ik heb dit stukje

if (sms.peek() == '#') {
      Serial.println("Discarded SMS");
      sms.flush();
    }

aangepast naar

if (sms.peek() == 'a') {
      digitalWrite(relay1, HIGH);
      
    }

als ik == 'a' gebruik dan werkt het wel
maar als ik == 'aan' gebruik dan werkt het niet

hoe kan ik dit aanpassen ?

Groeten Gert

Ik denk dat je er goed aan doet om het onderscheid te leren tussen een enkele quote en een dubbele quote. Als je een enkele quote gebruikt kijk je maar naar 1 character. Als je dubbele quotes gebruikt dan neem je een char array (oftewel een string).

Echter peek() werkt alleen met enkele bytes en doet nog wat meer. zie: Arduino - GSMSMSPeek

Als je in de message wil zoeken dan moet je eerst de message binnen halen en dan strstr() gebruiken. strstr kun je gewoon op googelen. Kan niet missen