Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 19_Taster_a by
Diff: main.cpp
- Revision:
- 18:939d3df56218
- Parent:
- 17:c307f8c96ab1
- Child:
- 19:f3c41bbc809a
diff -r c307f8c96ab1 -r 939d3df56218 main.cpp
--- 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
}
