DIY Wasserkühlung - Temperatur geregelt

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Hi Klaus,

      von dir erwarte ich aber ein wenig mehr :huh: . Du weisst doch das wir uns dutzen und ordentlich grüßen.

      Klaus du bist ja auch viel am basteln und hast mir evtl. hier dafür einen Rat?
      Mit dem LCD Display und einer zweiten Seite. Habe das bis jetzt nie gebraucht.. Hier wäre es aber Klasse wenn es automatisch umschaltet auf eine zweite Seite für die Servos dann später... Will eigentlich kein Drehrad am LCD deshalb mit der Zeit umschalten und zwar automatisch.

      KampfHund schrieb:

      Wer weiß wie ich einfach ein zweites Menü am LCD anlege ohne mich mit der libary LCD menue herum zu schlagen?

      Mir würde es reichen wenn alle X Sekunden das zweite Menü aufgeht und dann nach X Sekunden wieder zum ersten geht.


      Bisher hatte keiner gefragt deshalb habe ich es nicht veröffentlicht 8)

      Hier ist der bisherige Code der Wakü.

      Habe alles separat angelegt der Übersichtlichkeit zu liebe...

      FU_Temperatur_Wasser

      Quellcode

      1. #include <Wire.h>
      2. #include <LiquidCrystal_I2C.h>
      3. LiquidCrystal_I2C lcd(0x27,20, 4);
      4. // Konstanten Zeiten
      5. const long interval = 1000; // Interval wie oft die Temperatur abgefragt wird (milliseunden)
      6. const long aktualisiereTemp = 3000; // Display Temperatur alle X Sekunden aktualisieren
      7. const long aktualisiereLogo = 6000; // Display Logo alle X Sekunden aktualisieren
      8. /////////////////////////////////////////
      9. // Konstanten Für Rücklauf (wärmer)
      10. const int abfrageZahl1 = 5; // Je mehr abfragen, desto stabiler ist das Ergebnis, dauert aber länger
      11. const int ntc1 = 14; // Pin für den 10kO NTC Wiederstand
      12. const int ntcNominal1 = 10000; // Wiederstand des NTC bei Nominaltemperatur
      13. const int tempNominal1 = 25; // Temperatur bei der der NTC den angegebenen Wiederstand hat
      14. const int bCoefficient1 = 3977; // Beta Coefficient(B25 aus Datenblatt des NTC)
      15. const int serienWiederstand1 = 18000; // Wert des Wiederstands der mit dem NTC in Serie geschalten ist
      16. ////////////////////////////////////////
      17. // Konstanten für Wasser Vorlauf ( kälter)
      18. const int abfrageZahl2 = 5; // Je mehr abfragen, desto stabiler isr das Ergebnis, dauert aber länger
      19. const int ntc2 = 15; // Pin für den 10kO NTC Wiederstand
      20. const int ntcNominal2 = 10000; // Wiederstand des NTC bei Nominaltemperatur
      21. const int tempNominal2 = 25; // Temperatur bei der der NTC den angegebenen Wiederstand hat
      22. const int bCoefficient2 = 3977; // Beta Coefficient(B25 aus Datenblatt des NTC)
      23. const int serienWiederstand2 = 18000; // Wert des Wiederstands der mit dem NTC in Serie geschalten ist
      24. /////////////////////////////////////////
      25. // Durchfluss Sensor
      26. byte durchflussInterrupt = 0; // 0 = digital pin 2
      27. byte durchflussPin = 2;
      28. // The hall-effect flow sensor outputs approximately 4.2 pulses per second per
      29. // litre/minute of flow.
      30. //Digmesa Durchflusssensor G1/4 (5,6mm). (aquatuning.at)
      31. float calibrationFactor = 4.266666666666667; //Düsendurchmesser 5,6 mm: 256 Impulse pro Liter geteilt durch 60Sekunden = 4.2
      32. volatile byte pulseCount;
      33. float flowRate;
      34. unsigned int flowMilliLitres;
      35. unsigned long totalMilliLitres;
      36. unsigned long oldTime;
      37. ////////////////////////////////////////////////
      38. // Pumpen PWM Regelung
      39. const int pumpPin = 9; // Pin für die Pumpe
      40. // Variablen Pumpe///////////////////
      41. int pumpSpeed = 0; // Variable für die Lüftergeschwindigkeit
      42. int pumpMin = 30; // Kleinster PWM Wert für den Lüfter befor er abschält
      43. int pumpOut = 1; // Variable zum pürfen ob der Lüfter aus war
      44. int tMin = 22; // Untere Grenze des Temperaturbereichs
      45. int tMax = 30; // Obere Grenze des Temperaturbereichs
      46. int tHys = 24; // pumpOut auf null setzen, ab dieser Temperatur und somit startet die Pumpe wieder.
      47. /////////////////////////////////////
      48. // Variablen Temperatur1
      49. int abfrage1[abfrageZahl1]; // Array Variable für das Mitteln der Temperatur
      50. float durchschnitt1 = 0; // Variable für das Mitteln der Temperatur
      51. float temp1; // Variable für die Berechnung der temperatur nach Steinhart
      52. unsigned long letzteMillis1 = 0; // Speichert die letzte Zeit (millis) der Temperaturabfrage
      53. /////////////////////////////////////
      54. // Variablen Temperatur2
      55. int abfrage2[abfrageZahl2]; // Array Variable für das Mitteln der Temperatur
      56. float durchschnitt2 = 0; // Variable für das Mitteln der Temperatur
      57. float temp2; // Variable für die Berechnung der temperatur nach Steinhart
      58. unsigned long letzteMillis2 = 0; // Speichert die letzte Zeit (millis) der Temperaturabfrage
      59. /////////////////////////////////////
      60. // Variable Display
      61. unsigned long letzteMillis = 0; // Speichert die letzte Zeit (millis) Für das Display
      62. void setup()
      63. {
      64. TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz PWM Für Pumpe
      65. Serial.begin(9600); // Baudrate für die Ausgabe am Serial Monitor
      66. Wire.begin();
      67. pinMode(ntc1, INPUT); // Setzt den Pin des NTC Wiederstands als Eingang
      68. pinMode(ntc2, INPUT); // Setzt den Pin des NTC Wiederstands als Eingang
      69. pinMode(durchflussPin, INPUT);
      70. digitalWrite(durchflussPin, HIGH);
      71. pinMode(pumpPin, OUTPUT); // Setzt den Pin des Lüfters als Ausgang
      72. // LCD Start //////////////////////////////////////////////////////
      73. lcd.begin();
      74. lcd.setCursor(0,0);
      75. lcd.print("Regelung von");
      76. lcd.setCursor(0,1);
      77. lcd.print("Wasserk\365hlung");
      78. lcd.setCursor(0,2);
      79. lcd.print(" &");
      80. lcd.setCursor(0,3);
      81. lcd.print("Servo\365berwachung");
      82. // Durchfluss Sensor Setup ////////////////////////////////////////
      83. pulseCount = 0;
      84. flowRate = 0.0;
      85. flowMilliLitres = 0;
      86. totalMilliLitres = 0;
      87. oldTime = 0;
      88. attachInterrupt(durchflussInterrupt, pulseCounter, FALLING);
      89. //
      90. }
      91. void loop () {
      92. Temp1();
      93. Temp2();
      94. Display();
      95. DurchflussSensor();
      96. Pumpenregelung();
      97. }
      Alles anzeigen

      Display

      Quellcode

      1. void Display()
      2. {
      3. unsigned long aktuelleMillis = millis();
      4. if(aktuelleMillis - letzteMillis >= aktualisiereTemp)
      5. {
      6. letzteMillis = aktuelleMillis; // speichert die Zeit der letzten Abfrage
      7. AnzeigeTemp(); // Startet Anzeige Temperaturen
      8. }
      9. else if(aktuelleMillis - letzteMillis >= aktualisiereLogo)
      10. {
      11. letzteMillis = aktuelleMillis; // speichert die Zeit der letzten Abfrage
      12. AnzeigeLogo(); // Startet Anzeige Logo
      13. }
      14. }
      15. void AnzeigeTemp()
      16. {
      17. lcd.clear();
      18. lcd.setCursor(0,0);
      19. lcd.print("Vorlauf: ");
      20. lcd.print(temp1,1);
      21. lcd.print("\337C");
      22. lcd.setCursor(0,1);
      23. lcd.print("R\365cklauf: ");
      24. lcd.print(temp2,1);
      25. lcd.print("\337C");
      26. lcd.setCursor(0,2);
      27. lcd.print("Durchfluss: ");
      28. lcd.print(flowRate,1);
      29. lcd.print("l/min");
      30. lcd.setCursor(0,3);
      31. lcd.print("Servo Status: OK");
      32. }
      33. void AnzeigeLogo()
      34. {
      35. lcd.clear();
      36. lcd.setCursor(0,0);
      37. lcd.print("Powerd by:");
      38. lcd.setCursor(0,1);
      39. lcd.print("Cnc aus Holz.at");
      40. lcd.setCursor(0,3);
      41. lcd.print("By KampfHund");
      42. }
      Alles anzeigen

      Durchflusssensor

      Quellcode

      1. /*
      2. Liquid flow rate sensor -DIYhacking.com Arvind Sanjeev
      3. Measure the liquid/water flow rate using this code.
      4. */
      5. void DurchflussSensor()
      6. {
      7. if((millis() - oldTime) > 1000) // Only process counters once per second
      8. {
      9. // Disable the interrupt while calculating flow rate and sending the value to
      10. // the host
      11. detachInterrupt(durchflussInterrupt);
      12. // Because this loop may not complete in exactly 1 second intervals we calculate
      13. // the number of milliseconds that have passed since the last execution and use
      14. // that to scale the output. We also apply the calibrationFactor to scale the output
      15. // based on the number of pulses per second per units of measure (litres/minute in
      16. // this case) coming from the sensor.
      17. flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
      18. // Note the time this processing pass was executed. Note that because we've
      19. // disabled interrupts the millis() function won't actually be incrementing right
      20. // at this point, but it will still return the value it was set to just before
      21. // interrupts went away.
      22. oldTime = millis();
      23. // Divide the flow rate in litres/minute by 60 to determine how many litres have
      24. // passed through the sensor in this 1 second interval, then multiply by 1000 to
      25. // convert to millilitres.
      26. flowMilliLitres = (flowRate / 60) * 1000;
      27. // Add the millilitres passed in this second to the cumulative total
      28. totalMilliLitres += flowMilliLitres;
      29. unsigned int frac;
      30. // Print the flow rate for this second in litres / minute
      31. Serial.print("Flow rate: ");
      32. Serial.print(int(flowRate)); // Print the integer part of the variable
      33. Serial.print("."); // Print the decimal point
      34. // Determine the fractional part. The 10 multiplier gives us 1 decimal place.
      35. frac = (flowRate - int(flowRate)) * 10;
      36. Serial.print(frac, DEC) ; // Print the fractional part of the variable
      37. Serial.print("L/min");
      38. // Print the number of litres flowed in this second
      39. Serial.print(" Current Liquid Flowing: "); // Output separator
      40. Serial.print(flowMilliLitres);
      41. Serial.print("mL/Sec");
      42. // Print the cumulative total of litres flowed since starting
      43. Serial.print(" Output Liquid Quantity: "); // Output separator
      44. Serial.print(totalMilliLitres);
      45. Serial.println("mL");
      46. // Reset the pulse counter so we can start incrementing again
      47. pulseCount = 0;
      48. // Enable the interrupt again now that we've finished sending output
      49. attachInterrupt(durchflussInterrupt, pulseCounter, FALLING);
      50. }
      51. }
      52. /*
      53. Insterrupt Service Routine
      54. */
      55. void pulseCounter()
      56. {
      57. // Increment the pulse counter
      58. pulseCount++;
      59. }
      Alles anzeigen

      Pumpenregelung

      Quellcode

      1. void Pumpenregelung()
      2. {
      3. // Pumpengeschwindigkeit über den Temperaturbereich einstellen
      4. // TMin->0% PWM | TMax->100% PWM
      5. pumpSpeed = map(temp1, tMin, tMax, 0, 255);
      6. //pumpSpeed = map(temp1, 20 , 30 , 0, 255);
      7. // Wenn der PWM Wert unter den pumpMin fällt, schaltet die Pumpe aus
      8. if (pumpSpeed < pumpMin)
      9. {
      10. pumpSpeed = 0;
      11. pumpOut = 1;
      12. }
      13. // Hysterese
      14. if (pumpOut == 1)
      15. {
      16. pumpSpeed = 0;
      17. }
      18. if(temp1 >= tHys)
      19. {
      20. if(pumpOut == 1)
      21. {
      22. pumpOut = 0;
      23. analogWrite(pumpPin, 255);
      24. }
      25. }
      26. // PWM Wert auf 255 begerenzen
      27. if (pumpSpeed > 255)
      28. {
      29. pumpSpeed = 255;
      30. }
      31. unsigned long aktuelleMillis1 = millis();
      32. if(aktuelleMillis1 - letzteMillis1 >= interval)
      33. {
      34. letzteMillis1 = aktuelleMillis1; // speichert die Zeit der letzten Abfrage
      35. // Pumpengeschwindigkeit über den Seriellen Monitor ausgeben
      36. Serial.print("Pumpengeschwindigkeit: ");
      37. Serial.println(pumpSpeed);
      38. analogWrite(pumpPin, pumpSpeed); // Die Pumpe mit dem PWM Wert ansteuern
      39. }
      40. //delay(500);
      41. }
      Alles anzeigen

      Temperatur 1

      Quellcode

      1. void Temp1()
      2. {
      3. // Erfasst die aktuelle Zeit für den Abfrageinterval
      4. unsigned long aktuelleMillis1 = millis();
      5. // Löst bei erreichen der Intervalzeit die Temperaturberechnung aus
      6. if(aktuelleMillis1 - letzteMillis1 >= interval)
      7. {
      8. letzteMillis1 = aktuelleMillis1; // speichert die Zeit der letzten Abfrage
      9. Temperaturberechnung1(); // Startet die Temperaturerfassungsroutine
      10. // Ausgabe an den Seriellen Monitor
      11. Serial.print("Temperatur1 ");
      12. Serial.print(temp1);
      13. Serial.println(" *C");
      14. }
      15. }
      16. void Temperaturberechnung1()
      17. {
      18. // Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
      19. for (int i=0; i < abfrageZahl1; i++)
      20. {
      21. abfrage1[i] = analogRead(ntc1);
      22. delay(10);
      23. }
      24. // Mittelt alle Abfragen
      25. durchschnitt1 = 0;
      26. for (int i=0; i < abfrageZahl1; i++)
      27. {
      28. durchschnitt1 += abfrage1[i];
      29. }
      30. durchschnitt1 /= abfrageZahl1;
      31. // Umwandlung des Wertes in Wiederstand
      32. durchschnitt1 = 1023 / durchschnitt1 - 1;
      33. durchschnitt1 = serienWiederstand1 / durchschnitt1;
      34. // Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
      35. temp1 = durchschnitt1 / ntcNominal1; // (R/Ro)
      36. temp1 = log(temp1); // ln(R/Ro)
      37. temp1 /= bCoefficient1; // 1/B * ln(R/Ro)
      38. temp1 += 1.0 / (tempNominal1 + 273.15); // + (1/To)
      39. temp1 = 1.0 / temp1; // Invertieren
      40. temp1 -= 273.15; // Umwandeln in °C
      41. }
      Alles anzeigen

      Temperatur 2

      Quellcode

      1. void Temp2()
      2. {
      3. // Erfasst die aktuelle Zeit für den Abfrageinterval
      4. unsigned long aktuelleMillis2 = millis();
      5. // Löst bei erreichen der Intervalzeit die Temperaturberechnung aus
      6. if(aktuelleMillis2 - letzteMillis2 >= interval)
      7. {
      8. letzteMillis2 = aktuelleMillis2; // speichert die Zeit der letzten Abfrage
      9. Temperaturberechnung2(); // Startet die Temperaturerfassungsroutine
      10. // Ausgabe an den Seriellen Monitor
      11. Serial.print("Temperatur2 ");
      12. Serial.print(temp2);
      13. Serial.println(" *C");
      14. }
      15. }
      16. void Temperaturberechnung2()
      17. {
      18. // Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
      19. for (int i=0; i < abfrageZahl2; i++)
      20. {
      21. abfrage2[i] = analogRead(ntc2);
      22. delay(10);
      23. }
      24. // Mittelt alle Abfragen
      25. durchschnitt2 = 0;
      26. for (int i=0; i < abfrageZahl2; i++)
      27. {
      28. durchschnitt2 += abfrage2[i];
      29. }
      30. durchschnitt2 /= abfrageZahl2;
      31. // Umwandlung des Wertes in Wiederstand
      32. durchschnitt2 = 1023 / durchschnitt2 - 1;
      33. durchschnitt2 = serienWiederstand2 / durchschnitt2;
      34. // Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
      35. temp2 = durchschnitt2 / ntcNominal2; // (R/Ro)
      36. temp2 = log(temp2); // ln(R/Ro)
      37. temp2 /= bCoefficient2; // 1/B * ln(R/Ro)
      38. temp2 += 1.0 / (tempNominal2 + 273.15); // + (1/To)
      39. temp2 = 1.0 / temp2; // Invertieren
      40. temp2 -= 273.15; // Umwandeln in °C
      41. }
      Alles anzeigen
      Die verwendete Pumpe ist von aquatuning und kann PWM.

      PS:

      Wenn ihr euch damit die Bude unter Wasser setzt etc. --> Selber Schuld
      LG Alex
      cnc-aus-holz im Facebook // Mein Youtube Kanal
    • Hallo Alex,

      sorry ich habe die Grußformel tatsächlich nicht gemacht und es tut mir leid. Ich stand grade in der Pampa in Südtirol und ich habe mich da wohl zu kurz gefasst.
      Aber zuerst recht herzlichen Dank für den Quellcode den ich mir ansehen werde.
      Ich gelobe Besserung und es war wirklich nicht meine Absicht einem OpenSource Enthusiasten auf die Füße zu treten. Als Widergutmachung trinke ich einen Roten auf Dich. Zum Wohle.

      Gruß aus dem Vinschgau

      Klaus

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von kkberg ()

    • Hallo Alex,

      ich habe mir den Quellcode geladen und bekomme Kompilierfehler und stehe etwas auf der Seife. Die einzelnen Module habe ich alle als Datei in das Verzeichnis gelegt und die werden auch mit der IDE alle gemeinsame geöffnet. Die Hauptprozedur habe ich Wasserkuehlung.ino benannt. Ich werde die einzelnen Dateien jetzt in die Hauptprozedur einfügen und dann nochmals versuchen. Zusätzlich wird auch noch "no matching function for call to 'LiquidCrystal_I2C::begin()'" Da stimmt die Anzahl der Parameter nicht. Vermutlich liegt es an der IDE-Version und da muss ich schauen was das ist. Könntest Du eventuell Dein Verzeichnis packen und als Zip anhängen.
      Ich habe hier im Urlaub leider nur eingeschränkte Möglichkeiten, möchte aber das Regenwetter nutzen und etwas dran tun.

      Vielen Dank

      Gruß Klaus


      hier die Fehlermeldungen nachdem ich alles in eine Datei gepackt hatte.

      C:\Users\Laser\OneDrive\CNC-Daten\Projekte\Servo\Wasserkuehlung\Wasserkuehlung\Wasserkuehlung.ino: In function 'void setup()':

      Wasserkuehlung:79: error: no matching function for call to 'LiquidCrystal_I2C::begin()'

      lcd.begin();

      ^
      C:\Users\Laser\OneDrive\CNC-Daten\Projekte\Servo\Wasserkuehlung\Wasserkuehlung\Wasserkuehlung.ino:79:13: note: candidate is:

      In file included from C:\Users\Laser\OneDrive\CNC-Daten\Projekte\Servo\Wasserkuehlung\Wasserkuehlung\Wasserkuehlung.ino:2:0:

      C:\Users\Laser\OneDrive\Dokumente\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t)

      void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS );

      ^
      C:\Users\Laser\OneDrive\Dokumente\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: candidate expects 3 arguments, 0 provided

      exit status 1
      no matching function for call to 'LiquidCrystal_I2C::begin()'

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von kkberg () aus folgendem Grund: nach Kompilation

    • Hallo Alex,

      ich habe die Startprozedur für mich etwas abgeändert und der Kompilierfehler ist jetzt weg.
      Wichtige Änderung war lcd.begin(); in "lcd.begin(20,4);" zu ändern .
      Es liegt m.E. an verschiedenen Versionen der Libs und der IDE.

      Gruß Klaus


      Quellcode

      1. // LCD Start //////////////////////////////////////////////////////
      2. lcd.begin(20,4);
      3. lcd.setCursor(0,0);
      4. lcd.print("Regelung von");
      5. lcd.setCursor(0,1);
      6. lcd.print("Wasserk\365hlung");
      7. lcd.setCursor(0,2);
      8. lcd.print(" &");
      9. lcd.setCursor(0,3);
      10. lcd.print("Servo\365berwachung");
      Alles anzeigen
    • Hallo Alex,

      hier noch etwas zu Menüs cohesivecomputing.co.uk/hackat…arduino-lcd-menu-library/
      Mein Vorschlag wäre das bei einem Tastendruck in eine Menüstruktur verzweigt werden kann und dort die Werte angepasst werden können. Ich kann das nicht testen, stelle es mir aber so am einfachsten vor. Wird nichts gedrückt, läuft nur die Anzeige der Werte. Habe leider keinen Arduinokoffer dabei. :)

      Gruß Klaus
    • Hallo Klaus,

      habe immer alles aktuell wenn ich was an Arduino mache.
      LCD libarys gibt es einige, kann Gut sein das du eine andere Libary hast.

      Ich lege immer Tabs an damit ich gleich von vorn herein im Haupt- Tab nur Setup Dinge habe.

      Der Loop ist ganz unten im Haupttab und die einzelnen Loops lege ich in Tabs oben in der Software.
      Deshalb habe ich alles einzeln gepostet.

      Danke für die Links. Muss mich da mal einlesen.
      Wollte es jedoch ohne Taster oder Schalter lösen. Würde ja ausreichen wenn es alle X Sekunden automatisch auf die zweite LCD Seite springt und nach X Sekunden wieder zurück.

      Irgend einer hat für LCD's eine Menü Libary erstellt, das ist mir aber zu heftig gewesen... brauche ja nicht wirklich Menüs lediglich eine automatische Umschaltung.
      LG Alex
      cnc-aus-holz im Facebook // Mein Youtube Kanal
    • Hallo Alex,

      Ich habe auch die aktuellen Versionen der Libs installiert und die neueste IDE. Da werde ich schauen was ich da rausfinde. Übergebe die Spalten und Zeilenzahl funktioniert es, ohne nicht. Es kann aber auch noch abhängig vom Board sein. Die Einstellungen werde ich heute Abend prüfen. Es kann gut sein das ich das nicht identisch mit Deinem habe.

      Gruß Klaus

      PS: welche Dateiendung vergibst Du für die Tabs? Bei meinem Versuch das so zu machen, fand der Kompiler die Prozeduren nicht. Zusammen in einem Tab kein Problem. Als wenn ich das noch nie gemacht hätte. Hirn ist völlig in Urlaubsstimmung.


      gelöst, alle Dateien in .ino umbenannt und dann spricht das Teil auch mit mir. :)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von kkberg ()

    • Hallo Alex,

      jetzt zu Deiner Frage mit dem Menu. Ich finde im Quellcode hier jetzt keins und verstehe nicht ganz was Du meinst. Soll nach einer bestimmten Zeit eine andere Anzeige mit anderen Werten gemacht werden und der vorhandene Inhalt gelöscht werden?

      Soll nur abwechselnd die Anzeige geändert werden such bitte mal nach Interval kasperkamperman.com/blog/ardui…ino-programming-interval/

      Gruß Klaus

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von kkberg ()

    • Hi Klaus,

      ich meinte damit das ich beides auf einem Arduino haben möchte. Wasserkühlung und Servo.

      5 Sekunden Bild Wasserkühlung
      5 Sekunden Bild Servo
      Schleife endlos...

      Das wäre für mich ausreichend.
      Interval klingt Gut, eh schon benutzt.
      Komme aber noch nicht dazu ;) .

      Bin jetzt erst einmal am Schaltplan zeichnen für die neue CNC Steuerung.
      LG Alex
      cnc-aus-holz im Facebook // Mein Youtube Kanal
    • Hallo Alex,

      okay, dann geht das nur über eine zeitliche Regelung und die würde ich in die Hauptschleife einbauen. Es geht sicher auch noch anders und besser zu machen, aber so könnte es aussehen. Die Funktionen für Servoalarme und DisplayServos müsste geschrieben werden und Display() in DisplayPumpe() umbenannt werden.

      Gruß Klaus

      PS: es wird bei den Intervallen nur ein Problem sein die Alarme rechtzeitig an den Notaus weiterzugeben.

      Quellcode

      1. #include <INTERVAL.h>
      2. void loop () {
      3. INTERVAL(5000UL)
      4. {
      5. //Tu was alle 5000ms
      6. Temp1();
      7. Temp2();
      8. DisplayPumpe();
      9. DurchflussSensor();
      10. Pumpenregelung();
      11. }
      12. INTERVAL(5000UL)
      13. {
      14. //Tu was alle 5000ms
      15. Servoalalarmelesen();
      16. DisplayServos();
      17. }
      18. }
      Alles anzeigen
      Dateien

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von kkberg ()