Я пытаюсь заставить экран 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");
}