Go Down

Topic: Arduino mega crashes while reading from SD (Read 534 times) previous topic - next topic

LuanaNeacsu

Apr 24, 2015, 01:26 am Last Edit: Apr 24, 2015, 01:26 am by LuanaNeacsu
Hi, I have an Arduino mega with an SD Shield and a GSM shield. I'm trying to send one sms to 200 numbers from a text file on the SD card, but the Arduino reboots every time I try to send to over 100 numbers. It doesn't crash when I try to send to 70 numbers. I only read one number at a time so I don't understand the problem. I'm pretty new to Arduino programming.

Please help me this is for a tournament. Here's the code:

Code: [Select]

#include <avr/pgmspace.h>
#include <SPI.h>
#include <SD.h>
#include <GSM.h>

#define PINNUMBER ""
GSM gsmAccess;
GSM_SMS sms;



// GSM
boolean notConnected;
//char input;
//byte input2;
//char txtContent[200];
byte i = 1;
byte f = 0;
boolean sendit;
//char senderNumber[11];
const String stopp PROGMEM = "Stopp";


//SD
char numbers[11];
//char nmbr;
int l = 0;

//Optimizing
const char q PROGMEM = '\xe5'; // å
const char w PROGMEM = '\xe4'; // ä
const char e PROGMEM = '\xf6'; // ö
const char r PROGMEM = '\xc5'; // Å
const char t PROGMEM = '\xc4'; // Ä
const char y PROGMEM = '\xd6'; // Ö

void setup() {
//  txtContent[0] = '\0';
  i = 0;
  pinMode(53, OUTPUT);
  Serial.begin(115200);
  //    Serial.begin(4800);
  Serial.println(F("Connecting to GSM..."));
  notConnected = true;
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
    }
    else {
      Serial.println(F("Not Connected"));
      delay(1000);
    }
  }
  Serial.println(F("GSM Ready"));
  if (!SD.begin(4)) {
    Serial.println(F("Error with SD card"));
    return;
  }
  Serial.println(F("SD Ready"));
  delay(1000);
  Serial.println(F("Write your sms and end it with * and press Send"));
  Serial.flush();
}

void loop() {
  char txtContent[300];
  if (Serial.available() > 0 && !sendit) {
    byte input2;
    input2 = (int)Serial.read();
    txtContent[i] = (char)input2;
    if (txtContent[i] == '{') {
      txtContent[i] = q;
    }
    else if (txtContent[i] == '}') {
      txtContent[i] = w;
    }
    else if (txtContent[i] == '|') {
      txtContent[i] = e;
    }
    else if (txtContent[i] == '[') {
      txtContent[i] = r;
    }
    else if (txtContent[i] == ']') {
      txtContent[i] = t;
    }
    else if (txtContent[i] == ';') {
      txtContent[i] = y;
    }
    i++;
    if (input2 == '*') {
      // Remove the * from text.
      for (int j = 0; j < sizeof(txtContent); j++) {
        if (txtContent[j] == '*') {
          txtContent[j] = '\0';
          //Serial.println(txtContent);
        }
      }
      sendit = true;
      Serial.flush();
    }
    else {
      sendit = false;
      Serial.flush();
    }
  }
  else if (sendit && txtContent[0] != '\0') {
    int txtCount = 0;
    //    else if(sendit){
    Serial.println(F("Sending please wait..."));
//    Serial.flush();
    File myFile;
    myFile = SD.open("numbers.txt");
    char input;
    if (myFile) {
//      if (myFile.available()) {
        while(myFile.available()){
        input = (char)myFile.read();
        if (input == ',') {
          sms.beginSMS(numbers);
          sms.print(txtContent);
//          sms.beginSMS("0704941025");
//          sms.print("yo");
          delay(30);
          sms.endSMS();
          delay(30);

          Serial.println(numbers);
          Serial.flush();
          //            Serial.flush();
          for (int j = 0; j < sizeof(numbers); j++) {
            if (numbers[i] != '\0') {
              numbers[j] = '\0';
            }
          }
          f = 0;
        }
        else {
          numbers[f] = input;
          f++;
        }
        }
      myFile.close();
      Serial.println(F("All texts have been sent."));
      Serial.flush();
    } else {
      Serial.println(F("error opening numbers.txt"));
    }
    for (int j = 0; j < sizeof(txtContent); j++) { // Clear text
      txtContent[j] = '\0';
    }
    i = 0;
    sendit = false;
  }
  else {
    //  delay(1000);
    if (sms.available()) {
      char senderNumber[11];
      sms.remoteNumber(senderNumber, 11);
      if (sms.peek() == 'S') {
        Serial.print(F("Detta nummer har skickat Stopp: "));
        Serial.println(senderNumber);
      }
      sms.flush();
      Serial.flush();
      //    sendit = false;
    }
  }
}

Go Up