5272| 2
|
[求助] 大神帮忙看下气象站代码串口无数据 |
麻烦群里的大神帮忙看下小弟下面的气站站代码,传感器由DHT11,BMP180,PM2.5组成的 问题: 1接好传感器串口输出的数据显示传感器检测的温度 气压 都是零,请问大神代码哪里有问题 2我想上传乐联网,但是怎么也上传不到乐联上。 麻烦群里大神帮忙修正下代码,感谢。 #include <LeweiClient.h> #include <SPI.h> #include <Ethernet.h> #include <dht11.h> #include <SFE_BMP180.h> #include <Wire.h> //dht11 dht11 DHT11; #define DHT11PIN 2//DTH11的引脚 //GP2Y1010AU0F #define dustPin A0//Sharp Pin 5夏普传感器5号脚 #define ledPower 3//Sharp pin 3夏普传感器3号脚 int dustVal=0,lastDustVal=0; const int Time280=280, Time40=40, offTime=9680; float voltage=0, dustDensity = 0,Clow,Chigh; int Ilow,Ihigh,AQI; //BMP180 //SCL-A5,SDA-A4 SFE_BMP180 pressure; double baseline; //put your api key here,find it in lewei50.com->my account->account setting #define LW_USERKEY "YOUR_API_KEY_HERE" //put your gateway number here,01 as default #define LW_GATEWAY "01" //数据发送间隔 #define POST_INTERVAL (30*1000) //IPAddress ip(192,168,1, 15); //IPAddress mydns(8,8,8,8); //IPAddress gw(192,168,1,1); //IPAddress subnet(255,255,255,0); LeWeiClient *lwc; //Sharp int getDustVal(void){ int Val; // ledPower is any digital pin on the Arduino connected to Pin 3 on the sensor digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(Time280); Val=analogRead(dustPin); // read the dust value via pin 5 on the sensor delayMicroseconds(Time40); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(offTime); return Val; } //BMP180 double getP() { char status; double T,P,p0,a; // You must first get a temperature measurement to perform a pressure reading. // Start a temperature measurement: // If request is successful, the number of ms to wait is returned. // If request is unsuccessful, 0 is returned. status = pressure.startTemperature(); if (status != 0) { // Wait for the measurement to complete: delay(status); // Retrieve the completed temperature measurement: // Note that the measurement is stored in the variable T. // Use '&T' to provide the address of T to the function. // Function returns 1 if successful, 0 if failure. status = pressure.getTemperature(T); if (status != 0) { // Start a pressure measurement: // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait). // If request is successful, the number of ms to wait is returned. // If request is unsuccessful, 0 is returned. status = pressure.startPressure(3); if (status != 0) { // Wait for the measurement to complete: delay(status); // Retrieve the completed pressure measurement: // Note that the measurement is stored in the variable P. // Use '&P' to provide the address of P. // Note also that the function requires the previous temperature measurement (T). // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.) // Function returns 1 if successful, 0 if failure. status = pressure.getPressure(P,T); if (status != 0) { return P; } else Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); } void setup() { // start serial port: Serial.begin(9600); //Sharp pinMode(ledPower,OUTPUT); //BMP180 /* pressure.begin(); Serial.println("BMP180 init success"); //else { // 糟糕,气压计出问题了,多半是连线有问题 Serial.println("BMP180 init fail (disconnected?)\n\n"); while(1); // 暂停 } baseline = getP(); lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY);*/ } void loop() { if (lwc) { Serial.println("read data "); float temp_c; float humidity; double a,p; // Read values from the sensor temp_c = DHT11.temperature; humidity = DHT11.humidity; //BMP180 p = getP(); a = pressure.altitude(p,baseline); //dht11 dustVal = int(lastDustVal*0.8 + getDustVal()*0.2); lastDustVal = dustVal; voltage = dustVal*(5.0/1023); dustDensity = 0.17*voltage-0.1; // dustDensity = constrain(dustDensity, 0, 0.5004); //Serial.print(dustVal); Serial.print("\t"); //Serial.print(voltage,4); Serial.print("\t");//Serial.print( "V"); //Serial.print(dustDensity,4);Serial.print("\t");//Serial.print("mg/m^3"); if(dustDensity >=0 && dustDensity <=0.0154) { Clow=0; Chigh =0.0154;Ilow=0; Ihigh=50; } else if(dustDensity >=0.0155 && dustDensity <=0.0404) { Clow=0.0155;Chigh =0.0404;Ilow=51; Ihigh=100;} else if(dustDensity >=0.0405 && dustDensity <=0.0654) { Clow=0.0405;Chigh =0.0654;Ilow=101;Ihigh=150;} else if(dustDensity >=0.0655 && dustDensity <=0.1504) { Clow=0.0655;Chigh =0.1504;Ilow=151;Ihigh=200;} else if(dustDensity >=0.1505 && dustDensity <=0.2504) { Clow=0.1505;Chigh =0.2504;Ilow=201;Ihigh=300;} else if(dustDensity >=0.2505 && dustDensity <=0.5004) { Clow=0.2505;Chigh =0.5004;Ilow=301;Ihigh=500;} AQI = (dustDensity-Clow)*(Ihigh-Ilow)/(Chigh-Clow) + Ilow; //t1,t2.. must using the same name setting on web server. lwc->append("temp", temp_c); lwc->append("hum", humidity); lwc->append("aqi", AQI); lwc->append("high",a); //Serial.print("*** data send ***"); lwc->send(); //Grammar changed by Wei&Anonymous ;) Serial.println("*** send completed ***"); delay(POST_INTERVAL); } } |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed