Hallo
Ich bin relativ neu im Arduinogeschehen. Nun habe ich mir einen Code für eine Druckmessung und Temperaturmessung zusammen gestellt. Das ganze wird auf ein SSD1306 ausgegeben.
Mir wird aber irgendwie die Temperatur nicht angezeigt (NTC Tempsensor)
Im seriellen Print funzt er einwandfrei.
Vielen Dank für eure Hilfe !
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Thermistor.h>
#include <NTC_Thermistor.h>
int Sensor_Pin = A0;
#define Referenzwiderstand 47000 // Widerstandswert des Widerstandes der mit dem NTC in Reihe geschaltet wurde.
#define Nominalwiderstand 38000 // Widerstand des NTC bei Normaltemperatur
#define Nominaltemperatur 30 // Temperatur, bei der der NTC den angegebenen Wiederstand hat
#define BWert 3800 // Beta Koeffizient(zu finden im Datenblatt des NTC)
Thermistor* thermistor;
#define SCREEN_WIDTH 128 // display width, in pixels
#define SCREEN_HEIGHT 64 // display height, in pixels
#define OLED_RESET 4
#define SCREEN_ADDRESS 0x3C // OLED
const int sensorPin = A1;
const float alpha = 0.95; // Low Pass Filter alpha (0 - 1 )
const float aRef = 4.6; // analog reference
float filteredVal = 512.0; // midway starting point
float sensorVal;
float voltage;
float psiVal;
float celsius;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
while (!Serial);
thermistor = new NTC_Thermistor(Sensor_Pin, Referenzwiderstand, Nominalwiderstand, Nominaltemperatur, BWert);
//analogReference(EXTERNAL);
//analogReference(INTERNAL);
//SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
while (1); // Don't proceed, wait forever
}
display.clearDisplay();
display.display();
}
void loop() {
const double celsius = thermistor->readCelsius(); //Temperatur auslesen
Serial.print("Temperatur: "); // Ausgabe der Temperatur am Seriellen Monitor - hier nur der Text "Temperatur; "
Serial.print(celsius, 0); // An dieser Stelle wird der Temperaturwert an den Seriellen Monitor gesendet.
Serial.println(" °C"); // Hinter dem Temperaturwert wird am Seriellen Monitor nun noch die Einheit "C" angezeigt.
sensorVal = (float)analogRead(sensorPin); // Read pressure sensor val (A1)
filteredVal = (alpha * filteredVal) + ((1 - alpha) * sensorVal);// Low Pass Filter
voltage = (filteredVal / 1024.0) * aRef; // calculate voltage
psiVal = (voltage - 0.4784) / 14.504; // x=(y-b)/m
Serial.print ("raw_adc "); Serial.print (sensorVal, 0);
Serial.print(", filtered_adc "); Serial.println (filteredVal, 0);
//Serial.print(", voltage ");
//Serial.println(voltage, 2);
updateOLED ();
delay(200);
}
void updateOLED () {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(5, 2);
display.print("BENZINDRUCK ");
display.setCursor(5, 40);
display.print("OILTEMP");
display.setCursor(80, 2);
display.print(voltage, 2);
display.print(" V");
display.setTextSize(3);
display.setCursor(30, 15);
display.print(psiVal, 0);
display.print("BAR");
display.setTextSize(3);
display.setCursor(50, 40);
display.print(celsius, 0);
display.print("C");
display.display();
}