So I had to make some tweaks to the code as far as the inertionPoint counter and the printAlarm function. I have the alarms printing out in descending order as to when they occured. The newAlarm function seems to be doing what I need it to do, not to just bring it back into my main program. Thanks to DavidOConnor for getting me on the right track!
#define ARRAYSIZE 20
struct alarm {
int time;
char *msg;
};
struct alarm alarms[ARRAYSIZE];
char *messages[10] = {
"alarm message 1",
"alarm message 2",
"alarm message 3",
"alarm message 4",
"alarm message 5",
"alarm message 6",
"alarm message 7",
"alarm message 8",
"alarm message 9",
"alarm message 10",
};
int insertionPoint=0;
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 9; i++){
newAlarm(i,millis()%0xFFFF);
Serial.println("Alarm Buffer");
printAlarms();
delay(1000);
}
}
void newAlarm(int msgIndex, int time) {
alarms[insertionPoint].time = time;
alarms[insertionPoint].msg = messages[msgIndex];
if (insertionPoint < ARRAYSIZE - 1){
insertionPoint++;
}
else{
insertionPoint=0;
}
//++insertionPoint %= ARRAYSIZE;
}
void printAlarms() {
for (int i = insertionPoint -1; i >= 0; i--){
Serial.print("Current Step is - ");
Serial.print(i);
Serial.print(" - ");
Serial.print(alarms[i].time);
Serial.print(" ");
Serial.println(alarms[i].msg);
}
for (int i = 19; i >= insertionPoint; i--){
Serial.print("Current Step is - ");
Serial.print(i);
Serial.print(" - ");
Serial.print(alarms[i].time);
Serial.print(" ");
Serial.println(alarms[i].msg);
}
}