Logging incoming serail data

Hi,

I am trying to log serial incoming data to a SD shield. I have used some code from associted with the shield but i have had to write the code for the incoming data. I have used to serail available to read the incoming bytes and aimed to then build an array of the 9 bytes. The array is printing in the serail prot and on the file created on the SD card but i want to know if the code for the incoming serail data looked correct. I can test this yet so thought i would seek some advice. I have put the code below

Thanks in advance

#include <SD.h>
#include <Wire.h>
#include "RTClib.h"

// A Data Logger to record incoming data to the serial input

int incomingByte = 0;   // for incoming serial data


#define LOG_INTERVAL  1000 // mills between entries (reduce to take more/faster data)


#define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
uint32_t syncTime = 0; // time of last sync()

#define ECHO_TO_SERIAL   1 // echo data to serial port
#define WAIT_TO_START    1 // Wait for serial input in setup()

// the digital pins that connect to the LEDs
#define redLEDpin 2
#define greenLEDpin 3



RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 10;

// the logging file
File logfile;

void error(char *str)
{
  Serial.print("error: ");
  Serial.println(str);
  
  // red LED indicates error
  digitalWrite(redLEDpin, HIGH);

  while(1);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println();
  
  // use debugging LEDs
  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
#if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

  // initialize the SD card
  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    error("Card failed, or not present");
  }
  Serial.println("card initialized.");
  
  // create a new file
  char filename[] = "LOGGER00.txt";
  for (uint8_t i = 0; i < 100; i++) {
    filename[6] = i/10 + '0';
    filename[7] = i%10 + '0';
    if (! SD.exists(filename)) {
      // only open a new file if it doesn't exist
      logfile = SD.open(filename, FILE_WRITE); 
      break;  // leave the loop!
    }
  }
  
  if (! logfile) {
    error("couldnt create file");
  }
  
  Serial.print("Logging to: ");
  Serial.println(filename);

  // connect to RTC
  Wire.begin();  
  if (!RTC.begin()) {
    logfile.println("RTC failed");
#if ECHO_TO_SERIAL
    Serial.println("RTC failed");
#endif  //ECHO_TO_SERIAL
  }
  
  logfile.println("Multi-drop Data Logger");    
#if ECHO_TO_SERIAL
  Serial.println("Multi-drop Data Logger");
#endif //ECHO_TO_SERIAL
 
}

void loop(void)
{
  DateTime now;

  // delay for the amount of time we want between readings
  delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
  
  digitalWrite(greenLEDpin, HIGH);
  
  // fetch the time
  now = RTC.now();
  // log time
  logfile.print(", ");
  logfile.print('"');
  logfile.print(now.year(), DEC);
  logfile.print("/");
  logfile.print(now.month(), DEC);
  logfile.print("/");
  logfile.print(now.day(), DEC);
  logfile.print(" ");
  logfile.print(now.hour(), DEC);
  logfile.print(":");
  logfile.print(now.minute(), DEC);
  logfile.print(":");
  logfile.print(now.second(), DEC);
  logfile.print('"');
#if ECHO_TO_SERIAL
  Serial.print(", ");
  Serial.print('"');
  Serial.print(now.year(), DEC);
  Serial.print("/");
  Serial.print(now.month(), DEC);
  Serial.print("/");
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(":");
  Serial.print(now.minute(), DEC);
  Serial.print(":");
  Serial.print(now.second(), DEC);
  Serial.print('"');
#endif //ECHO_TO_SERIAL

  logfile.println();
#if ECHO_TO_SERIAL
  Serial.println();
#endif // ECHO_TO_SERIAL

if (Serial.available() > 9) {
                // read the incoming byte:
                incomingByte = Serial.read();
                
  int my_array[9] = {0}; 
  int  i;
  
  // display each number from the array in the serial monitor window
  for (int i = 0; i < 9; i++){ 
    Serial.println(my_array[i]);

  digitalWrite(greenLEDpin, LOW);
  
  // blink LED to show we are syncing data to the card & updating FAT!
  digitalWrite(redLEDpin, HIGH);
  logfile.flush();
  digitalWrite(redLEDpin, LOW);
  }
 }
}

I fear that the Serial port is blocked by while(1) in error(). Don't stop loop() this way. You better use a LED to signal an error condition, but let loop() continue.

You are not properly reading or doing anything with the incoming data.

This part waits for at least nine bytes of data to be available, then reads just one byte and does nothing with it.

if (Serial.available() > 9) {
                // read the incoming byte:
                incomingByte = Serial.read();

A bit further down, you initialize a 9-integer array to zero and print out those zeros. Is that what you intended?

You may find the examples in Serial Input Basics useful.

...R