2015-11-17 5 views
0

Я пытаюсь заставить экран GSM работать вместе со щитом SD, то есть каждый раз, когда сообщение принимается, оно должно быть сохранено на SD-карте. Однако это не работает. Странная вещь - ошибки появляются в разных местах каждый раз. Иногда цикл останавливается в sms.flush(); но в других случаях он сталкивается с проблемами на LastMess = "";. Кроме того, персонажи часто скремблируются и формируются в странные символы. Я думал, что проблема связана с связью с последовательным монитором, экраном GSM и картой SD. Т.е. Проблемы с SPI/последовательным протоколом. Я также попытался заменить входной сигнал SMS на вход последовательного монитора и записать его в SD, но это дало еще больше проблем. Спасибо заранее!GSM и SD не работают вместе Arduino

#include <SPI.h> 
#include <SD.h> 
File dataFile; 
const int chipSelect = 4; 
// 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]; 
char Content[20]; 
String lastMess; 
char c; 
String txtmsg; 
String readString; 
void setup() 
{ 
    // initialize serial communications and wait for port to open: 
    while (!SD.begin(chipSelect)) { 
    Serial.println("Card failed, or not present"); 
    //return; 
    } 

    Serial.begin(9600); 

    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("SD initialized"); 
    Serial.println("Waiting for messages"); 
} 

void loop() 
{ 

    lastMess = ""; 
    Serial.println("BeginLoop"); 
    if (sms.available()) 
    { 
    Serial.println("Message received from:"); 

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

     // Read message bytes and print them 
    while (c = sms.read()) 
     { 
     Serial.print(c);  
     String nextChar = String (c); 
     String Mess = (lastMess + nextChar); 
     lastMess = Mess; 
     } 
    Serial.println("This is the message content:"); 
    Serial.println(lastMess); 
    Serial.println("\nEND OF MESSAGE"); 
    // Delete message from modem memory 
    sms.flush(); 
    Serial.println("MESSAGE DELETED");  

    dataFile = SD.open("datalog.csv", FILE_WRITE); 

    if (dataFile) 
      { 
      dataFile.print(senderNumber); 
      dataFile.print(","); 
      dataFile.print(lastMess); 
      dataFile.print(","); 
      dataFile.println("time e.g. 12:00"); 
      dataFile.close(); 
      delay(1000);    
      Serial.println("Content written to SD"); 
      } 


    else if (!dataFile) 
    { 

    Serial.println("SD not opened"); 
    } 
    // if the file isn't open, pop up an error: 
    else 
    { 
    Serial.println("error opening datalog.csv"); 
    } 
    Serial.println("Is SD being skipped?"); 
    } 

    delay(1000); 
    Serial.println("EndLoop"); 



} 

ответ

0

Ответ оказался в памяти Arduino, я получил следующее сообщение: «Low памяти могут произойти в наличии, проблемы со стабильностью.» Это скремблировало персонажей и вызывало проблемы. После сокращения кода, чтобы использовать меньше памяти, все работало нормально!

Смежные вопросы