Hallo! Ich habe folgende zwei Codes:
#include <Keypad.h>
const byte ROWS = 1; // nur 1 Zeile im Tastenfeld
const byte COLS = 4; // 4 Spalten im Tastenfeld
char keys[ROWS][COLS] = {
{ '1', '2', '3', '4' }
}; // Die einzigen verfügbaren Tasten auf dem Tastenfeld
byte rowPins[ROWS] = { A0 }; // Der Pin, an dem die Zeile angeschlossen ist
byte colPins[COLS] = { 2, 3, 4, 5 }; // Die Pins, an denen die Spalten angeschlossen sind
int fanPin = 9; // Der Pin, an dem das PWM-Signal ausgegeben wird
int pwmValue = 0; // Der aktuelle PWM-Wert
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600); // Serielle Kommunikation starten
pinMode(fanPin, OUTPUT); // Pin für den Lüfter als Ausgang definieren
analogWrite(fanPin, pwmValue); // PWM-Wert auf 0 setzen
}
void loop() {
char key = keypad.getKey(); // Tastendruck abfragen
if (key != NO_KEY) { // Wenn eine Taste gedrückt wurde
if (key == '1') { // Wenn Taste 1 gedrückt wurde
Serial.println("Aus"); // Text "Aus" auf dem seriellen Monitor ausgeben
pwmValue = 0; // PWM-Wert auf 0 setzen
}
if (key == '2') { // Wenn Taste 2 gedrückt wurde
Serial.println("Stufe: 1"); // Text "Stufe: 1" auf dem seriellen Monitor ausgeben
pwmValue = 35; // PWM-Wert auf 25% setzen (64 von 255)
}
if (key == '3') { // Wenn Taste 3 gedrückt wurde
Serial.println("Stufe: 2"); // Text "Stufe: 2" auf dem seriellen Monitor ausgeben
pwmValue = 160; // PWM-Wert auf 50% setzen (128 von 255)
}
if (key == '4') { // Wenn Taste 4 gedrückt wurde
Serial.println("Stufe: 3"); // Text "Stufe: 3" auf dem seriellen Monitor ausgeben
pwmValue = 255; // PWM-Wert auf 75% setzen (192 von 255)
}
analogWrite(fanPin, pwmValue); // PWM-Wert auf den Pin ausgeben
Serial.println(pwmValue);
}
}
Dieser Code ermöglicht die Lüftersteuerung mit einem 4x1 Tastenfeld's. Der zweite Code ermöglicht eine Temperatur Messung mit dem DS18B20 Sensor:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 12 // Datenleitung des DS18B20 an digitalen Pin 12 anschließen
OneWire oneWire(ONE_WIRE_BUS); // Eine Instanz von OneWire erstellen
DallasTemperature sensors(&oneWire); // Eine Instanz von DallasTemperature erstellen
void setup() {
Serial.begin(9600); // Serielle Kommunikation starten
sensors.begin(); // DallasTemperature initialisieren
}
void loop() {
sensors.requestTemperatures(); // Temperaturmessung starten
float temperatureC = sensors.getTempCByIndex(0); // Temperatur in Celsius abrufen
Serial.print("Temperatur in Celsius: ");
Serial.println(temperatureC); // Temperatur ausgeben
delay(1000); // Eine Sekunde warten, bevor die nächste Messung durchgeführt wird
}
Ich möchte nun diese beiden Codes zusammenfügen, sodass die Temperatur dauerhaft gemessen wird bis eben einer der Taster gedrückt wird und sofort seine Stufe einstellt.
Wie kann man das umsetzen?
Evntl. Interrupts ?
Danke im vorraus!
MfG
Nils