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); 
} 
 
   
 
           
           
    .