kippenstalalarm geheugen vol

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 2
Geregistreerd: 05 Mrt 2016, 15:10

kippenstalalarm geheugen vol

Berichtdoor ChristopheDt » 05 Mrt 2016, 15:55

Is er iemand die mij kan helpen?

Ik ben nog maar net begonnen met arduino en ik zit met een probleempje.

Ik probeer een alarm te maken voor in mijn vader, als er iets verkeerd gaat in de stal moet de arduino hem bellen en daarna een sms sturen met de melding van het probleem.

Alles werkt tot nu toe maar ik zou graag nog een waterteller op de arduino willen aansluiten. Om het water verbruik na te gaan en eventueel nog 2 alarmen willen bijvoegen.

Maar het probleem is dat het voor de globale variabelen geheugen van mijn arduino uno vol zit, kan iemand mij helpen.

Hieronder vind u de schets.

cpp code
#include <GSM.h>

#define PINNUMBER ""

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

// char array of the telephone number to send SMS
// change the number 1-212-555-1212 to a number
// you have access to
char remoteNumber[20] = "1-212-555-1212";
int temp = 6;
int vent = 5;
int elek = 4;

// char array of the message
char txtMsg[200] = "Temperatuur ALARM!!!";
char txtMsg2[200] = "Ventilator ALARM!!!";
char txtMsg3[200] = "Elektriciteit ALARM!!!";

void setup()
{

pinMode (temp, INPUT);
pinMode (vent, INPUT);
pinMode (elek, INPUT);
// initialize serial communications
Serial.begin(9600);

Serial.println("Kippenstal alarm");

// connection state
boolean notConnected = true;

// 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()
{
int tempStatus;
tempStatus = digitalRead(temp);

int ventStatus;
ventStatus = digitalRead(vent);

int elekStatus;
elekStatus = digitalRead(elek);

if (tempStatus == HIGH || ventStatus == HIGH || elekStatus == HIGH) {
Serial.print("Alarm belt naar: ");
Serial.println(remoteNumber);
vcs.voiceCall(remoteNumber);
delay(10000);
vcs.hangCall();
Serial.println("Oproep volbracht.");
}
delay (5000);



if ( tempStatus == HIGH) {
Serial.print("Message to mobile number: ");
Serial.println(remoteNumber);

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

// send the message
sms.beginSMS(remoteNumber);
sms.print(txtMsg);
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
delay(300000);
}



if ( ventStatus == HIGH) {
Serial.print("Message to mobile number: ");
Serial.println(remoteNumber);

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

// send the message
sms.beginSMS(remoteNumber);
sms.print(txtMsg2);
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
delay(300000);
}




if ( elekStatus == HIGH) {
Serial.print("Message to mobile number: ");
Serial.println(remoteNumber);

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

// send the message
sms.beginSMS(remoteNumber);
sms.print(txtMsg3);
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
delay(300000);
}


} //einde void loop

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: kippenstalalarm geheugen vol

Berichtdoor nicoverduin » 05 Mrt 2016, 16:09

Je hebt een aantal mogelijkheden waardoor je werkgeheugen grotendeels vrijkomt:
a) Gebruikmaken van Progmem. Hier kun je constantes in flash zetten (zo ongeveer al je berichten) en die pas uit het flash halen als je ze nodig hebt
b) Je messages zijn nu 200 bytes lang terwijl ze in werkelijkheid maar iets van 30 bytes lang zijn.
Als je die 2 punten opneemt, dan is er nog een fractie over van wat je gebruikte. Behoudens interne zaken van de GSM library.

Uitleg
Als jouw sketch opstart, dan zal de processor eerst ALLE constantes kopiëren vanuit Flash naar het RAM gebied. Dus dat stuk geheugen ben je gelijk al kwijt. Dat geldt dus ook voor constantes binnen de functies. Het kan ook niet anders, want als de processor opstart is het RAM geheugen leeg. Dus moeten eerst al die constantes uit het flash geheugen gehaald worden. Maar je kan ze er ook daar laten staan door de functie PROGMEN (zie: https://www.arduino.cc/en/Reference/PROGMEM). In feite kun je zelfs tabellen met bit patronen (7 segment displays) ook in flash laten zitten. Daar betaal je wel een prijs voor (TIJD). Maar die paar micro seconden gaat het niet uitmaken.

voorbeeld
dit is een stukje code waarin print() en println() gebruikt worden
cpp code
Serial.println();
Serial.print(F("pinMode ("));
Serial.print(pin);
Serial.print(",");
Serial.print(mode);
Serial.println(F(") invalid pin"));
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 2
Geregistreerd: 05 Mrt 2016, 15:10

Re: kippenstalalarm geheugen vol

Berichtdoor ChristopheDt » 05 Mrt 2016, 19:59

Dank u voor de reactie. probleem opgelost. :)

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 47 gasten