RGB je nach Temperatur blinken lassen

Hier werden Fragen zu LED-Grundlagen beantwortet...

Moderator: T.Hoffmann

Antworten
Melinamell
Mini-User
Beiträge: 1
Registriert: Do, 04.05.17, 10:06

Do, 04.05.17, 10:11

Hallo zusammen,
ich studiere Wirtschaftsingenieurwesen und bin nun im dritten Semester.
In der Uni habe ich ein Semester lang Elektrotechnik gehabt, jedoch kein Programmieren.
Nun ist unser Dozent auf die Idee gekommen, wir könnten uns das Programmieren bis zum nächsten Semester ja mal eben selber beibringen und eine Wetterstation bauen...
Meine Bauteile sind folgende:
- Node MCU
- DHT 22
- DS18B20
- MPL3115A2
- RGB LED
Die Hardware ist so weit fertig und ich konnte mit der Arduino IDE (ja, viele finden die schlecht, mir bleibt derzeit aber nichts anderes über als vollkommen ahnungslose) bereits die Sensoren einzeln und mittlerweile auch gemeinsam auslesen. So weit so gut. Auch die Datenübertragung bzw. der Datenabruf über eine IP-Adresse klappt mittlerweile.
Meine letzte Aufgabe ist nun:
Die RGB-LED soll unter 18°C blau, über 22°C rot und dazwischen grün blinken. (Bezogen auf den DS18b20)
Mein Code ist grob ohne die anderen Sensoren folgender (kann sein, dass ich noch was beim Löschen vergessen habe):
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
void setup() {
Serial.begin(115200);
sensors.getAddress(insideThermometer, 0);
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
Wire.begin(); sensors.begin();
}
void loop() {
delay(500);
sensors.requestTemperatures();
float tempC = sensors.getTempC(insideThermometer);
Serial.print("Temperature(DS1820): ");
Serial.print(tempC);
Serial.println("*C ");
}
die RGB-LED zum blinken bekomme ich damit:
int redPin = D5, greenPin = D6, bluePin = D8;
void setup() {
pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT);
}
void loop() {
digitalWrite(redPin, LOW); delay(500);
digitalWrite(redPin, HIGH); delay(500);
digitalWrite(greenPin, LOW); delay(500);
digitalWrite(greenPin, HIGH); delay(500);
digitalWrite(bluePin, LOW); delay(500);
digitalWrite(bluePin, HIGH); delay(500);
}
Ich habe mein Glück versucht, die RGB-LED je nach Temperatur blinken zu lassen, aber es nicht geschafft.. Ich hoffe sehr, dass ihr mir helfen könnt!
Ich danke euch bereits im Voraus und bitte auch noch einmal zu bedenken, dass ich eine absolute Anfängerin bin. Also bitte Verständnis dafür zeigen :)
Liebe Grüße,
Melina
K Mader
Mega-User
Mega-User
Beiträge: 253
Registriert: Mo, 03.02.14, 09:23

Do, 04.05.17, 14:11

Hallo Melina,

An sich hast du ja schon das Meiste erledigt, was du zu tun hast ist nicht mehr viel. :)

Bitte nächstes mal den Code-BB-Tag verwenden, damit dein Text etwas übersichtlicher bleibt und die Einrückungen nicht zerstört werden.

Was zu tun ist:
  • Beide Setup-Funktionen zu einer zusammenfügen
  • In der Hauptschleife (Loop) den Temperaturwert abfragen und mittels if-Abfragen die LEDs blinken lassen.
    Alternativ zum if könntest du auch switch verwenden, das ist dann reine Geschmacksache.

Code: Alles auswählen

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
int redPin = D5, greenPin = D6, bluePin = D8; //Übernommen aus der LED-Steuerung

void setup() 
{
	//Temperatur-Sensor + Serielle Schnittstelle
	Serial.begin(115200);
	sensors.getAddress(insideThermometer, 0);
	sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
	Wire.begin(); 
	sensors.begin();

	//LED-Ausgänge
	pinMode(redPin, OUTPUT); 
	pinMode(greenPin, OUTPUT); 
	pinMode(bluePin, OUTPUT);
}
void loop() 
{
	//Hier der Teil der Temperatursensoren
	//delay(500); - ist nicht weiter nötig, da beim Blinken ein Delay von 2x500ms gegeben ist.
	sensors.requestTemperatures();
	float tempC = sensors.getTempC(insideThermometer);
	Serial.print("Temperature(DS1820): ");
	Serial.print(tempC);
	Serial.println("*C ");
	
	//LEDs je nach Temperatur aufblinken lassen
	if(tempC < 18) //Wenn die Temperatur unter 18°C liegt blinke einmal blau
	{
		digitalWrite(bluePin, LOW); delay(500);
		digitalWrite(bluePin, HIGH); delay(500);
	}
	else if(tempC > 22) //Wenn die Temperatur unter 22 °C liegt blinke einmal rot
	{
		digitalWrite(redPin, LOW); delay(500);
		digitalWrite(redPin, HIGH); delay(500);
	}
	else //Ansonsten blinke einmal grün
	{
		digitalWrite(greenPin, LOW); delay(500);
		digitalWrite(greenPin, HIGH); delay(500);
	}
}
Ich hoffe das hilft dir weiter.

Viele Grüße
K Mader
Antworten