Hi.
My arduino resets it self, when it receives a text message it has to process.
I am doing a small temperature control, where i send text messages to get the actual status, to set it to 2 different temperatures and to manually turn it on.
My setup is a arduino UNO + a GPRS Shield V2.0 from SeedStudio.
Here is the code (The language in the replies are in danish, so if you don't understand the text, just ask)
Can you tell me why it is rebooting?
I hope you can help, since I'm loosing my hair over this!
#include <DallasTemperature.h>
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <OneWire.h>
//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"
#include "sms.h"
SMSGSM sms;
//To change pins for Software Serial, use the two lines in GSM.cpp.
//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.
//Outputs & inputs
int inPutVP = 4;
int rel1 = 5;
int led1 = 13;
int led2 = 12;
OneWire oneWire(2);
DallasTemperature tempSens(&oneWire);
//Var
int startvarm = 2; //Starter funktionen til Varme. brugt til knap.
int startvarmvand = 3; //Starter funktionen til varmt vand. brugt til knap
int numdata;
boolean started=false;
int position; //Lagrer beskedens position paa sim.
char phone_number[20]; // telefon Nummer
char sms_text[100]; // Besked indhold
char hentSMS; // Bruges til at hente sms'en ned
boolean nySMS; //Tjekker om der er en ny SMS. Bliver sat til TRUE hvis der er, og naar programmet har koert bliver den sat til False
boolean tempStyring22 = false;
boolean tempStyring15 = false;
boolean OnOff = false;
int tjekVP;
boolean styringOnOff = false;
//Functions
int varme() {
digitalWrite(rel1, HIGH);
digitalWrite(led1, HIGH);
delay(500);
digitalWrite(rel1, LOW);
digitalWrite(led1, LOW);
delay(500);
styringOnOff = !styringOnOff;
OnOff = !OnOff;
}
int onOroff() {
tjekVP = digitalRead(inPutVP);
if (tjekVP == HIGH) {
OnOff = !OnOff;
delay(1000);
}
}
void powerUpOrDown()
{
pinMode(9, OUTPUT);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
}
void setup()
{
//Serial connection.
powerUpOrDown();
pinMode(rel1, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(startvarm, INPUT);
pinMode(inPutVP, INPUT);
pinMode(startvarmvand, INPUT);
Serial.begin(9600);
Serial.println("ESTIA SMS Styring.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(19200)){
Serial.println("\nstatus=READY");
started=true;
}
else Serial.println("\nstatus=IDLE");
if(started){
Serial.println("\nStartet");
}
tempSens.begin();
};
void loop()
{
if(started){
if (OnOff == true){
digitalWrite(led2, HIGH);
}
else {
digitalWrite(led2, LOW);
}
//Read if there are messages on SIM card and print them.
position=sms.IsSMSPresent(SMS_ALL);
onOroff();
if(position >= 1)
{
nySMS = true;
hentSMS = sms.GetSMS(position, phone_number, sms_text, 100);
if (!strcmp(sms_text, "VP")) {
varme();
if (OnOff == true) {
sms.SendSMS(phone_number, "Varmepumpe Startet");
}
else if(OnOff == false) {
sms.SendSMS(phone_number, "Varmepumpe Slukket");
}
nySMS = false;
}
if(!strcmp(sms_text, "22")) {
tempStyring22 = !tempStyring22;
tempStyring15 = false;
if (tempStyring22 == true) {
if (OnOff == true) {
sms.SendSMS(phone_number, "Du har aktiveret 22 graders styring, varmepumpe er on");
}
else if (OnOff == false) {
sms.SendSMS(phone_number, "Du har aktiveret 22 graders styring, varmepumpe er off");
}
}
else if (tempStyring22 == false) {
if (OnOff == true) {
sms.SendSMS(phone_number, "22 graders styring aktiv varmepumpe er on");
}
else if (OnOff == false) {
sms.SendSMS(phone_number, "22 graders styring deaktiv, varmepumpe er off");
}
}
//
nySMS = false;
}
if(!strcmp(sms_text, "15")) {
tempStyring15 = !tempStyring15;
tempStyring22 = false;
if (tempStyring15 == true) {
if (OnOff == true) {
sms.SendSMS(phone_number, "Du har aktiveret 15 graders styring, varmepumpe er on");
}
else if (OnOff == false) {
sms.SendSMS(phone_number, "Du har aktiveret 15 graders styring, varmepumpe er off");
}
}
else if (tempStyring15 == false) {
if (OnOff == true) {
sms.SendSMS(phone_number, "15 graders styring aktiv varmepumpe er on");
}
else if (OnOff == false) {
sms.SendSMS(phone_number, "15 graders styring deaktiv, varmepumpe er off");
}
}
nySMS = false;
}
if(!strcmp(sms_text, "Status")) {
tempSens.requestTemperatures();
float temperature = tempSens.getTempCByIndex(0);
int intTemperature = (int) temperature + 0.5;
String stringOne = "Temperaturen er lige nu: ";
stringOne += intTemperature;
if (OnOff == true) {
stringOne += "\nVarmepumpen er On";
}
else {
stringOne += "\nVarmepumpen er Off";
}
if (tempStyring22 == true) {
stringOne += "\n22 Graders funktion aktiv";
}
else if (tempStyring15 == true) {
stringOne += "\n15 Graders funktion aktiv";
}
else{
stringOne += "\nIngen temp. funktioner aktiv";
}
char textSMS[150];
stringOne.toCharArray(textSMS, 150);
sms.SendSMS(phone_number, textSMS);
}
if(sms.DeleteSMS(position)){
Serial.println("\nSMS Slettet");
}
}
delay(2000);
}
if (tempStyring22 == true) {
tempSens.requestTemperatures();
float temperature = tempSens.getTempCByIndex(0);
delay(100); //just here to slow down the output so it is easier to read
if (temperature <= 21) {
if (OnOff == false){
varme();
}
}
if (temperature >= 22) {
if (OnOff == true){
varme();
}
}
}
if (tempStyring15 == true) {
tempSens.requestTemperatures();
float temperature = tempSens.getTempCByIndex(0);
delay(100); //just here to slow down the output so it is easier to read
if (temperature <= 14) {
if (OnOff == false){
varme();
}
}
if (temperature >= 15) {
if (OnOff == true){
varme();
OnOff = !OnOff;
}
}
}
}