PROGMEM example
/*
* Project: PROGMEM_example
* Author: Peter Brook, tidied by Jane-Maree Howard
* Date: Tuesday 01/11/2011
* Platform: Arduino 22
* Purpose: To demonstrate storing data in Arduino's flash memory
* Operation: Description: Stores 10x10 matrix (int) in Flash memory
* using the PROGMREM keywords & library
* Declare: formatting buffer (char); word counter (int);
* 10X10 data matrix - myData[10][10] (int)
Setup(): Serial@38400baud:TAKE CARE TO SET SM CORRECTLY
Loop(): Print to SM by ROWS, then by COLUMNS; * setup() again & loop()
*/
#include {avr/pgmspace.h} // PROGMEM library
char chBuffer [5]; // Serial output formatting buffer
word serialCount; // word count (2 Bytes)
void setup(void)
{
Serial.begin(38400); // Serial connection @ 38400 baud!!
Serial.println("\nPress space bar .");
// while (Serial.read() != 32) delay(1); // Wait for space
}//setup()
// this is the data to be stored
const int myData[10][10] PROGMEM = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', 'A',
'1', '1', '2', '3', '4', '5', '6', '7', '8', 'B',
'2', '1', '2', '3', '4', '5', '6', '7', '8', 'C',
'3', '1', '2', '3', '4', '5', '6', '7', '8', 'D',
'4', '1', '2', '3', '4', '5', '6', '7', '8', 'E',
'5', '1', '2', '3', '4', '5', '6', '7', '8', 'F',
'6', '1', '2', '3', '4', '5', '6', '7', '8', 'G',
'7', '1', '2', '3', '4', '5', '6', '7', '8', 'H',
'8', '1', '2', '3', '4', '5', '6', '7', '8', 'I',
'9', '1', '2', '3', '4', '5', '6', '7', '8', 'Z' };
void loop(void)
{
int i,j; // loop counters
byte n; // Byte output vble
// print heading for ROWS
Serial.println("\nData by Rows.");
for (i=0; i < 100;i++)
{
// some formatting conditions
if ((i %8)==0)
Serial.print("|");
if ((i %16)==0)
Serial.println("");
// now read a Byte from Flash memory
n = pgm_read_byte_near(i);
Serial.print(" ");
// format output to Serial
sprintf(chBuffer, "%02x", n);
// print output
Serial.print(chBuffer);
// next word (= 2 Bytes)
serialCount++;
}//for (i)
// print heading for COLUMNS
Serial.println(" ");
Serial.println("\nData by Columns.");
for (i=0; i < 10; i++)
{
Serial.println(" ");
for (j=0; j < 10; j++)
{
// print each column entry in BYTE format
n = pgm_read_word_near(&myData[j][i]);
Serial.print(n, BYTE);
}//for(j)
}//for (i)
// now set up to go round again
Serial.println(" ");
delay(3000);
setup();
Serial.println(" "); //start over
}//loop()
/* END */
See the following links to find out how some of this stuff works..
PROGMEM printf

No comments:
Post a Comment