Chciałbym Ci coś podpowiedzieć ze swojego doświadczenia gdy pisałem program do obsługi modemu GSM.
Za jego pomocą odczytywałem SMSy i je wysyłałem.
Napotkałem wówczas na pewną trudność z obsługą stringów w funkcji Serial.print("string").
Trudność ta objawiła się gdy zebrało się w programie ileś tam komend Serial.print("string").
Program nagle zaczął się wykładać i działy się dziwne rzeczy.
Doszedłem do tego, że zapychała mi się pamięc RAM w procku (tak to sobie wytłumaczyłem).
Nie mogłem ograniczyć ilości wysyłanych stringów a docelowo potrzebnych mi ich było ponad 80.
Problem rozwiązałem wykorzystując pamięć FLASH mikrokontrolera.
Poniżej przykład z którego możesz skorzystać aby uniknąć problemu z jakim ja się borykałem.
Efekt pracy programu możesz zobaczyć w serial monitorze IDE Arduino.
Pozdr.
ANT
Za jego pomocą odczytywałem SMSy i je wysyłałem.
Napotkałem wówczas na pewną trudność z obsługą stringów w funkcji Serial.print("string").
Trudność ta objawiła się gdy zebrało się w programie ileś tam komend Serial.print("string").
Program nagle zaczął się wykładać i działy się dziwne rzeczy.
Doszedłem do tego, że zapychała mi się pamięc RAM w procku (tak to sobie wytłumaczyłem).
Nie mogłem ograniczyć ilości wysyłanych stringów a docelowo potrzebnych mi ich było ponad 80.
Problem rozwiązałem wykorzystując pamięć FLASH mikrokontrolera.
Poniżej przykład z którego możesz skorzystać aby uniknąć problemu z jakim ja się borykałem.
Efekt pracy programu możesz zobaczyć w serial monitorze IDE Arduino.
Kod:
// FLASH MEMORY
// ---------------------------
// Zdefiniowanie pamięci FLASH
// ---------------------------
#include <avr/pgmspace.h>
// -------------------------------------
// Zdefiniowanie tekstów w pamięci FLASH
// -------------------------------------
const char tekst_0 [] PROGMEM = "Dowolny tekst";
const char tekst_1 [] PROGMEM = "Nastepny tekst";
const char tekst_2 [] PROGMEM = "Jeszcze jeden tekst";
const char tekst_3 [] PROGMEM = "... i jeszcze jeden";
const char tekst_4 [] PROGMEM = "... itd...";
const char* const tablicaFLASH [] PROGMEM = {
tekst_0, tekst_1, tekst_2, tekst_3, tekst_4
};
char bufor [100];
byte poz;
// -------------------
// Ustawienia programu
// -------------------
void setup()
{
Serial.begin (9600);
}
// ---------------------
// Główna pętla programu
// ---------------------
void loop()
{
STRING();
Serial.println(bufor);
poz ++;
if (poz > 4) poz = 0;
delay(1000);
}
// ---------------------------------------------------
// Funkcja ładująca STRING'a z pamięci FLASH do bufora
// ---------------------------------------------------
void STRING ()
{
strcpy_P (bufor, (char*) pgm_read_word (& (tablicaFLASH [poz])));
}
Pozdr.
ANT
Jeżeli pomogłem, to poproszę o punkt reputacji