Created
December 26, 2020 22:19
-
-
Save beothorn/d62ada134b78c137c32953071d01a6ed to your computer and use it in GitHub Desktop.
Arduino reads data from ky015 sensor and writes to serial in json format
This file contains 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 DHpin = 8; // input/output pin | |
byte dat[5]; | |
byte read_data() | |
{ | |
byte i = 0; | |
byte result = 0; | |
for (i = 0; i < 8; i++) { | |
while (digitalRead(DHpin) == LOW); // wait 50us | |
delayMicroseconds(30); //The duration of the high level is judged to determine whether the data is '0' or '1' | |
if (digitalRead(DHpin) == HIGH) result |= (1 << (8 - i)); //High in the former, low in the post | |
while (digitalRead(DHpin) == HIGH);//Data '1', waiting for the next bit of reception | |
} | |
return result; | |
} | |
void start_test() | |
{ | |
digitalWrite(DHpin, LOW); //Pull down the bus to send the start signal | |
delay(30); //The delay is greater than 18 ms so that DHT 11 can detect the start signal | |
digitalWrite(DHpin, HIGH); | |
delayMicroseconds(40); //Wait for DHT11 to respond | |
pinMode(DHpin, INPUT); | |
while(digitalRead(DHpin) == HIGH) | |
delayMicroseconds(80); //The DHT11 responds by pulling the bus low for 80us; | |
if(digitalRead(DHpin) == LOW); | |
delayMicroseconds(80); //DHT11 pulled up after the bus 80us to start sending data; | |
for(int i = 0; i < 5; i++) dat[i] = read_data();//Receiving temperature and humidity data, check bits are not considered; | |
pinMode(DHpin, OUTPUT); | |
digitalWrite(DHpin, HIGH); //After the completion of a release of data bus, waiting for the host to start the next signal | |
} | |
void setup() | |
{ | |
Serial.begin(9600); | |
pinMode(DHpin, OUTPUT); | |
} | |
void loop() | |
{ | |
start_test(); | |
byte checksum = dat[0] + dat[1] + dat[2] + dat[3]; | |
if (dat[4] == checksum) { | |
Serial.print("{\"h\":"); | |
Serial.print(dat[0], DEC); //Displays the integer bits of humidity; | |
Serial.print('.'); | |
Serial.print(dat[1], DEC); //Displays the decimal places of the humidity; | |
Serial.print(", \"t\":"); | |
Serial.print(dat[2], DEC); //Displays the integer bits of temperature; | |
Serial.print('.'); | |
Serial.print(dat[3], DEC); //Displays the decimal places of the temperature; | |
Serial.print("}\n"); | |
} | |
delay(4000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment