Created
December 9, 2011 03:09
-
-
Save lilyszajn/1449973 to your computer and use it in GitHub Desktop.
Gymfo xbee code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| int temperatureCommand = B00000011; // command used to read temperature | |
| int humidityCommand = B00000101; // command used to read humidity | |
| int analogPinTemp = 10; | |
| int analogPinHumidity = 11; | |
| int clockPin = 8; // pin used for clock | |
| int dataPin = 9; // pin used for data | |
| int ack; // track acknowledgment for errors | |
| int val; | |
| float temperature; | |
| float humidity; | |
| void setup() | |
| { | |
| Serial.begin(9600); // open serial at 9600 bps | |
| } | |
| void loop() | |
| { | |
| // read the temperature and convert it to centigrades | |
| sendCommandSHT(temperatureCommand, dataPin, clockPin); | |
| waitForResultSHT(dataPin); | |
| val = getData16SHT(dataPin, clockPin); | |
| skipCrcSHT(dataPin, clockPin); | |
| temperature = (float)val * 0.01 - 40; | |
| Serial.print("temperature: "); | |
| Serial.print(temperature); | |
| analogWrite(analogPinTemp, temperature); //added by Frankie | |
| // read the humidity | |
| sendCommandSHT(humidityCommand, dataPin, clockPin); | |
| waitForResultSHT(dataPin); | |
| val = getData16SHT(dataPin, clockPin); | |
| skipCrcSHT(dataPin, clockPin); | |
| humidity = -4.0 + 0.0405 * val + -0.0000028 * val * val; | |
| Serial.print(" humidity: "); | |
| Serial.println(humidity); | |
| analogWrite(analogPinHumidity, humidity); //added by Frankie | |
| delay(200); // wait for 200 milliseconds for next reading | |
| } | |
| // commands for reading/sending data to a SHTx sensor | |
| // send a command to the SHTx sensor | |
| void sendCommandSHT(int command, int dataPin, int clockPin) | |
| { | |
| int ack; | |
| // transmission start | |
| pinMode(dataPin, OUTPUT); | |
| pinMode(clockPin, OUTPUT); | |
| digitalWrite(dataPin, HIGH); | |
| digitalWrite(clockPin, HIGH); | |
| digitalWrite(dataPin, LOW); | |
| digitalWrite(clockPin, LOW); | |
| digitalWrite(clockPin, HIGH); | |
| digitalWrite(dataPin, HIGH); | |
| digitalWrite(clockPin, LOW); | |
| // shift out the command (the 3 MSB are address and must be 000, the last 5 bits are the command) | |
| shiftOut(dataPin, clockPin, MSBFIRST, command); | |
| // verify we get the right ACK | |
| digitalWrite(clockPin, HIGH); | |
| pinMode(dataPin, INPUT); | |
| ack = digitalRead(dataPin); | |
| if (ack != LOW) | |
| Serial.println("ACK error 0"); | |
| digitalWrite(clockPin, LOW); | |
| ack = digitalRead(dataPin); | |
| if (ack != HIGH) | |
| Serial.println("ACK error 1"); | |
| } | |
| // wait for the SHTx answer | |
| void waitForResultSHT(int dataPin) | |
| { | |
| int ack; | |
| pinMode(dataPin, INPUT); | |
| for (int i = 0; i < 100; ++i) | |
| { | |
| delay(20); | |
| ack = digitalRead(dataPin); | |
| if (ack == LOW) | |
| break; | |
| } | |
| if (ack == HIGH) | |
| Serial.println("ACK error 2"); | |
| } | |
| // get data from the SHTx sensor | |
| int getData16SHT(int dataPin, int clockPin) | |
| { | |
| int val; | |
| // get the MSB (most significant bits) | |
| pinMode(dataPin, INPUT); | |
| pinMode(clockPin, OUTPUT); | |
| val = shiftIn(dataPin, clockPin, MSBFIRST, 8, 3); | |
| val *= 256; // this is equivalent to val << 8; | |
| // send the required ACK | |
| pinMode(dataPin, OUTPUT); | |
| digitalWrite(dataPin, HIGH); | |
| digitalWrite(dataPin, LOW); | |
| digitalWrite(clockPin, HIGH); | |
| digitalWrite(clockPin, LOW); | |
| // get the LSB (less significant bits) | |
| pinMode(dataPin, INPUT); | |
| val |= shiftIn(dataPin, clockPin, MSBFIRST, 8, 3); | |
| return val; | |
| } | |
| // skip CRC data from the SHTx sensor | |
| void skipCrcSHT(int dataPin, int clockPin) | |
| { | |
| pinMode(dataPin, OUTPUT); | |
| pinMode(clockPin, OUTPUT); | |
| digitalWrite(dataPin, HIGH); | |
| digitalWrite(clockPin, HIGH); | |
| digitalWrite(clockPin, LOW); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment