Hallo liebe Forengemeinde,
ich bin absoluter Neuling bezüglich Arduino.Da ich noch einige Sensirion SHT71 Sensoren in der Bastelkiste hatte hab ich mir einen Arduino UNO (Sintron Clone) besorgt, IDE 1.8.5 installiert und losgelegt. Die Sensirion Bibliothek von Michael Domhardt (von hier ----> https://github.com/domhardt/ArduinoLibraries/tree/master/Sensirion <----) eingebunden,den Sketch kompiliert – hochgeladen und den Serial-Monitor aufgerufen um festzustellen: Es funktioniert perfekt! Sowohl die aktuelle Temperatur als auch die relative Luftfeuchtigkeit sowie der Taupunkt werden dort angezeigt.
Hier der verwendete Example Sketch:
/*
* Example code for SHT1x or SHT7x sensors demonstrating blocking calls
* for temperature and humidity measurement in the setup routine and
* non-blocking calls in the main loop. The pin 13 LED is flashed as a
* background task while temperature and humidity measurements are made.
* In addition, the sensor may be placed in low resolution mode by
* uncommenting the status register write call in setup().
*/
#include <Sensirion.h>
const uint8_t dataPin = 2; // SHT serial data
const uint8_t sclkPin = 3; // SHT serial clock
const uint8_t ledPin = 13; // Arduino built-in LED
const uint32_t TRHSTEP = 3000UL; // Sensor query period
const uint32_t BLINKSTEP = 250UL; // LED blink period
Sensirion sht = Sensirion(dataPin, sclkPin);
uint16_t rawData;
float temperature;
float humidity;
float dewpoint;
byte shtState = 0;
byte ledState = 0;
unsigned long curMillis; // Time interval tracking
unsigned long trhMillis = 0;
unsigned long blinkMillis = 0;
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(15); // Wait at least 11 ms before first cmd
// sht.writeSR(LOW_RES); // Set sensor to low resolution
sht.measTemp(&rawData); // Maps to: sht.meas(TEMP, &rawData, BLOCK)
temperature = sht.calcTemp(rawData);
sht.measHumi(&rawData); // Maps to: sht.meas(HUMI, &rawData, BLOCK)
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
logData();
}
void loop()
{
curMillis = millis();
if (curMillis - blinkMillis >= BLINKSTEP) { // Time to toggle the LED state?
ledState ^= 1;
digitalWrite(ledPin, ledState);
blinkMillis = curMillis;
}
switch (shtState) {
case 0:
if (curMillis - trhMillis >= TRHSTEP) { // Start new temp/humi measurement?
sht.meas(TEMP, &rawData, NONBLOCK);
shtState++;
trhMillis = curMillis;
}
break;
case 1:
if (sht.measRdy()) { // Process temperature measurement?
temperature = sht.calcTemp(rawData);
sht.meas(HUMI, &rawData, NONBLOCK);
shtState++;
}
break;
case 2:
if (sht.measRdy()) { // Process humidity measurement?
humidity = sht.calcHumi(rawData, temperature);
dewpoint = sht.calcDewpoint(humidity, temperature);
shtState = 0;
logData();
}
break;
default:
Serial.println("How did I get here?");
break;
}
}
void logData() {
Serial.print("Temperature = "); Serial.print(temperature);
Serial.print(" C, Humidity = "); Serial.print(humidity);
Serial.print(" %, Dewpoint = "); Serial.print(dewpoint);
Serial.println(" C");
}
Jetzt frage ich mich wie ich ein LC-Display (20x4) mit I²C Schnittstelle als "BackPack" und dem o.g. Sketch, nach entsprechender Anpassung, zum laufen bringe. Das LC-Display läuft seperat mit den einschlägigen "Test -Sketches" Unter ....Datei/Beispiele – LiquidCristal_I²C:
"BlinkingCursor","CustomChars","HelloWorld" und "SerialDisplay" einwandfrei nachdem ich die korrekte I²C Adresse mittels "i2c_scanner" herausfand und von 0x27 auf 0x3F änderte.
Was muß ich an diesem Sketch verändern, damit ich das 20x4 LCD damit verwenden kann? Ich denke das es nicht damit getan ist nur die Ausgabe von "Serial.print" in "lcd.print" zu ändern.Geht das überhaupt?Wo fange ich an? Selbst die Literatur wie zum Beispiel der "Arduino Paxis Einstieg" von "Thomas Brühlmann" konnte mir bisher nicht wirklich weiterhelfen. (Aber das Buch ist ansonsten wirklich Hammer gut gemacht!) Gibt es einen eXemple Sketch für die Sensirion SH7x Sensoren welche die Sensordaten auf einem I²C LC-Display ausgeben?
Ich bin für jeden Tipp dankbar
Gruß Andy