Question

Using Arduino + Sparkfun SM5100B + Cellular Shield.

I need the following code to loop trough a set of mobile numbers with about a minute delay for each. If the Arduino receives a positive/'yes' message I need this to break the loop and end it. If it receives a 'no' or a negative message I need it to continue its loop.

Right now, I have it successfully compiling, but while it delays correctly in the loop and prints the correct messages in the serial monitor, it actually only sends a test message to the first number along with the AT commands to send to the next number (in the text message received by the first number) in this code I have included the receive message code yet, as I would like to get the loop working first before I try to break it.

    //THis code is sending both messages to first number
#include <GSM.h>

#define PINNUMBER ""
const int buttonPin = 4;
const int ledPin1 = 13;  
const int ledPin2 = 12;
int buttonState = 0;

// initialize the library instance
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS sms;

// char array of the telephone number to send SMS
const char* number1 = "xxxxxxxxxxxxx"; // enter any two mobile numbers here in international format
const char* number2 = "xxxxxxxxxxxxx";

// char array of the message
char txtMsg[200]="test";

// connection state
boolean notConnected = true;

void setup()
{
  pinMode(ledPin1, OUTPUT); 
  pinMode(ledPin2, OUTPUT);
  pinMode(buttonPin, INPUT); 
  // initialize serial communications
  Serial.begin(9600);

  Serial.println("SMS Messages Sender");

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }
  Serial.println("GSM initialized");
  }

void loop()
{
buttonState = digitalRead(buttonPin);
 {
    sendSMS(); 
 }
}


void sendSMS()
{
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
if(buttonState == HIGH) {
  buttonState = 1;
};
if (buttonState == 1) {

  digitalWrite(ledPin2, HIGH);
  delay(1000);

  Serial.print("Message to mobile number: ");
  Serial.println(number1);

  // sms text
  Serial.println("SENDING");
  Serial.println();
  Serial.println("Message:");
  Serial.println(txtMsg);

  // send the message
  sms.beginSMS(number1);
  sms.print(txtMsg);
  Serial.println("\nFirst Message Sent\n");
  digitalWrite(ledPin2, LOW);

  delay (60000);

    digitalWrite(ledPin2, HIGH);
  delay(1000);

  Serial.print("Message to mobile number: ");
  Serial.println(number2);

  // sms text
  Serial.println("SENDING");
  Serial.println();
  Serial.println("Message:");
  Serial.println(txtMsg);

  // send the message
  sms.beginSMS(number2);
  sms.print(txtMsg);
  sms.endSMS();
  Serial.println("\nSecond Message Sent\n");
  digitalWrite(ledPin2, LOW);
}
}
Was it helpful?

Solution

Change GSM_sms;

to

GSM_smsone;
GSM_smstwo;

use

smsone.beginSMS(number1);
smsone.print(txtMsg);
smsone.endSMS();

smstwo.beginSMS(number2);
smstwo.print(txtMsg);
smstwo.endSMS();

for sending the sms.

#include <GSM.h>

#define PINNUMBER ""
const int buttonPin = 4;
const int ledPin1 = 13;
const int ledPin2 = 12;
int buttonState = 0;

// initialize the library instance
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS smsone;
GSM_SMS smstwo;

// char array of the telephone number to send SMS
const char* number1 = "xxxxxxxxxxxxx"; // enter any two mobile numbers here in international format
const char* number2 = "xxxxxxxxxxxxx";

// char array of the message
char txtMsg[200] = "test";

// connection state
boolean notConnected = true;

void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin, INPUT);
// initialize serial communications
Serial.begin(9600);

Serial.println("SMS Messages Sender");

// Start GSM shield
// If your SIM has PIN, pass it as a parameter of begin() in quotes
while (notConnected)
{
if (gsmAccess.begin(PINNUMBER) == GSM_READY)
  notConnected = false;
else
{
  Serial.println("Not connected");
  delay(1000);
}
}
Serial.println("GSM initialized");
}

void loop(){

buttonState = digitalRead(buttonPin);
{
   sendSMS();
}
}

void sendSMS()
{
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, LOW);
  if (buttonState == HIGH) {
    buttonState = 1;
  };

  if (buttonState == 1) {
    digitalWrite(ledPin2, HIGH);
    delay(1000);
    Serial.print("Message to mobile number: ");
    Serial.println(number1);
    // sms text
    Serial.println("SENDING");
    Serial.println();
    Serial.println("Message:");
    Serial.println(txtMsg);
    // send the first message
    smsone.beginSMS(number1);
    smsone.print(txtMsg);
    smsone.endSMS();
    Serial.println("\nFirst Message Sent\n");
    digitalWrite(ledPin2, LOW);

    delay (60000);

    digitalWrite(ledPin2, HIGH);
    delay(1000);
    Serial.print("Message to mobile number: ");
    Serial.println(number2);
    // sms text
    Serial.println("SENDING");
    Serial.println();
    Serial.println("Message:");
    Serial.println(txtMsg);
    // send the second message
    smstwo.beginSMS(number2);
    smstwo.print(txtMsg);
    smstwo.endSMS();
    Serial.println("\nSecond Message Sent\n");
    digitalWrite(ledPin2, LOW);
  }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top