070914

Dependencies:   FreescaleIAP MODSERIAL mbed monitor timer0

Fork of 17_PT1000 by Temp27

Revision:
18:939d3df56218
Parent:
17:c307f8c96ab1
Child:
19:8e4e6fe34857
--- a/main.cpp	Sat Aug 30 08:49:43 2014 +0000
+++ b/main.cpp	Sun Sep 07 12:10:34 2014 +0000
@@ -12,29 +12,34 @@
 #include "Buffer.h"
 #include "monitor.h"
 #include "ventiel.h"
+#include "MODSERIAL.h"
 
 #define CR 13
 
-#define SOLL_WERT 27.0          // Sollwert für den Fühler in der Flüssigkeit
-#define R_TEMP_MAX 40.0         // Maximaltermperatur für den Widerstand
+#define SOLL_WERT 32.0          // Sollwert für den Fühler in der Flüssigkeit
+#define R_TEMP_MAX 60.0         // Maximaltermperatur für den Widerstand
+#define R_OFFSET 0.0            // wird bei abgeschaltetert Trofpensteuerung zum Haltetemperatur addiert
 #define OFFSET_0 28330          // AD Wert für 0° Abgleich Kanal 0
 #define OFFSET_1 28560          // AD Wert für 0° Abgleich Kanal 1
 //#define OFFSET 27100          // AD Wert für 0° Abgleich Steuerung Flosrian
 #define GAIN 113                // Digit pro °C  >> 112.3 Steuerung Florian
 //#define GAIN 112.3            // Digit pro °C  >> 112.3 Steuerung Florian
 
+#define BOOL_FMT(bool_expr)  (bool_expr) ? "ein" : "aus"
+
 //------------------------------------------------------------------------------
 // Anlegen von Klassen
 
 SDFileSystem sd(PTD2, PTD3, PTC5, PTD0, "sd");  // The pinout (MOSI, MISO, SCLK, CS)
 timer0 down_timer;                              // Zeitsteuerung
 Serial pc(USBTX, USBRX);                        // tx, rx
-Serial com(PTC4, PTC3);                         
+MODSERIAL com(PTC4, PTC3); 
+//MODSERIAL com(PTC4, PTC3);                         
 Buffer <char> buf;                              // Ringbuffer für ankommende Zeichen
 // DS2482 ow(PTE0,PTE1,0x30);                   //        sda, scl, adr
 
 ventiel magnet;                                 // Klasse Ventiele anlegen
-
+char lcd_text[25];
 Timer t;                                        // Zeitmessung für Entprellen
 
 //------------------------------------------------------------------------------
@@ -96,7 +101,7 @@
 //------------------------------------------------------------------------------
 // Globale Variablen
 
-float temp1, temp_mw;
+float temp1, temp_mw, temp_r_max, temp_r_ist;
 uint16_t temp_word;
 uint8_t n, y, status, ds1820_status;
 
@@ -119,6 +124,7 @@
 
 //float offset = 0.0;
 float soll_wert = 27.0;     // Sollwert für den Temperaturfühler in der Flüssigkeit
+float korr_wert = R_OFFSET; // Korrekturwert bei abgeschalteter Heizung
 
 //------------------------------------------------------------------------------
 // Interruptroutine wird bei jedem Tropfen aufgerufen
@@ -213,7 +219,7 @@
     //------------------------------------------------------------------------------
     // RS232 Schnittstellt welche auf den CMSIS-DAP (USB Port) weitergeleitet wird
     //
-    pc.baud(115200);
+    pc.baud(57600);
     pc.attach(&rx_handler, Serial::RxIrq);
     pc.printf("\n V08 was compiled on %s  %s \n", __DATE__,__TIME__);
 
@@ -222,8 +228,8 @@
     //------------------------------------------------------------------------------
     // RS232 Schnittstellt zum Ansteuern der Magnetventile
     //
-    com.baud(9600);
-    com.printf("\n V08 was compiled on %s  %s \n", __DATE__,__TIME__);
+    com.baud(57600);
+    //com.printf("\n V08 was compiled on %s  %s \n", __DATE__,__TIME__);
         
     //------------------------------------------------------------------------------
     // Timer für die Zeitsteuerung
@@ -231,6 +237,7 @@
     down_timer.SetCountdownTimer(0,1,50);  // Timer für die LED
     down_timer.SetCountdownTimer(1,1,500); // Timer für die Tropfensteuerung
     down_timer.SetCountdownTimer(2,1,1000);// Timer für die Ausgabe der Daten
+    down_timer.SetCountdownTimer(3,1,100); // Timer für Taster
     
     r = g = b = 1;                          // RGB LED ausschalten
     
@@ -239,7 +246,7 @@
     
     cfg.read("/sd/input.cfg");
  
-     if (cfg.getValue("t_flag", &value[0], sizeof(value))) 
+    if (cfg.getValue("t_flag", &value[0], sizeof(value))) 
     {
         if (atoi(value) == 1)
         {
@@ -282,9 +289,14 @@
     if (cfg.getValue("soll", &value[0], sizeof(value))) 
     {
         soll_wert = atof(value);
-        pc.printf("\nsoll_wert = %f\n", soll_wert); 
+        pc.printf("\nsoll_wert = %f", soll_wert); 
     }
-    
+
+    if (cfg.getValue("korr", &value[0], sizeof(value))) 
+    {
+        korr_wert = atof(value);
+        pc.printf("\nkorrektur_wert = %f\n", korr_wert); 
+    }    
     //--------------------------------------------------------------------
     // Anfangswert bestimmen
     
@@ -304,6 +316,7 @@
        //-------------------------------------------
        // Prüfen ob Tropfenzahl erreicht
        
+       
        if (f_flag)
        {
            if (tropfen_anz >= drops){
@@ -359,7 +372,7 @@
        if (down_timer.GetTimerStatus(2) == 0)
        {
             down_timer.SetCountdownTimer(2,1,1000);
-            
+
             //------------------------------------------------------
             // PT1000 Kanal 1 ( Fühler in Flüssigkeit) lesen und die Temperatur berechnen
         
@@ -369,18 +382,18 @@
            temp_soll /= GAIN;
  
             //pc.printf("%d;",temp_word);                           // Rohwert ausgeben
-            pc.printf("Soll %2.2f; Soll ist %2.2f; ",soll_wert, temp_soll);                     // Temperaturwert soll Flüssigkeit   
+            pc.printf("Soll %2.2f; Soll ist %2.2f;",soll_wert, temp_soll);                     // Temperaturwert soll Flüssigkeit   
             
             //------------------------------------------------------
             // PT1000 Kanal 0 ( Fühler am Heizwiderstand ) lesen und die Temperatur berechnen       
             
             temp_word = read_mw(0);
             temp_float = (temp_word - OFFSET_0);
-            temp_float /= GAIN;  
+            temp_r_ist = temp_float / GAIN;  
             
             //pc.printf("%d;",temp_word);                           // Rohwert ausgeben
-            pc.printf("Temp-R %0.2f; ",temp_float);                     
-
+            pc.printf("Temp-R %0.2f; ",temp_r_ist);                     
+            
             // die Temperaturregelung ist nur bei aktiver Tropfensteuerung eingeschaltet
             //
             if (f_flag)
@@ -435,22 +448,19 @@
             // auf soll_wert begrenzt
             if (f_flag)
             {
-                if(temp_float > R_TEMP_MAX)
-                {
-                    regelwert = 0.0;
-                    esum = 0.0;
-                }
+                temp_r_max = R_TEMP_MAX;
             }
             else
+            {                
+                temp_r_max = soll_wert + korr_wert;
+            }                
+                
+            if(temp_float > temp_r_max)
             {
-                if(temp_float > soll_wert)
-                {
                     regelwert = 0.0;
                     esum = 0.0;
-                }               
-                
             }
-            
+ 
             //------------------------------------------------------
             // Heizwiederstand ansteuern >> 0,02 entspricht 100%
             
@@ -476,10 +486,120 @@
                 else              pc.putc('0');              
             }
 
-            pc.printf("; verbleibende Zeit %02d",down_timer.GetTimerZeit(1));
+            pc.printf("; verbleibende Zeit %02d; ",down_timer.GetTimerZeit(1));
+            
+            if(f_flag)
+            pc.printf("on;");
+            else
+            pc.printf("off;");
+            
+            pc.printf("\n");
+            
+            // LCD String zusammensetzen und ausgeben
+            for (int i = 0; i < 25; i++) lcd_text[i] = 0;
+                            //01234567890123456789
+            sprintf(lcd_text,"TR   %3.1f  /  %3.1f ",temp_r_ist,temp_r_max);
+            //sprintf(lcd_text,"erste Zeile");
+            uint8_t len = strlen(lcd_text);
+            uint8_t anz = len + 3;
+            com.printf(":AA%02x020000",anz);    //Zeile 1 Temps
+            for (int i = 0; i < len; i++)
+            {
+               com.printf("%02x",lcd_text[i]); 
+            }
+            com.printf("A5\n");
+            //wait_ms(100);
+            
+            
+            for (int i = 0; i < 25; i++) lcd_text[i] = 0;
+                            //01234567890123456789
+            sprintf(lcd_text,"TK   %3.1f  /  %3.1f ",temp_soll,soll_wert);
+            //sprintf(lcd_text,"Heizung         %s " ,BOOL_FMT(t_flag));
+            len = strlen(lcd_text);
+            anz = len + 3;
+            com.printf(":AA%02x020001",anz);    //Zeile 2 Heizung (ein/aus)
+            for (int i = 0; i < len; i++)
+            {
+               com.printf("%02x",lcd_text[i]); 
+            }
+            com.printf("A5\n");
+            //wait_ms(100);
+             
+            for (int i = 0; i < 25; i++) lcd_text[i] = 0;
+                            //01234567890123456789
+            sprintf(lcd_text,"temp. %s  flow %s ",BOOL_FMT(t_flag) ,BOOL_FMT(f_flag));
+            len = strlen(lcd_text);
+            anz = len + 3;
+            com.printf(":AA%02x020002",anz);    //Zeile 3 Tropfensteuerung (ein/aus)
+            for (int i = 0; i < len; i++)
+            {
+               com.printf("%02x",lcd_text[i]); 
+            }
+            com.printf("A5\n");
+            //wait_ms(100);
             
-            pc.printf(";\n");
+            for (int i = 0; i < 25; i++) lcd_text[i] = 0;
+                            //01234567890123456789
+            sprintf(lcd_text,"Zeit %3d Tropfen %3d" ,down_timer.GetTimerZeit(1),tropfen_anz);
+            len = strlen(lcd_text);
+            anz = len + 3;
+            com.printf(":AA%02x020003",anz);    //Zeile 4 Anz. Zeit+Tropfen
+            for (int i = 0; i < len; i++)
+            {
+               com.printf("%02x",lcd_text[i]); 
+            }
+            com.printf("A5\n");
+            //wait_ms(100);
+            
        } // end if(down_timer ...
+            
+    
+    // timer 3
+       
+
+       
+            if (com.readable()) {
+            
+            int ch = com.getc();
+            // pc.printf("\nzeichen=%c %x",ch,ch);
+            
+            switch (ch){
+                case '1': magnet.toggle (0);
+                break;
+                case '2': magnet.toggle (1);
+                break;
+                case '3': magnet.toggle (2);
+                break;
+                case '4': magnet.toggle (3);
+                break;
+                case '5': if (t_flag)
+                {
+                     t_flag = false; 
+                     pc.printf("\nHeizung durch externen Taster deaktiviert\n");
+                }    
+                else 
+                {
+                    t_flag = true;
+                    pc.printf("\nHeizung durch externen Tastet aktiviert\n");
+                }
+                break;
+                case '6': if (f_flag)
+                {
+                     f_flag = false;
+                     pc.printf("\nTropfensteuerung durch externen Taster deaktiviert\n");
+                }
+                      else
+                {     
+                       f_flag = true;
+                       pc.printf("\nTropfensteuerung durch externen Taster aktiviert\n");
+                }
+                break;
+                }
+                
+            }
+            
+       
+       
                            
     } // end while
 }