Espressomaschine


Guten Abend,
freut mich das ich hier sein darf um mein Projekt voran zu bringen und mehr über Arduino und die Programmiersprache zu lernen. Im Anhang ist ein Projekt einer PID Temperaturreglung mit Ampel Temperaturüberwachung enthalten. Die beiden Schalter für Temperatur 1 und Temperatur 2 vorgesehen. Die Schalter müssen für Stufe 2 beide aktiviert werden. Dabei komme ich schon zum Problem. Wenn Schalter 1 eingeschaltet wird flackert die LED HEAT (gelb, rechts) und hat nicht konstant 3 Volt.
Ich weiß der Complier wird einige fehler ausspucken aber das Projekt ist auf dem Steckbrett vor mir und funktioniert. Lediglich das flackern bekomme ich nicht weg. Wenn jemand Zeit hat und es auf Tinkercad o.ä. nachbauen kann wäre es wohl am Sinnvollsten.

Vielen Dank für eure Zeit

Grüße

CODE

int SW95 = 7;
int SW130 = 6;
int green = 5;
int yellow = 4;
int red = 3;
int HEAT =  2;
int buttonState1 = 0;
int buttonState2 = 0;
int TMP36 = A0; 
int sensorwert;
int temperatur = 0; 
int t=500; //

void setup() {
  pinMode(HEAT, OUTPUT);
  pinMode(SW95, INPUT_PULLUP);
  pinMode(SW130, INPUT_PULLUP);
  pinMode (green, OUTPUT);
  pinMode (yellow, OUTPUT);
  pinMode (red, OUTPUT);
  Serial.begin(9600);
}

void loop()
	{
  	sensorwert=analogRead(TMP36); 
	temperatur= map(sensorwert, 0, 410, -50, 150); 
	delay(t); 
	Serial.print(temperatur); 
	Serial.println(" Grad Celsius"); 
	
  	buttonState1 = digitalRead(SW95); 
    buttonState2 = digitalRead(SW130); 
  	digitalWrite(green, HIGH == temperatur<=22);
  	digitalWrite(yellow, HIGH == temperatur>=23&&temperatur<=25); 
  	digitalWrite(red, HIGH == temperatur>=26); 	
  	if
    (buttonState1 == LOW&&temperatur<=96)
    {
    digitalWrite(HEAT, HIGH);
    } 
  	else
    {
    digitalWrite(HEAT, LOW);
    }
    if
    (buttonState1 == LOW&&buttonState2 ==LOW&&temperatur<=123)
    {
    digitalWrite(HEAT, HIGH);
    } 
  	else
    {
    digitalWrite(HEAT, LOW);
    }
  	}

Dein Flackern wird u.a. durch dein delay() hervor gerufen.
Das solltest du entfernen und evtl. durch eine Funktion mit millis() aufbauen.
Sieh dir dazu das Beispiel BlinkWithoutDelay in der IDE an.

1 Like

schau mal

https://www.mikrocontroller.net/topic/547538

da hat jemand ein ähnliches Problem.

Heißer Tipp: Schließt euch zusammen, bündelt eure Energien und arbeitet gemeinsam an einer Lösung!

4 Likes

Wenn er hier dann genau so beratungsresistent ist, wie dort, bringt das auch nichts.

Gruß Tommy

Du hast recht das ist die Lösung...ne funktioniert immer noch nicht

Gruß

Was ist die Lösung ?
Was funktioniert nicht ?
Und deine Änderung ist geheim ?

Hallo HotSystems,

danke für die schnelle Rückmeldung. Ich habe deinen Rat befolgt und es mit einem millis() anstatt delay() versucht. Die HEAT Diode flackert dann zwar nicht mehr, sendet aber kein vollen 3 Volt bzw. leuchtet nur schwach. Ich bin Anfänger und lerne gerne dazu wenn es konstruktive Kritik gibt. Mein letzter Post war nicht an dich gerichtet.

Hier ein Link mit Video: WeTransfer - Send Large Files & Share Photos Online - Up to 2GB Free
Zwar in diesem Fall mit micros() aber leider der selbe Effekt

Gruß

Hmm was sagt der Compiler?
Ja es ist "nur" Warnung, aber trotzdem lesen, verstehen, anpassen. Ich wurde das teil umändern :wink:

Hallo fony,
ich gebe zu das sieht wirr aus und ist nur eine Warnung. Das sagt mein Complier auch. Aber es funktioniert. Und das witzige oder wie auch immer ist, dass wenn ich die drei Zeilen mit "//" deaktiviere flackert die besagte LED noch immer... alles leider schon veruscht. Ich werde es nochmal versuchen zu überarbeiten und zu vereinfachen und bis ich es nicht gelöst habe aus dem Sketch nehmen.

hier sieht man deutlich dass du laufend einen Pin ein und wieder ausschaltest:

/*
https://forum.arduino.cc/t/espressomaschine/1065198/10

to be deleted 02/2023

*/

int SW95 = 7;
int SW130 = 6;
int green = 5;
int yellow = 4;
int red = 3;
int HEAT =  2;
int buttonState1 = 0;
int buttonState2 = 0;
int TMP36 = A0;
int sensorwert;
int temperatur = 0;
int t = 500; //

void setup() {
  pinMode(HEAT, OUTPUT);
  pinMode(SW95, INPUT_PULLUP);
  pinMode(SW130, INPUT_PULLUP);
  pinMode (green, OUTPUT);
  pinMode (yellow, OUTPUT);
  pinMode (red, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  sensorwert = analogRead(TMP36);
  temperatur = map(sensorwert, 0, 410, -50, 150);
  delay(t);
  Serial.print(temperatur);
  Serial.println(" Grad Celsius");

  buttonState1 = digitalRead(SW95);
  buttonState2 = digitalRead(SW130);
  digitalWrite(green, HIGH == temperatur <= 22);
  digitalWrite(yellow, HIGH == temperatur >= 23 && temperatur <= 25);
  digitalWrite(red, HIGH == temperatur >= 26);
  if
  (buttonState1 == LOW && temperatur <= 96)
  {
    Serial.println(F("D40"));
    digitalWrite(HEAT, HIGH);
  }
  else
  {
    Serial.println(F("D45"));
    digitalWrite(HEAT, LOW);
  }
  if
  (buttonState1 == LOW && buttonState2 == LOW && temperatur <= 123)
  {
    Serial.println(F("D51"));
    digitalWrite(HEAT, HIGH);
  }
  else
  {
    Serial.println(F("D55"));
    digitalWrite(HEAT, LOW);
  }
}

Wie kommst du darauf das ich das nicht verdient hätte?

Hast Du Dich mal über Cross-/Multiposting informiert?

Gruß Tommy

[Ironie on]
Nebenan hat er doch schon seinen Account gelöscht, somit kein Crossposting mehr duckundweg
[Ironie off]

:roll_eyes: :roll_eyes: :roll_eyes:

int SW95 = 7;
int SW130 = 6;
int green = 5;
int yellow = 4;
int red = 3;
int HEAT =  2;
int buttonState1 = 0;
int buttonState2 = 0;
int TMP36 = A0; 
int sensorwert;
int temperatur = 0; 
int t=500; //

void setup() {
  pinMode(HEAT, OUTPUT);
  pinMode(SW95, INPUT_PULLUP);
  pinMode(SW130, INPUT_PULLUP);
  pinMode (green, OUTPUT);
  pinMode (yellow, OUTPUT);
  pinMode (red, OUTPUT);
  Serial.begin(9600);
}

void loop()
	{
  	sensorwert=analogRead(TMP36); 
	temperatur= map(sensorwert, 0, 410, -50, 150); 
	micros(); 
	Serial.print(temperatur); 
	Serial.println(" Grad Celsius"); 
	
  	buttonState1 = digitalRead(SW95); 
    buttonState2 = digitalRead(SW130); 
  	digitalWrite(green, HIGH == temperatur<=22);
  	digitalWrite(yellow, HIGH == temperatur>=23&&temperatur<=25); 
  	digitalWrite(red, HIGH == temperatur>=26); 	
  	if
    (buttonState1 == LOW&&temperatur<=96)
    {
    digitalWrite(HEAT, HIGH);
    } 
  	else
    {
    digitalWrite(HEAT, LOW);
    }
    if
    (buttonState1 == LOW&&buttonState2 ==LOW&&temperatur<=123)
    {
    digitalWrite(HEAT, HIGH);
    } 
  	else
    {
    //digitalWrite(HEAT, LOW);
    }
  	}

Na ist doch toll, dass es jetzt funktioniert.

Glaubts das? Ich nicht, im Sketch hat sich nichts verändert :wink:
Upss doch eine Änderung:

//digitalWrite(HEAT, LOW);

Nöö, aber der TO glaubt es, zumindest schreibt er es.
Also, meinen Glückwunsch an @anon66405139 .

Der TO verträgt keine Kritik, deshalb geht er dann lieber. Das war auch schon nebenan so.

Gruß Tommy

Dabei ist Kritik so wichtig.
Meist lernt man daraus.....wenn man will. :wink: