alex_95
November 17, 2021, 2:30pm
1
Hallo zusammen
Ich möchte mit dem Arduino Uno und Thermoelementen Typ K Temperaturmessungen durchführen und auf einem 16x2 LCD-Bildschirm ausgeben.
Die Temperaturen kann ich mir schon bereits anzeigen lassen.
Bei bestimmten Temperaturbereichen kann ich auch LEDs ein/ausschalten.
Ich möchte nun mit einem Taster (oder auch zwei) das Programm Starten und auch wieder Stoppen können. Hat jemand eine Idee wie ich dies realisieren kann?
Reicht es, die Ausgaben auf dem Bildschirm ein/aus zu schalten?
Sonst brauchst Du ein Programm, das immer die Taster abfragt, und das dann den Rest ausführt oder auch nicht.
alex_95
November 17, 2021, 2:35pm
3
Ich würde gerne das gesamte Programm Ein/Ausschalten.
Dann zeig doch mal, wie den Sketch jetzt aussieht.
Poste den bitte in Code-Tags.
alex_95
November 17, 2021, 2:41pm
5
@HotSystems Wie poste ich den in Code-Tags ? (bin neu hier...)
In der IDE rechte Maustaste auf den Sketch und für Forum kopieren klicken.
Danach hier einfügen.
alex_95
November 17, 2021, 2:46pm
7
@HotSystems werde ich gleich mal machen. (ca. 16.20Uhr)
Hab gerade noch keinen Zugriff aufs Programm...
combie
November 17, 2021, 3:00pm
10
Aber nur so bekommt man das gesamte Arduino Programm aus.
Ansonsten scheinst du das Wort "Programm" und/oder "gesamt", mit einer für mich, neuen Bedeutung versehen zu haben....
Was ist für dich ein "Programm"?
Was bedeutet für dich "gesamt"?
Das ist eine falsche Denkweise. Du hast hier keinen Computer wo man Programme started und beendet. Das Programm läuft immer. Es macht nur entweder etwas oder nichts
alex_95
November 17, 2021, 3:31pm
12
#include <max6675.h> // Initialisierung der MAX6675 Bibliothek
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Initialisierung der LiquidCrystal I²C Bibliothek
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int LEDred1_PIN = 13;
int LEDgruen1_PIN = 12;
int LEDred2_PIN = 9;
int LEDgruen2_PIN = 2;
// Pinbelegung der Thermoelemente
int thermoDO = 4; //orange
int thermoCLK = 6; //grün
int thermoCS1 = 5; //gelb
int thermoCS2 = 10; //gelb
MAX6675 thermocouple1(thermoCLK, thermoCS1, thermoDO);
MAX6675 thermocouple2(thermoCLK, thermoCS2, thermoDO);
void setup()
{
Serial.begin(9600);
pinMode(LEDred1_PIN, OUTPUT);
pinMode(LEDgruen1_PIN, OUTPUT);
pinMode(LEDred2_PIN, OUTPUT);
pinMode(LEDgruen2_PIN, OUTPUT);
lcd.init();
lcd.backlight();
//delay(500);
}
void loop()
{
//Bildschirmausgabe Thermoelement1
lcd.setCursor(0, 0);
lcd.print("Temp1 =");
lcd.setCursor(8, 0);
lcd.print(thermocouple1.readCelsius());
lcd.setCursor(13, 0);
lcd.print((char)223);
lcd.setCursor(14, 0);
lcd.print("C");
//Bildschirmausgabe Thermoelement2
lcd.setCursor(0, 1);
lcd.print("Temp2 =");
lcd.setCursor(8, 1);
lcd.print(thermocouple2.readCelsius());
lcd.setCursor(13, 1);
lcd.print((char)223);
lcd.setCursor(14, 1);
lcd.print("C");
if((thermocouple1.readCelsius() >= 30.00) & (thermocouple1.readCelsius()<= 38)) //Wenn die Temperatur zwischen 30°C und 38 °C liegt, schalte Pin 12 (grün), sonst Pin 13 (rot)
{
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
else
{
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
}
if((thermocouple2.readCelsius() >= 28.00) & (thermocouple2.readCelsius()<= 35)) //Wenn die Temperatur zwischen 28°C und 35 °C liegt, schalte Pin 9 (grün), sonst Pin 2 (rot)
{
digitalWrite(9, HIGH);
digitalWrite(2, LOW);
}
else
{
digitalWrite(9, LOW);
digitalWrite(2, HIGH);
}
// Ausgabe auf dem Seriellen Monitor
Serial.print("C1 = ");
Serial.println(thermocouple1.readCelsius());
//Serial.print("C2 = ");
Serial.println(thermocouple2.readCelsius());
delay(500);
}
combie
November 17, 2021, 3:47pm
13
alex_95:
&
Du meinst sicher &&
, oder?
PS:
Für diese Temperaturbereiche sind Thermoelemente eigentlich nicht vorgesehen/ideal.
alex_95
November 17, 2021, 3:51pm
14
Ist momentan nur zum Testen aufm Schreibtisch...
Plumps
November 17, 2021, 3:58pm
15
Ich verstehe noch nicht, was genau angehalten/beendet werden soll.
Was stört an dem Stromversorgung trennen und wieder herstellen, wie von combie vorgeschlagen?
Wenn du nur bestimmte Teile des Codes über Taster steuern willst, lagere diesen Teil in eine Funktion aus, und führe diese nur aus, nach dem wie du die/den Taster abgefragt hast.
alex_95
November 17, 2021, 4:02pm
16
Plumps:
Wenn du nur bestimmte Teile des Codes über Taster steuern willst, lagere diesen Teil in eine Funktion aus, und führe diese nur aus, nach dem wie du die/den Taster abgefragt hast.
Sagen wir ich will den Code aus dem Loop per Taste ein bzw. aus schalten, kann ich dann den Code in eine andere Funktion auslagern und somit im Loop dann neu abfragen? Verstehst du was ich meine ?
Hier mal ein einfaches Beispiel mit deinem Sketch und einem Schalter/Kippschalter.
#include <max6675.h> // Initialisierung der MAX6675 Bibliothek
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Initialisierung der LiquidCrystal I²C Bibliothek
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int LEDred1_PIN = 13;
int LEDgruen1_PIN = 12;
int LEDred2_PIN = 9;
int LEDgruen2_PIN = 2;
byte pushButton = 3;
// Pinbelegung der Thermoelemente
int thermoDO = 4; //orange
int thermoCLK = 6; //grün
int thermoCS1 = 5; //gelb
int thermoCS2 = 10; //gelb
MAX6675 thermocouple1(thermoCLK, thermoCS1, thermoDO);
MAX6675 thermocouple2(thermoCLK, thermoCS2, thermoDO);
void setup() {
Serial.begin(9600);
pinMode(LEDred1_PIN, OUTPUT);
pinMode(LEDgruen1_PIN, OUTPUT);
pinMode(LEDred2_PIN, OUTPUT);
pinMode(LEDgruen2_PIN, OUTPUT);
lcd.init();
lcd.backlight();
pinMode(pushButton, INPUT_PULLUP);
}
void loop()
{
int buttonState = digitalRead(pushButton); // Schalter gegen GND schalten schalten ein
if (!buttonState)
{
meinSketch();
}
}
void meinSketch()
{
//Bildschirmausgabe Thermoelement1
lcd.setCursor(0, 0);
lcd.print("Temp1 =");
lcd.setCursor(8, 0);
lcd.print(thermocouple1.readCelsius());
lcd.setCursor(13, 0);
lcd.print((char)223);
lcd.setCursor(14, 0);
lcd.print("C");
//Bildschirmausgabe Thermoelement2
lcd.setCursor(0, 1);
lcd.print("Temp2 =");
lcd.setCursor(8, 1);
lcd.print(thermocouple2.readCelsius());
lcd.setCursor(13, 1);
lcd.print((char)223);
lcd.setCursor(14, 1);
lcd.print("C");
if ((thermocouple1.readCelsius() >= 30.00) & (thermocouple1.readCelsius() <= 38)) //Wenn die Temperatur zwischen 30°C und 38 °C liegt, schalte Pin 12 (grün), sonst Pin 13 (rot)
{
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
else
{
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
}
if ((thermocouple2.readCelsius() >= 28.00) & (thermocouple2.readCelsius() <= 35)) //Wenn die Temperatur zwischen 28°C und 35 °C liegt, schalte Pin 9 (grün), sonst Pin 2 (rot)
{
digitalWrite(9, HIGH);
digitalWrite(2, LOW);
}
else
{
digitalWrite(9, LOW);
digitalWrite(2, HIGH);
}
// Ausgabe auf dem Seriellen Monitor
Serial.print("C1 = ");
Serial.println(thermocouple1.readCelsius());
//Serial.print("C2 = ");
Serial.println(thermocouple2.readCelsius());
delay(500);
}
alex_95
November 17, 2021, 4:32pm
19
Hab es mal ausprobiert, wenn man den Taster gedrückt hält läuft der Sketch. Wenn ich den Taster allerdings loslasse bleiben die LEDs an...
Ich hatte ja auch geschrieben, es ist (ein einfacher Sketch) für einen Schalter.
Und wenn die Leds aus müssen, musst du die in der if-Abfrage ausschalten.