| Advanced Output by BARRAGAN (http://barraganstudio.com> Demonstrates how to read data from the sparkfun usb weather board using the Serial library. The weather board includes temperature, humidity and barometric pressure. The weather board is connected to the Serial1 serial port. Created 28 April 2008 |

    // Advanced Output
    // by BARRAGAN (http://barraganstudio.com>

    String buffer = String("");  // buffer to read data from the weather board
    int ready = 0;  // used to mark when we have a complete string to process
    int val;  // use to read a byte from the serial
    unsigned long humidity=0, fahrenheit=0, celcius=0, SCPfahrenheit=0, presure=0;

    void setup() {
      Serial1.begin(9600);  // starts the second hardware serial port at 9600 to communicate with the weather board
      Serial.begin(9600);  // starts the serial at 9600
      pinMode(48, OUTPUT);  // turn ON the board LED for diagnostics
      digitalWrite(48, HIGH);
    }

    void loop() {
      while(Serial1.available() > 0) {  // if data vailable from the weather board
        val = Serial1.read();  // read it
        if((val != '\n')) {  // if no end of line
          buffer.append(char(val));  // add it to the buffer
        }
        else {  // if end of line reached, readu to parse the buffer
          ready = 1;
          break;
        }
      }
      if(ready == 1) {  // parse the buffer
        if(buffer.contains("#")) {  // verify if it is aggod reading
          // Serial.println(buffer);  // just to see what we got
          processReading(buffer.toCharArray());  // parse the buffer extracting the data
        }
        buffer = String("");  // clean up the buffer for next reading
        ready = 0;
      }
    }

    // parse the buffer received extracting the data
    void processReading(char packet[]) {
      byte i;
      char* endptr;

      // start parsing
      i = 0;
      i++;
      humidity = strtod(&packet[i], &endptr);       // next field: humidity

      while(packet[i++] != ',');			// next field: fahrenheit
      fahrenheit = strtod(&packet[i], &endptr);

      while(packet[i++] != ',');			// next field: celcius
      celcius = strtod(&packet[i], &endptr);

      while(packet[i++] != ',');			// next field: SCPfahrenheit
      SCPfahrenheit = strtod(&packet[i], &endptr);

      while(packet[i++] != ',');			// next field: presure
      presure = strtod(&packet[i], &endptr);

      while(packet[i++] != ',');			// next field: counter

      while(packet[i++] != '$');			// next field: checksum

      Serial.print("humidity: ");
      Serial.print(humidity, DEC);
      Serial.print(" fahrenheit: ");
      Serial.print(fahrenheit, DEC);
      Serial.print(" celcius: ");
      Serial.print(celcius, DEC);
      Serial.print(" SCPfahrenheit: ");
      Serial.print(SCPfahrenheit, DEC);
      Serial.print(" presure: ");
      Serial.println(presure, DEC);
    }

|  | .