Датчики и бибилиотека DHT
- Войдите на сайт для отправки комментариев
Вс, 13/05/2018 - 17:04
Помогите, проблема с библиотекой DHT, не могу считать данные из датчика,
test4:145: error: expected unqualified-id before '.' token
test4:146: error: expected primary-expression before '.' token
test4:147: error: expected primary-expression before '.' token
Помогите, мучаюсь второй день
// include the library code for LCD shield: #include <Wire.h> #include <Adafruit_MCP23017.h> #include <Adafruit_RGBLCDShield.h> // include code for temperature and humidity #include <DHT.h> //Setup Temperature and humidity #define dht_dpin 2 //chanel for temperature sensor //dht DHT; //Setup LCD Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield(); // These #defines make it easy to set the backlight color #define OFF 0x0 #define RED 0x1 #define YELLOW 0x3 #define GREEN 0x2 #define TEAL 0x6 #define BLUE 0x4 #define VIOLET 0x5 #define WHITE 0x7 //ports for input devices int const smallPM1 = 13; int const largePM1 = 12; int const smallPM2 = 5; int const largePM2 = 4; int const mq2port = A0; int const NO2port = A2; int const mq9port = A1; int const O3port = A3; int const mq9powerPort = 3; // constants for use with gas sensors float const mq2seriesResistor = 47000; float const NO2seriesResistor = 22000; float const mq9seriesResistor = 10000; float const O3seriesResistor = 22000; // variables for use in running particulate matter calculations long const sampleRate = 20; long measurementCount = 0; long smallPM1Count = 0; long largePM1Count = 0; long smallPM2Count = 0; long largePM2Count = 0; long priorSampleTime = 0; double smallPM1percentRunning; double largePM1percentRunning; double smallPM2percentRunning; double largePM2percentRunning; //variables for gas sensor calcuations float mq2resistance; float NO2resistance; float mq9resistance; float O3resistance; //variables for temperature and humidity int temperature; int humidity; //miscellaneous variables int mq9power = 300; int displayNumber = 0; void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode (smallPM1, INPUT); pinMode (largePM1, INPUT); pinMode (smallPM2, INPUT); pinMode (largePM2, INPUT); pinMode (mq2port, INPUT); pinMode (NO2port, INPUT); pinMode (mq9port, INPUT); pinMode (O3port, INPUT); pinMode (mq9power, OUTPUT); analogWrite (mq9powerPort, mq9power); lcd.setBacklight(WHITE); delay(1000); } void loop() { samplePMDetectors(); //sample particulate detectors for 2 seconds and update running Averages readResistances(); //calculateResistancesFromInputs readTemperatureAndHumidity(); //aquire temperature and humidity data takes about 25ms timestampSerial(); //print time printRunningPMDataToSerial(); //print percentages to Serial printGasDataToSerial(); //print gas sensor data to Serial printTempAndHumidityToSerial();//print temperature and humidity data Serial.println(); Serial.println(); displayLCD(); //display data on LCD } void samplePMDetectors() { for (int i = 0; i < 100; i++) { while (millis() - priorSampleTime < sampleRate) { } priorSampleTime = millis(); measurementCount += 1; if (digitalRead(smallPM1) == 0) { smallPM1Count += 1; } if (digitalRead(largePM1) == 0) { largePM1Count += 1; } if (digitalRead(smallPM2) == 0) { smallPM2Count += 1; } if (digitalRead(largePM2) == 0) { largePM2Count += 1; } } //calculate running PM percentages smallPM1percentRunning = 100.0 * smallPM1Count / measurementCount; largePM1percentRunning = 100.0 * largePM1Count / measurementCount; smallPM2percentRunning = 100.0 * smallPM2Count / measurementCount; largePM2percentRunning = 100.0 * largePM2Count / measurementCount; } void readResistances() { //read gas sensor data int mq2rawInput = analogRead(mq2port); int NO2rawInput = analogRead(NO2port); int mq9rawInput = analogRead(mq9port); int O3rawInput = analogRead(O3port); //calculate resistances mq2resistance = mq2seriesResistor * ((1023.0 / mq2rawInput) - 1.0); NO2resistance = NO2seriesResistor * ((1023.0 / NO2rawInput) - 1.0); mq9resistance = mq9seriesResistor * ((1023.0 / mq9rawInput) - 1.0); O3resistance = NO2seriesResistor * ((1023.0 / O3rawInput) - 1.0); } void readTemperatureAndHumidity() { DHT.read11(dht_dpin); humidity = (int) DHT.humidity; temperature = (int) DHT.temperature; } void timestampSerial() { Serial.print("Milliseconds since the program started: "); Serial.println(millis()); } void printRunningPMDataToSerial() { Serial.println("Particulate Matter Data"); Serial.print("Measurement Count: "); Serial.println(measurementCount); Serial.print("Small PM detector 1: "); Serial.println(smallPM1percentRunning); Serial.print("Large PM detector 1: "); Serial.println(largePM1percentRunning); Serial.print("Small PM detector 2: "); Serial.println(smallPM2percentRunning); Serial.print("Large PM detector 2: "); Serial.println(largePM2percentRunning); Serial.println(); } void printGasDataToSerial() { Serial.println("Gas Sensor Data"); Serial.print("MQ-2 Resistance: "); Serial.println(mq2resistance); Serial.print("NO2 Resistance: "); Serial.println(NO2resistance); Serial.print("MQ-9 (CO2) Resistance: "); Serial.println(mq9resistance); Serial.print("Ozone Resistance: "); Serial.println(O3resistance); Serial.println(); } void printTempAndHumidityToSerial() { Serial.println("Temperature and Humidity Data"); Serial.print("temperature = "); Serial.print(temperature); Serial.print("C "); Serial.print("Current humidity = "); Serial.print(humidity); Serial.println("% "); Serial.println(); } void displayLCD() { lcd.clear(); lcd.setCursor(0, 0); switch (displayNumber) { case 0: lcd.print("MeasurementTime"); lcd.setCursor(0, 1); lcd.print(millis() / 1000); break; case 1: lcd.print("SmallPM#1:"); lcd.setCursor(0, 1); lcd.print(smallPM1percentRunning); lcd.print(" %"); break; case 3: lcd.print("LargePM#1:"); lcd.setCursor(0, 1); lcd.print(largePM1percentRunning); lcd.print(" %"); break; case 2: lcd.print("SmallPM#2:"); lcd.setCursor(0, 1); lcd.print(smallPM2percentRunning); lcd.print(" %"); break; case 4: lcd.print("LargePM#2:"); lcd.setCursor(0, 1); lcd.print(largePM2percentRunning); lcd.print(" %"); break; case 5: lcd.print("MQ2 Resistance:"); lcd.setCursor(0, 1); lcd.print((long) mq2resistance); lcd.print(" Ohm"); break; case 6: lcd.print("MQ9 Resistance:"); lcd.setCursor(0, 1); lcd.print((long) mq9resistance); lcd.print(" Ohm"); break; case 7: lcd.print("NO2 Resistance:"); lcd.setCursor(0, 1); lcd.print((long) NO2resistance); lcd.print(" Ohm"); break; case 8: lcd.print("O3 Resistance:"); lcd.setCursor(0, 1); lcd.print((long) O3resistance); lcd.print(" Ohm"); break; case 9: lcd.print("Temperature"); lcd.setCursor(0, 1); lcd.print(temperature); lcd.print("C"); break; case 10: lcd.print("Humidity"); lcd.setCursor(0, 1); lcd.print(temperature); lcd.print("%"); break; default: displayNumber = -1; lcd.clear(); } displayNumber += 1; }
Откуда взялась переменная DHT на 143-145 и что она должна делать?
она хранит занчения
float humidity = DHT.humidity;
float temperature = DHT.temperature;
А взялась она откуда? Каждая используемая переменная должна быть объявлена. В какой строчке объявлена переменная DHT?
DHT - функция для считывания данных
Переменнные humidity и temperature объявлены
DHT - функция для считывания данных
Переменнные humidity и temperature объявлены
Бред пишете. Срочно читать буквари по Си. Иначе то, что Вы раскомментируете 11-ю строку Вам ненадолго поможет.
DHT - функция для считывания данных
DHT - это не функция, это класс и Вы обязаны объявить экземпляр этого класса. Вы попытались сделать это в строке 11, но неправильно, компилятор ругался, а поскольку отлаживаетесь Вы методом тыка, Вы её просто закомментировали.
Для начала, объявите нормально экземпляр класса DHT (хотя бы поменяйте местами DHT и dht в строке 11! Только этого недостаточно, ему ещё надо пин и тип датчика задать.
Переменнные humidity и temperature объявлены
А чего Вы их тогда к DHT прицепили через точку? В таком контексте они не объявлены. Их просто нет в классе DHT.
Когда Вы объявите экземпляр класса DHT, то будете читать влажность и температуру методами readHumidity и readTemperature.