Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // --- funkcja wyświetla ilość wolnej pamięci dynamicznej RAM -----------------------------------------
- void freeRAM()
- {
- extern int __heap_start, *__brkval;
- int v;
- Serial.print(F("Wolna pamiec [bajty] : "));
- Serial.println( (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval) );
- }
- // --- komunikaty zapisane w pamieci programu --- definiujemy jako const char [] PROGMEM ----------
- const char msg_00 [] PROGMEM = "Nie mozna pozyskac tej wiadomosci! Nie istnieje.";
- const char msg_01 [] PROGMEM = "Hello, twoje Arduino zostalo uruchomione";
- const char msg_02 [] PROGMEM = "Komunikaty ktore widzisz zostaly zdefiniowane z pamieci programu";
- const char msg_03 [] PROGMEM = "Dzieki takiemu rozwiazaniu w RAM masz wiecej wolnej pamieci";
- const char msg_04 [] PROGMEM = "Dostep do tych napisow trzeba wydobyc z pamieci PROG do RAM";
- const char msg_05 [] PROGMEM = "Nie jest to trudne, a oszczednosci olbrzymie";
- // --- tablica ulatwiajaca wybor odpowiedniego komunikatu ----------------------------------------
- const char * const wiadomosc [] PROGMEM = { msg_00, msg_01, msg_02, msg_03, msg_04, msg_05 };
- // --- funkcja wyciągająca napis z tablic msg_xx -------------------------------------------------
- void EkstrakcjaWiadomosci(byte nr_wiadomosci)
- {
- // musimy sprawdzic czy nr_wiadomości do wyłuskania z pamięci RAM nie jest
- // już poza tablica wiadomosc [] - zabezpieczamy się przed błędem :-)
- if( nr_wiadomosci >= sizeof (wiadomosc) / 2 )
- {
- char *bufor = new char [ strlen_P( pgm_read_word (& wiadomosc[0] ) ) ]; // dynamiczny przydział pamięci bufora
- strcpy_P ( bufor, (char*) pgm_read_word (& wiadomosc[0] )); // kopiujemy z pamięci msg: error do bufor
- TypeWriter( bufor, 50 ); // drukujemy komunikak błędu na ekran
- freeRAM(); // wolna pamięć - bufor jeszcze istnieje
- delete bufor; // kasujemy bufor z pamięci
- freeRAM(); // wolna pamięć - bufor już nie istnieje
- }
- // numer wiadomości do wyświetlenia jest w tablicy (zmienna musi mieć wartość 1,2,3,4,5)
- // wiadomosc nr. 0 to nasz komunikat o błędzie, oczywiście dostęp do niej przez podanie 0
- else
- {
- char *bufor = new char [ strlen_P( pgm_read_word (& wiadomosc[nr_wiadomosci] ) ) ];
- strcpy_P ( bufor, (char*) pgm_read_word (& wiadomosc[nr_wiadomosci] ));
- TypeWriter(bufor, 50);
- freeRAM(); // wolna pamięć - bufor isnieje w RAM
- delete bufor; // kasujemy bufor z pamięci
- freeRAM(); // wolna pamięć - bufor już nie istnieje
- }
- }
- // --- Serial Type Writer by PowerTGS -------------------------------------------------------------
- // jako wejście otrzymuje adres tablicy znaków [] i czas opóźnienia wyświetlenia jednego znaku
- void TypeWriter(const String & message, unsigned int wait)
- {
- for(const char c : message)
- {
- Serial.write(c);
- delay(wait);
- }
- Serial.write("\n");
- }
- // --- SETUP ------------------------------------------------------------------------------------
- void setup()
- {
- Serial.begin(9600);
- EkstrakcjaWiadomosci(1);
- EkstrakcjaWiadomosci(2);
- EkstrakcjaWiadomosci(3);
- EkstrakcjaWiadomosci(4);
- EkstrakcjaWiadomosci(5);
- EkstrakcjaWiadomosci(6); // wiadomosc 6 nie istnieje, sprawdzmy co się stanie
- }
- void loop()
- {
- // put your main code here, to run repeatedly:
- }
Add Comment
Please, Sign In to add comment