Monitor für das Tasterprogramm

Dependents:   19_Taster_BSW_oo 19_Taster_a

Fork of monitor by Temp27

Committer:
Sven3010
Date:
Sun Sep 07 12:08:09 2014 +0000
Revision:
7:f5bfddb84d63
Parent:
6:e5f5e56ffc50
Child:
8:99a94e782c8a
070914;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rs27 0:f0fbbfdca478 1
rs27 0:f0fbbfdca478 2 #include <stdarg.h>
rs27 0:f0fbbfdca478 3 #include <ctype.h>
rs27 0:f0fbbfdca478 4 #include "monitor.h"
rs27 1:19313470f629 5 #include "ConfigFile.h"
rs27 1:19313470f629 6 #include "SDFileSystem.h"
rs27 1:19313470f629 7 #include "FATDirHandle.h"
rs27 6:e5f5e56ffc50 8 #include "ventiel.h"
rs27 0:f0fbbfdca478 9
rs27 1:19313470f629 10 extern SDFileSystem sd; // definiert in main
rs27 1:19313470f629 11 extern Serial pc; // definiert in main
rs27 2:e330478fb0b6 12 extern Serial com; // definiert in main
rs27 6:e5f5e56ffc50 13 extern ventiel magnet; // definiert in main
rs27 1:19313470f629 14 extern Buffer <char> buf; // definiert in main
rs27 1:19313470f629 15 extern ConfigFile cfg; // definiert in main
rs27 1:19313470f629 16 extern char value[BUFSIZ]; // definiert in main
rs27 2:e330478fb0b6 17 extern float soll_wert; // definiert in main
Sven3010 7:f5bfddb84d63 18 extern float korr_wert; // definiert in main
rs27 2:e330478fb0b6 19 extern bool t_flag; // definiert in main
rs27 2:e330478fb0b6 20 extern bool f_flag; // definiert in main
rs27 2:e330478fb0b6 21 extern int drops; // definiert in main
rs27 4:83dbae473d1f 22 extern int tropfperiode; // definiert in main
rs27 1:19313470f629 23
Sven3010 7:f5bfddb84d63 24 #define COMMAND_MAX 15
rs27 1:19313470f629 25 #define COMMAND_LEN 7
rs27 0:f0fbbfdca478 26
Sven3010 7:f5bfddb84d63 27 const char command[COMMAND_MAX][COMMAND_LEN] = {"CYCLE","DATE","DEL","DIR","DROPS","DUMP","FILL","GO","HELP","KORR","LIST","SET","SOLL","STOPP","TIME"};
rs27 1:19313470f629 28
rs27 1:19313470f629 29 char buffer[100];
rs27 1:19313470f629 30
rs27 1:19313470f629 31 // globale Variablen
rs27 1:19313470f629 32
rs27 1:19313470f629 33 char com_line[COM_LINE_LEN]; // Aktuelle Eingabezeile
rs27 1:19313470f629 34 uint8_t ComLinePtr, ComLineTop; // Cursor Position und Zeilenlänge
rs27 1:19313470f629 35
rs27 1:19313470f629 36 uint8_t cr_flag;
rs27 1:19313470f629 37
rs27 1:19313470f629 38 // uint16_t status[8];
rs27 0:f0fbbfdca478 39
rs27 0:f0fbbfdca478 40 //-----------------------------------------------------------------------------
rs27 1:19313470f629 41 // initialisierung
rs27 0:f0fbbfdca478 42
rs27 1:19313470f629 43 void mon_init(void)
rs27 0:f0fbbfdca478 44 {
rs27 1:19313470f629 45
rs27 0:f0fbbfdca478 46 uint8_t i;
rs27 0:f0fbbfdca478 47
rs27 0:f0fbbfdca478 48 for (i = 0; i < COM_LINE_LEN; com_line[i++] = 0);
rs27 0:f0fbbfdca478 49 ComLinePtr = ComLineTop = 0;
rs27 0:f0fbbfdca478 50 cr_flag = false;
rs27 0:f0fbbfdca478 51
rs27 0:f0fbbfdca478 52 // 0 Kanal ist daktiv
rs27 0:f0fbbfdca478 53 // 1 Rohdaten ausgeben
rs27 0:f0fbbfdca478 54 // 2 Temperaturwert in Float Darstellung
rs27 0:f0fbbfdca478 55
rs27 1:19313470f629 56 /*
rs27 0:f0fbbfdca478 57 status[0] = 2; // Temperaturwerte ausgeben
rs27 0:f0fbbfdca478 58 status[1] = 0;
rs27 0:f0fbbfdca478 59 status[2] = 0;
rs27 0:f0fbbfdca478 60 status[3] = 0;
rs27 0:f0fbbfdca478 61 status[4] = 0;
rs27 0:f0fbbfdca478 62 status[5] = 0;
rs27 0:f0fbbfdca478 63 status[6] = 0;
rs27 0:f0fbbfdca478 64 status[7] = 0;
rs27 1:19313470f629 65 */
rs27 0:f0fbbfdca478 66 }
rs27 0:f0fbbfdca478 67
rs27 0:f0fbbfdca478 68 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 69 // destructor
rs27 0:f0fbbfdca478 70
rs27 1:19313470f629 71 void parser (void)
rs27 0:f0fbbfdca478 72 {
rs27 0:f0fbbfdca478 73 uint8_t i, ch, tch, top, bottom, len;
rs27 0:f0fbbfdca478 74 int8_t res;
rs27 0:f0fbbfdca478 75
rs27 0:f0fbbfdca478 76 // Zuerst wird der erste Buchstabe aus dem Eingabestring mit den ersten
rs27 0:f0fbbfdca478 77 // Buchstaben aus der Befehlstabelle verglichen
rs27 0:f0fbbfdca478 78
rs27 0:f0fbbfdca478 79 bottom = 0; // untere Suchgrenze
rs27 0:f0fbbfdca478 80 top = COMMAND_MAX; // obere Suchgerenze
rs27 0:f0fbbfdca478 81 ch = com_line[0]; // hole erstes Suchzeichen
rs27 0:f0fbbfdca478 82
rs27 0:f0fbbfdca478 83 do
rs27 0:f0fbbfdca478 84 {
rs27 0:f0fbbfdca478 85 i = (top + bottom) >> 1; // suche in der Mitte des Feldes beginnen
rs27 0:f0fbbfdca478 86 tch = command [i][0]; // Vergleichszeichen laden
rs27 0:f0fbbfdca478 87 if (tch == ch) break; // Zeichen gefunden
rs27 0:f0fbbfdca478 88 if (tch > ch) top = i; // nach unten suchen
rs27 0:f0fbbfdca478 89 else bottom = i; // nach oben suchen
rs27 0:f0fbbfdca478 90 if (bottom != 0 && top == bottom + 1) break; // kein Buchstabe gef.
rs27 0:f0fbbfdca478 91
rs27 0:f0fbbfdca478 92 } while (i > 0 && i < COMMAND_MAX - 1);
rs27 0:f0fbbfdca478 93
rs27 0:f0fbbfdca478 94 if (tch != ch)
rs27 0:f0fbbfdca478 95 {
rs27 0:f0fbbfdca478 96 pc.printf("\nParser Kommando nicht gefunden\n");
rs27 0:f0fbbfdca478 97 return; // Kommando nicht gefunden wurde
rs27 0:f0fbbfdca478 98 }
rs27 0:f0fbbfdca478 99
rs27 0:f0fbbfdca478 100 // das erst Wort soll von den Übergabeparametern isoliert werden
rs27 0:f0fbbfdca478 101
rs27 0:f0fbbfdca478 102 for (i = 0; com_line[i] != ' ' && com_line[i] != 0; i++);
rs27 0:f0fbbfdca478 103 len = i;
rs27 0:f0fbbfdca478 104
rs27 0:f0fbbfdca478 105
rs27 0:f0fbbfdca478 106 if (i == 0) return;
rs27 0:f0fbbfdca478 107
rs27 0:f0fbbfdca478 108 // die Übergabparameter ermitteln und in als Indexzeiger in
rs27 0:f0fbbfdca478 109 // 'ComLinePtr' abspeichern
rs27 0:f0fbbfdca478 110
rs27 0:f0fbbfdca478 111 for ( ; com_line[i] == ' ' && com_line[i] != 0; i++);
rs27 0:f0fbbfdca478 112 ComLinePtr = i;
rs27 0:f0fbbfdca478 113
rs27 0:f0fbbfdca478 114 // die binäre Suche nach den restlichen Zeichen wird hier fortgesetzt
rs27 0:f0fbbfdca478 115
rs27 0:f0fbbfdca478 116 do
rs27 0:f0fbbfdca478 117 {
rs27 0:f0fbbfdca478 118 i = (top + bottom) >> 1; // berechnen des Suchplatzes
rs27 0:f0fbbfdca478 119 //printf_P (PSTR("\n\rVergleich 1 com_line = [%s] und Länge = [%d]"),com_line,len);
rs27 0:f0fbbfdca478 120 //strcpy_P (temp, &command[i][0]);
rs27 0:f0fbbfdca478 121 //printf_P (PSTR("\n\rVergleich 2 command[i] = [%s] und Index = [%d]"),temp,i);
rs27 0:f0fbbfdca478 122 res = strncmp(com_line, &command[i][0], len);
rs27 0:f0fbbfdca478 123 //printf_P (PSTR("\n\rVergleich 3 res = [%d]"),res);
rs27 0:f0fbbfdca478 124 if (res == 0) break; // Zeichen gefunden
rs27 0:f0fbbfdca478 125 if (res > 0)
rs27 0:f0fbbfdca478 126 bottom = i; // nach unten suchen
rs27 0:f0fbbfdca478 127 else
rs27 0:f0fbbfdca478 128 top = i; // nach oben suchen
rs27 0:f0fbbfdca478 129 if (bottom != 0 && top == bottom + 1) break;
rs27 0:f0fbbfdca478 130
rs27 0:f0fbbfdca478 131 } while (i > 0 && i < COMMAND_MAX - 1);
rs27 0:f0fbbfdca478 132
rs27 0:f0fbbfdca478 133
rs27 0:f0fbbfdca478 134 if (res)
rs27 0:f0fbbfdca478 135 {
rs27 0:f0fbbfdca478 136 pc.printf("\nParser Kommando nicht gefunden.\n");
rs27 0:f0fbbfdca478 137 }
rs27 0:f0fbbfdca478 138 else
rs27 0:f0fbbfdca478 139 {
rs27 0:f0fbbfdca478 140 pc.printf("\nAufruf von Funktion %d",i);
rs27 0:f0fbbfdca478 141
rs27 0:f0fbbfdca478 142 switch(i) // Programmaufruf
rs27 0:f0fbbfdca478 143 {
rs27 4:83dbae473d1f 144 case 0: cycle(); break;
rs27 4:83dbae473d1f 145 case 1: date(); break;
rs27 4:83dbae473d1f 146 case 2: del(); break;
rs27 4:83dbae473d1f 147 case 3: dir(); break;
rs27 4:83dbae473d1f 148 case 4: func_drops(); break;
rs27 4:83dbae473d1f 149 case 5: dump(); break;
rs27 4:83dbae473d1f 150 case 6: fill(); break;
rs27 4:83dbae473d1f 151 case 7: go(); break;
rs27 4:83dbae473d1f 152 case 8: help(); break;
Sven3010 7:f5bfddb84d63 153 case 9: korr(); break;
Sven3010 7:f5bfddb84d63 154 case 10: list(); break;
Sven3010 7:f5bfddb84d63 155 case 11: set(); break;
Sven3010 7:f5bfddb84d63 156 case 12: soll(); break;
Sven3010 7:f5bfddb84d63 157 case 13: stop(); break;
Sven3010 7:f5bfddb84d63 158 case 14: time(); break;
rs27 0:f0fbbfdca478 159 }
rs27 0:f0fbbfdca478 160 }
rs27 0:f0fbbfdca478 161 }
rs27 0:f0fbbfdca478 162
rs27 0:f0fbbfdca478 163
rs27 0:f0fbbfdca478 164
rs27 0:f0fbbfdca478 165 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 166 // eine Zeile aus dem Eingangsbuffer lesen
rs27 0:f0fbbfdca478 167
rs27 1:19313470f629 168 void get_line(void)
rs27 0:f0fbbfdca478 169 {
rs27 0:f0fbbfdca478 170 char ch;
rs27 0:f0fbbfdca478 171 uint8_t i;
rs27 0:f0fbbfdca478 172
rs27 0:f0fbbfdca478 173 get_ch();
rs27 0:f0fbbfdca478 174 if (cr_flag) // Neue Eingabezeile
rs27 0:f0fbbfdca478 175 {
rs27 0:f0fbbfdca478 176 if (com_line[0] != 0)
rs27 0:f0fbbfdca478 177 {
rs27 0:f0fbbfdca478 178 // uart_puts(com_line); // zum Testen => später wird der parcer aufgerufen
rs27 0:f0fbbfdca478 179 // Zeichenkette in Großbuchstaben umwandeln
rs27 0:f0fbbfdca478 180
rs27 0:f0fbbfdca478 181 // printf_P (PSTR("\n monitor "));
rs27 0:f0fbbfdca478 182 for (i = 0; com_line[i] != 0; i++)
rs27 0:f0fbbfdca478 183 {
rs27 0:f0fbbfdca478 184 ch = com_line[i];
rs27 0:f0fbbfdca478 185 ch = toupper(ch); // Nur Großbuchstaben
rs27 0:f0fbbfdca478 186 com_line[i] = ch;
rs27 0:f0fbbfdca478 187 // pc.printf(("\n[%02x] %c"),ch,ch);
rs27 0:f0fbbfdca478 188 if (ch == ' ') i = COM_LINE_LEN;
rs27 0:f0fbbfdca478 189 }
rs27 0:f0fbbfdca478 190 // pc.printf(("\n"));
rs27 0:f0fbbfdca478 191 parser(); // Parcer wird aufgerufen
rs27 0:f0fbbfdca478 192 }
rs27 0:f0fbbfdca478 193
rs27 0:f0fbbfdca478 194 for (i=0; i < COM_LINE_LEN; com_line[i++] = 0);
rs27 0:f0fbbfdca478 195 ComLinePtr = ComLineTop = 0;
rs27 0:f0fbbfdca478 196 cr_flag = 0;
rs27 0:f0fbbfdca478 197 }
rs27 0:f0fbbfdca478 198 }
rs27 0:f0fbbfdca478 199
rs27 0:f0fbbfdca478 200 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 201 // eine Zeichen aus dem Eingangsbuffer lesen
rs27 0:f0fbbfdca478 202
rs27 1:19313470f629 203 void get_ch (void)
rs27 0:f0fbbfdca478 204 {
rs27 0:f0fbbfdca478 205 char ch;
rs27 0:f0fbbfdca478 206
rs27 0:f0fbbfdca478 207 if (!buf.available()) return; // kein Zeichen vorhanden
rs27 0:f0fbbfdca478 208
rs27 0:f0fbbfdca478 209 ch = buf.get(); // hole das Zeichen
rs27 0:f0fbbfdca478 210 // printf("mon_line: %c %02x\n",ch,ch); // nur zum Test
rs27 0:f0fbbfdca478 211
rs27 0:f0fbbfdca478 212 switch(ch)
rs27 0:f0fbbfdca478 213 {
rs27 0:f0fbbfdca478 214 case '\r': // CARRIAGE RETURN
rs27 0:f0fbbfdca478 215 cr_flag = true;
rs27 0:f0fbbfdca478 216 break;
rs27 0:f0fbbfdca478 217
rs27 0:f0fbbfdca478 218 case '\n': // LF empfangen
rs27 0:f0fbbfdca478 219 cr_flag = true;
rs27 0:f0fbbfdca478 220 break;
rs27 0:f0fbbfdca478 221
rs27 0:f0fbbfdca478 222 default: // Normales Zeichen
rs27 0:f0fbbfdca478 223 if (~iscntrl(ch))
rs27 0:f0fbbfdca478 224 {
rs27 0:f0fbbfdca478 225 com_line[ComLinePtr] = ch; // Zeichen einfuegen
rs27 0:f0fbbfdca478 226 ComLinePtr++;
rs27 0:f0fbbfdca478 227 }
rs27 0:f0fbbfdca478 228 break;
rs27 0:f0fbbfdca478 229
rs27 0:f0fbbfdca478 230 } // Ende SWITCH
rs27 0:f0fbbfdca478 231
rs27 0:f0fbbfdca478 232 if (ComLinePtr >= 80) cr_flag = 1; // Zeilenüberlauf ?
rs27 0:f0fbbfdca478 233
rs27 0:f0fbbfdca478 234 }
rs27 0:f0fbbfdca478 235
rs27 0:f0fbbfdca478 236 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 237 // monitor Aufruf
rs27 0:f0fbbfdca478 238
rs27 1:19313470f629 239 void date(void)
rs27 0:f0fbbfdca478 240 {
rs27 0:f0fbbfdca478 241 pc.printf("\nin date");
rs27 0:f0fbbfdca478 242 }
rs27 0:f0fbbfdca478 243
rs27 0:f0fbbfdca478 244 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 245 // monitor Aufruf
rs27 0:f0fbbfdca478 246
rs27 1:19313470f629 247 void dump(void)
rs27 0:f0fbbfdca478 248 {
rs27 0:f0fbbfdca478 249 pc.printf("\nin dump");
rs27 0:f0fbbfdca478 250 }
rs27 0:f0fbbfdca478 251
rs27 0:f0fbbfdca478 252 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 253 // monitor Aufruf
rs27 0:f0fbbfdca478 254
rs27 1:19313470f629 255 void help(void)
rs27 0:f0fbbfdca478 256 {
rs27 0:f0fbbfdca478 257 pc.printf("\n -- help ------------------------");
rs27 2:e330478fb0b6 258 pc.printf("\n go [?,f,F,t,Tl] aktivieren der Heizung oder der Tropfen");
rs27 2:e330478fb0b6 259 pc.printf("\n stop [?,f,F,t,Tl] deaktivieren der Heizung oder der Tropfen");
rs27 0:f0fbbfdca478 260 pc.printf("\n set index [val] Sensor auswaehlen");
rs27 2:e330478fb0b6 261 pc.printf("\n soll[val] Sollwertvorgabe fuer den Temperaturfuehler");
Sven3010 7:f5bfddb84d63 262 pc.printf("\n korr[val] Korrekturwert fuer den Temperaturfuehler");
rs27 4:83dbae473d1f 263 pc.printf("\n cycle [val] Zeiteinheit fuer die Messung der Tropfen");
rs27 2:e330478fb0b6 264 pc.printf("\n drops [val] Anzahl der Tropfen pro Zeiteinheit");
rs27 0:f0fbbfdca478 265 pc.printf("\n");
rs27 1:19313470f629 266 pc.printf("\n -- files ------------------------");
rs27 1:19313470f629 267 pc.printf("\n dir >> Dateien anzeigen");
rs27 1:19313470f629 268 pc.printf("\n list name >> den Inhalte einer Datei anzeigen");
rs27 1:19313470f629 269 pc.printf("\n del name >> eine Datei loeschen");
rs27 1:19313470f629 270 pc.printf("\n fill name [zeilen] >> eine Datei anlegen und fuellen");
rs27 1:19313470f629 271 pc.printf("\n");
rs27 0:f0fbbfdca478 272 }
rs27 0:f0fbbfdca478 273
rs27 0:f0fbbfdca478 274 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 275 // monitor Aufruf
rs27 0:f0fbbfdca478 276
rs27 1:19313470f629 277 void set(void)
rs27 0:f0fbbfdca478 278 {
rs27 1:19313470f629 279
rs27 1:19313470f629 280 int n;
rs27 1:19313470f629 281 char name[20], wert[20];
rs27 0:f0fbbfdca478 282
rs27 1:19313470f629 283 n = sscanf(&com_line[ComLinePtr],"%s %s",name,wert);
rs27 0:f0fbbfdca478 284
rs27 0:f0fbbfdca478 285 switch (n)
rs27 0:f0fbbfdca478 286 {
rs27 1:19313470f629 287 case -1: pc.printf("\n list config file");
rs27 1:19313470f629 288
rs27 1:19313470f629 289 cfg.read("/sd/input.cfg");
rs27 1:19313470f629 290
rs27 0:f0fbbfdca478 291 pc.printf("\n Index >> Sonsor 0 bis 7");
rs27 0:f0fbbfdca478 292 pc.printf("\n wert >> 0 = inaktiv, 1 = Rohwerte, 2 = errechneter Wert");
rs27 0:f0fbbfdca478 293 break;
rs27 0:f0fbbfdca478 294
rs27 1:19313470f629 295 case 1: pc.printf("\n list config value");
rs27 1:19313470f629 296
rs27 1:19313470f629 297 cfg.read("/sd/input.cfg");
rs27 1:19313470f629 298
rs27 1:19313470f629 299 if (cfg.getValue(name, &value[0], sizeof(value)))
rs27 1:19313470f629 300 {
rs27 1:19313470f629 301 pc.printf("\n'%s'='%s'", name, value);
rs27 1:19313470f629 302 }
rs27 0:f0fbbfdca478 303 break;
rs27 0:f0fbbfdca478 304
rs27 1:19313470f629 305 case 2: pc.printf("\n'%s' = '%s'",name,wert);
rs27 1:19313470f629 306
rs27 1:19313470f629 307 cfg.setValue(name, wert);
rs27 1:19313470f629 308 cfg.write("/sd/input.cfg");
rs27 1:19313470f629 309
rs27 0:f0fbbfdca478 310 break;
rs27 0:f0fbbfdca478 311 } // end switch
Sven3010 3:254f7ffb9b32 312 pc.printf("\n");
rs27 0:f0fbbfdca478 313 }
rs27 0:f0fbbfdca478 314
rs27 0:f0fbbfdca478 315 //-----------------------------------------------------------------------------
rs27 2:e330478fb0b6 316 // monitor Aufruf soll
rs27 2:e330478fb0b6 317 // mit diesem Befehl wird der Sollwert für den Temperaturfühler vorgegeben
rs27 2:e330478fb0b6 318
rs27 2:e330478fb0b6 319 void soll(void)
rs27 2:e330478fb0b6 320 {
rs27 2:e330478fb0b6 321
rs27 2:e330478fb0b6 322 int n;
rs27 2:e330478fb0b6 323 char wert[20];
rs27 2:e330478fb0b6 324
rs27 2:e330478fb0b6 325 n = sscanf(&com_line[ComLinePtr],"%s",wert);
rs27 2:e330478fb0b6 326
rs27 2:e330478fb0b6 327 switch (n)
rs27 2:e330478fb0b6 328 {
rs27 2:e330478fb0b6 329 case -1: pc.printf("\nSollwert = %f",soll_wert);
rs27 2:e330478fb0b6 330 break;
rs27 2:e330478fb0b6 331
rs27 2:e330478fb0b6 332 case 1:
rs27 2:e330478fb0b6 333
rs27 2:e330478fb0b6 334 cfg.setValue("soll", wert);
rs27 2:e330478fb0b6 335 cfg.write("/sd/input.cfg");
rs27 2:e330478fb0b6 336
rs27 2:e330478fb0b6 337 soll_wert = atof(wert);
rs27 2:e330478fb0b6 338
rs27 2:e330478fb0b6 339 pc.printf("\nneuer Sollwert = %f",soll_wert);
rs27 2:e330478fb0b6 340
rs27 2:e330478fb0b6 341 break;
rs27 2:e330478fb0b6 342
rs27 2:e330478fb0b6 343 } // end switch
Sven3010 3:254f7ffb9b32 344 pc.printf("\n");
rs27 2:e330478fb0b6 345 }
rs27 2:e330478fb0b6 346
rs27 4:83dbae473d1f 347 //-----------------------------------------------------------------------------
Sven3010 7:f5bfddb84d63 348 // monitor Aufruf korr
Sven3010 7:f5bfddb84d63 349 // mit diesem Befehl wird der Sollwert für den Temperaturfühler vorgegeben
Sven3010 7:f5bfddb84d63 350
Sven3010 7:f5bfddb84d63 351 void korr(void)
Sven3010 7:f5bfddb84d63 352 {
Sven3010 7:f5bfddb84d63 353
Sven3010 7:f5bfddb84d63 354 int n;
Sven3010 7:f5bfddb84d63 355 char wert[20];
Sven3010 7:f5bfddb84d63 356
Sven3010 7:f5bfddb84d63 357 n = sscanf(&com_line[ComLinePtr],"%s",wert);
Sven3010 7:f5bfddb84d63 358
Sven3010 7:f5bfddb84d63 359 switch (n)
Sven3010 7:f5bfddb84d63 360 {
Sven3010 7:f5bfddb84d63 361 case -1: pc.printf("\nKorrekturwert = %f",korr_wert);
Sven3010 7:f5bfddb84d63 362 break;
Sven3010 7:f5bfddb84d63 363
Sven3010 7:f5bfddb84d63 364 case 1:
Sven3010 7:f5bfddb84d63 365
Sven3010 7:f5bfddb84d63 366 cfg.setValue("korr", wert);
Sven3010 7:f5bfddb84d63 367 cfg.write("/sd/input.cfg");
Sven3010 7:f5bfddb84d63 368
Sven3010 7:f5bfddb84d63 369 korr_wert = atof(wert);
Sven3010 7:f5bfddb84d63 370
Sven3010 7:f5bfddb84d63 371 pc.printf("\nneuer Korrekturwert = %f",korr_wert);
Sven3010 7:f5bfddb84d63 372
Sven3010 7:f5bfddb84d63 373 break;
Sven3010 7:f5bfddb84d63 374
Sven3010 7:f5bfddb84d63 375 } // end switch
Sven3010 7:f5bfddb84d63 376 pc.printf("\n");
Sven3010 7:f5bfddb84d63 377 }
Sven3010 7:f5bfddb84d63 378
Sven3010 7:f5bfddb84d63 379 //-----------------------------------------------------------------------------
rs27 4:83dbae473d1f 380 // monitor Aufruf cycle
rs27 4:83dbae473d1f 381 // mit diesem Befehl wird die Zeit in Sekunden vorgegeben, in der die Tropfenzahl
rs27 4:83dbae473d1f 382 // ausgewertet wird
rs27 4:83dbae473d1f 383
rs27 4:83dbae473d1f 384 void cycle(void)
rs27 4:83dbae473d1f 385 {
rs27 4:83dbae473d1f 386 int n;
rs27 4:83dbae473d1f 387 char wert[20];
rs27 4:83dbae473d1f 388
rs27 4:83dbae473d1f 389 n = sscanf(&com_line[ComLinePtr],"%s",wert);
rs27 4:83dbae473d1f 390
rs27 4:83dbae473d1f 391 switch (n)
rs27 4:83dbae473d1f 392 {
rs27 4:83dbae473d1f 393 case -1: pc.printf("\nZeit der Messung = %d Sekunden",tropfperiode);
rs27 4:83dbae473d1f 394 break;
rs27 4:83dbae473d1f 395
rs27 4:83dbae473d1f 396 case 1:
rs27 4:83dbae473d1f 397
rs27 4:83dbae473d1f 398 cfg.setValue("cycle", wert);
rs27 4:83dbae473d1f 399 cfg.write("/sd/input.cfg");
rs27 4:83dbae473d1f 400
rs27 4:83dbae473d1f 401 tropfperiode = atoi(wert);
rs27 4:83dbae473d1f 402
rs27 4:83dbae473d1f 403 pc.printf("\nneue Zeit der Messung = %d Sekunden",tropfperiode);
rs27 4:83dbae473d1f 404
rs27 4:83dbae473d1f 405 break;
rs27 4:83dbae473d1f 406
rs27 4:83dbae473d1f 407 } // end switch
rs27 4:83dbae473d1f 408
rs27 4:83dbae473d1f 409 pc.printf("\n");
rs27 4:83dbae473d1f 410 }
rs27 4:83dbae473d1f 411
rs27 2:e330478fb0b6 412
rs27 2:e330478fb0b6 413 //-----------------------------------------------------------------------------
rs27 2:e330478fb0b6 414 // monitor Aufruf drops
rs27 2:e330478fb0b6 415 // mit diesem Befehl wird die Anzahl der Tropfen pro Zeiteinheit vorgegeben
rs27 2:e330478fb0b6 416
rs27 2:e330478fb0b6 417 void func_drops(void)
rs27 2:e330478fb0b6 418 {
rs27 2:e330478fb0b6 419
rs27 2:e330478fb0b6 420 int n;
rs27 2:e330478fb0b6 421 char wert[20];
rs27 2:e330478fb0b6 422
rs27 2:e330478fb0b6 423 n = sscanf(&com_line[ComLinePtr],"%s",wert);
rs27 2:e330478fb0b6 424
rs27 2:e330478fb0b6 425 switch (n)
rs27 2:e330478fb0b6 426 {
rs27 2:e330478fb0b6 427 case -1: pc.printf("\nAnzahl Tropfen = %d",drops);
rs27 2:e330478fb0b6 428 break;
rs27 2:e330478fb0b6 429
rs27 2:e330478fb0b6 430 case 1:
rs27 2:e330478fb0b6 431 cfg.setValue("drops", wert);
rs27 2:e330478fb0b6 432 cfg.write("/sd/input.cfg");
rs27 2:e330478fb0b6 433
rs27 2:e330478fb0b6 434 drops = atoi(wert);
rs27 2:e330478fb0b6 435
rs27 2:e330478fb0b6 436 pc.printf("\nneue Anzahl der Tropfen = %d",drops);
rs27 2:e330478fb0b6 437
rs27 2:e330478fb0b6 438 break;
rs27 2:e330478fb0b6 439
rs27 2:e330478fb0b6 440 } // end switch
Sven3010 3:254f7ffb9b32 441 pc.printf("\n");
rs27 2:e330478fb0b6 442 }
rs27 2:e330478fb0b6 443 //-----------------------------------------------------------------------------
rs27 2:e330478fb0b6 444 // monitor Aufruf go
rs27 2:e330478fb0b6 445 // Wird die Heizung oder der Tropfenspender eingeschaltet.
rs27 2:e330478fb0b6 446
rs27 2:e330478fb0b6 447 void go(void)
rs27 2:e330478fb0b6 448 {
rs27 2:e330478fb0b6 449 char ch;
rs27 2:e330478fb0b6 450
Sven3010 3:254f7ffb9b32 451 sscanf(&com_line[ComLinePtr],"%c",&ch);
rs27 2:e330478fb0b6 452
Sven3010 3:254f7ffb9b32 453 switch (ch)
rs27 2:e330478fb0b6 454 {
rs27 2:e330478fb0b6 455
rs27 6:e5f5e56ffc50 456 case '1': magnet.set(0); break;
rs27 6:e5f5e56ffc50 457 case '2': magnet.set(1); break;
rs27 6:e5f5e56ffc50 458 case '3': magnet.set(2); break;
rs27 6:e5f5e56ffc50 459 case '4': magnet.set(3); break;
rs27 6:e5f5e56ffc50 460 case '5': magnet.set(4); break;
rs27 6:e5f5e56ffc50 461 case '6': magnet.set(5); break;
rs27 6:e5f5e56ffc50 462 case '7': magnet.set(6); break;
rs27 6:e5f5e56ffc50 463 case '8': magnet.set(7); break;
rs27 6:e5f5e56ffc50 464 case '9': magnet.set(8); break;
rs27 6:e5f5e56ffc50 465
rs27 2:e330478fb0b6 466 case '?':
rs27 2:e330478fb0b6 467 if (t_flag) pc.printf("Temperatur aktiv");
rs27 2:e330478fb0b6 468 else pc.printf("Temperatur inaktiv");
rs27 2:e330478fb0b6 469
rs27 2:e330478fb0b6 470 if (f_flag) pc.printf("Tropfen freigeschaltet");
rs27 2:e330478fb0b6 471 else pc.printf("Tropfen gesperrt");
rs27 2:e330478fb0b6 472
rs27 2:e330478fb0b6 473 break;
rs27 2:e330478fb0b6 474 case 't':
rs27 2:e330478fb0b6 475 case 'T':
rs27 2:e330478fb0b6 476 cfg.setValue("t_flag", "1");
rs27 2:e330478fb0b6 477 cfg.write("/sd/input.cfg");
rs27 2:e330478fb0b6 478
rs27 2:e330478fb0b6 479 t_flag = true;
rs27 2:e330478fb0b6 480 pc.printf("\nTemperatursteuerung ist aktiv");
rs27 2:e330478fb0b6 481
rs27 2:e330478fb0b6 482 break;
rs27 2:e330478fb0b6 483
rs27 2:e330478fb0b6 484 case 'f':
rs27 2:e330478fb0b6 485 case 'F':
rs27 2:e330478fb0b6 486 cfg.setValue("f_flag", "1");
rs27 2:e330478fb0b6 487 cfg.write("/sd/input.cfg");
rs27 2:e330478fb0b6 488
rs27 2:e330478fb0b6 489 f_flag = true;
rs27 6:e5f5e56ffc50 490 //com.putc('1');
rs27 6:e5f5e56ffc50 491 magnet.set(0);
rs27 2:e330478fb0b6 492 pc.printf("\nTropfen freigeben");
rs27 2:e330478fb0b6 493
rs27 2:e330478fb0b6 494 break;
rs27 2:e330478fb0b6 495
rs27 4:83dbae473d1f 496 default: pc.printf("\nBefehl go kennt nur die Zeichen ?,t,T,f,F");
rs27 4:83dbae473d1f 497 break;
rs27 2:e330478fb0b6 498
rs27 2:e330478fb0b6 499 } // end switch
Sven3010 3:254f7ffb9b32 500 pc.printf("\n");
rs27 2:e330478fb0b6 501 }
rs27 2:e330478fb0b6 502
rs27 2:e330478fb0b6 503
rs27 2:e330478fb0b6 504 //-----------------------------------------------------------------------------
rs27 2:e330478fb0b6 505 // monitor Aufruf stop
rs27 2:e330478fb0b6 506 // Wird die Heizung oder der Tropfenspender ausgeschaltet.
rs27 2:e330478fb0b6 507
rs27 2:e330478fb0b6 508 void stop(void)
rs27 2:e330478fb0b6 509 {
rs27 2:e330478fb0b6 510 char ch;
rs27 2:e330478fb0b6 511
Sven3010 3:254f7ffb9b32 512 sscanf(&com_line[ComLinePtr],"%c",&ch);
rs27 2:e330478fb0b6 513
Sven3010 3:254f7ffb9b32 514 switch (ch)
rs27 2:e330478fb0b6 515 {
rs27 2:e330478fb0b6 516
rs27 6:e5f5e56ffc50 517 case '1': magnet.reset(0); break;
rs27 6:e5f5e56ffc50 518 case '2': magnet.reset(1); break;
rs27 6:e5f5e56ffc50 519 case '3': magnet.reset(2); break;
rs27 6:e5f5e56ffc50 520 case '4': magnet.reset(3); break;
rs27 6:e5f5e56ffc50 521 case '5': magnet.reset(4); break;
rs27 6:e5f5e56ffc50 522 case '6': magnet.reset(5); break;
rs27 6:e5f5e56ffc50 523 case '7': magnet.reset(6); break;
rs27 6:e5f5e56ffc50 524 case '8': magnet.reset(7); break;
rs27 6:e5f5e56ffc50 525 case '9': magnet.reset(8); break;
rs27 6:e5f5e56ffc50 526
rs27 2:e330478fb0b6 527 case '?':
rs27 2:e330478fb0b6 528 if (t_flag) pc.printf("Temperatur aktiviert");
rs27 2:e330478fb0b6 529 else pc.printf("Temperatur deaktiviert");
rs27 2:e330478fb0b6 530
rs27 2:e330478fb0b6 531 if (f_flag) pc.printf("Tropfen freigeschaltet");
rs27 2:e330478fb0b6 532 else pc.printf("Tropfen gesperrt");
rs27 2:e330478fb0b6 533
rs27 2:e330478fb0b6 534 break;
rs27 2:e330478fb0b6 535 case 't':
rs27 2:e330478fb0b6 536 case 'T':
rs27 2:e330478fb0b6 537 cfg.setValue("t_flag", "0");
rs27 2:e330478fb0b6 538 cfg.write("/sd/input.cfg");
rs27 2:e330478fb0b6 539
Sven3010 3:254f7ffb9b32 540 t_flag = false;
rs27 2:e330478fb0b6 541 pc.printf("\nTemperatursteuerung ist deaktiviert");
rs27 2:e330478fb0b6 542
rs27 2:e330478fb0b6 543 break;
rs27 2:e330478fb0b6 544
rs27 2:e330478fb0b6 545 case 'f':
rs27 2:e330478fb0b6 546 case 'F':
rs27 2:e330478fb0b6 547 cfg.setValue("f_flag", "0");
rs27 2:e330478fb0b6 548 cfg.write("/sd/input.cfg");
rs27 2:e330478fb0b6 549
Sven3010 3:254f7ffb9b32 550 f_flag = false;
rs27 2:e330478fb0b6 551 com.putc('9');
rs27 2:e330478fb0b6 552 pc.printf("\nTropfen gesperrt");
rs27 2:e330478fb0b6 553
rs27 2:e330478fb0b6 554 break;
rs27 2:e330478fb0b6 555
rs27 4:83dbae473d1f 556 default:
rs27 4:83dbae473d1f 557 pc.printf("\nBefehl stop kennt nur die Zeichen ?,t,T,f,F '%c' %x", ch, ch);
rs27 4:83dbae473d1f 558 break;
rs27 2:e330478fb0b6 559
rs27 2:e330478fb0b6 560 } // end switch
rs27 4:83dbae473d1f 561
rs27 4:83dbae473d1f 562 pc.printf("\n");
rs27 2:e330478fb0b6 563 }
rs27 2:e330478fb0b6 564 //-----------------------------------------------------------------------------
rs27 0:f0fbbfdca478 565 // monitor Aufruf
rs27 0:f0fbbfdca478 566
rs27 1:19313470f629 567 void time(void)
rs27 0:f0fbbfdca478 568 {
rs27 0:f0fbbfdca478 569 pc.printf("\nin timer");
rs27 0:f0fbbfdca478 570 }
rs27 0:f0fbbfdca478 571
rs27 1:19313470f629 572 //-----------------------------------------------------------------------------
rs27 1:19313470f629 573 // monitor Aufruf dir
rs27 1:19313470f629 574 //
rs27 1:19313470f629 575 // weiter Infos siehe auch
rs27 1:19313470f629 576 // http://elm-chan.org/fsw/ff/00index_e.html
rs27 1:19313470f629 577 //
rs27 1:19313470f629 578 void dir(void)
rs27 1:19313470f629 579 {
rs27 1:19313470f629 580 long size;
rs27 1:19313470f629 581
rs27 1:19313470f629 582 DIR *d;
rs27 1:19313470f629 583 struct dirent *p;
rs27 1:19313470f629 584
rs27 1:19313470f629 585 d = opendir("/sd");
rs27 1:19313470f629 586 if (d != NULL)
rs27 1:19313470f629 587 {
rs27 1:19313470f629 588 while ((p = readdir(d)) != NULL)
rs27 1:19313470f629 589 {
rs27 1:19313470f629 590 sprintf(buffer,"/sd/%s",p->d_name);
rs27 1:19313470f629 591 pc.printf("\n %s", p->d_name);
rs27 1:19313470f629 592 FILE * f = fopen(buffer, "r");
rs27 1:19313470f629 593 fseek(f, 0, SEEK_END); // seek to end of file
rs27 1:19313470f629 594 size = ftell(f); // get current file pointer
rs27 1:19313470f629 595 pc.printf(" %ld bytes ",size);
rs27 1:19313470f629 596
rs27 1:19313470f629 597 time_t fattime = get_fattime();
rs27 1:19313470f629 598 strftime(buffer, 40, "%a,%d %m %Y.%H:%M:%S", localtime(&fattime));
rs27 1:19313470f629 599 pc.printf(" %s ", buffer);
rs27 1:19313470f629 600
rs27 1:19313470f629 601 fclose(f);
rs27 1:19313470f629 602 }
rs27 1:19313470f629 603
rs27 1:19313470f629 604 }
rs27 1:19313470f629 605 else
rs27 1:19313470f629 606 {
rs27 1:19313470f629 607 pc.printf("\nCould not open directory!\n");
rs27 1:19313470f629 608 }
rs27 1:19313470f629 609 closedir(d);
rs27 1:19313470f629 610
rs27 1:19313470f629 611
rs27 1:19313470f629 612 FATFS* fs;
rs27 1:19313470f629 613 DWORD fre_clust;
rs27 1:19313470f629 614 f_getfree("0:",&fre_clust,&fs);
rs27 1:19313470f629 615 const float frs = float(fs->csize)*float(fs->free_clust)
rs27 1:19313470f629 616 #if _MAX_SS != 512
rs27 1:19313470f629 617 *(fs->ssize);
rs27 1:19313470f629 618 #else
rs27 1:19313470f629 619 *512;
rs27 1:19313470f629 620 #endif
rs27 1:19313470f629 621 pc.printf("\n\nfree space = %f GB",frs/1073741824.0);
rs27 1:19313470f629 622
rs27 1:19313470f629 623 pc.printf("\ndone\n");
rs27 1:19313470f629 624 }
rs27 1:19313470f629 625
rs27 1:19313470f629 626 //-----------------------------------------------------------------------------
rs27 1:19313470f629 627 // monitor Aufruf list
rs27 1:19313470f629 628
rs27 1:19313470f629 629 void list(void)
rs27 1:19313470f629 630 {
rs27 1:19313470f629 631 char dname[25];
rs27 1:19313470f629 632 int ch;
rs27 1:19313470f629 633
rs27 1:19313470f629 634 sscanf(&com_line[ComLinePtr],"%s",dname);
rs27 1:19313470f629 635 sprintf(buffer,"/sd/%s",dname);
rs27 1:19313470f629 636 pc.printf("\nlist, file %s \n",buffer);
rs27 1:19313470f629 637 FILE * fp = fopen(buffer, "r");
rs27 1:19313470f629 638 if(fp == NULL)
rs27 1:19313470f629 639 {
rs27 1:19313470f629 640 pc.printf("\nCould not open file for read\n\r");
rs27 1:19313470f629 641 return;
rs27 1:19313470f629 642 }
rs27 1:19313470f629 643
rs27 1:19313470f629 644 // mit fgets werden die Zeile einzeln gelesen, wenn die Länge < 64 Zeichen ist
rs27 1:19313470f629 645
rs27 1:19313470f629 646 while (1) // list src to pc
rs27 1:19313470f629 647 {
rs27 1:19313470f629 648 ch = fgetc(fp); // until src EOF read.
rs27 1:19313470f629 649 if (ch == EOF) break;
rs27 1:19313470f629 650 pc.putc(ch);
rs27 1:19313470f629 651 }
rs27 1:19313470f629 652
rs27 1:19313470f629 653 fclose(fp);
rs27 1:19313470f629 654
rs27 1:19313470f629 655 pc.printf("\ndone\n");
rs27 1:19313470f629 656 }
rs27 1:19313470f629 657
rs27 1:19313470f629 658 //-----------------------------------------------------------------------------
rs27 1:19313470f629 659 // monitor Aufruf del
rs27 1:19313470f629 660
rs27 1:19313470f629 661 void del(void)
rs27 1:19313470f629 662 {
rs27 1:19313470f629 663 char dname[25];
rs27 1:19313470f629 664 char buffer[40];
rs27 1:19313470f629 665
rs27 1:19313470f629 666 sscanf(&com_line[ComLinePtr],"%s",dname);
rs27 1:19313470f629 667 sprintf(buffer,"/sd/%s",dname);
rs27 1:19313470f629 668 pc.printf("\ndelete file %s",buffer);
rs27 1:19313470f629 669 remove(buffer);
rs27 1:19313470f629 670 pc.printf("\ndone");
rs27 1:19313470f629 671 }
rs27 1:19313470f629 672
rs27 1:19313470f629 673 //-----------------------------------------------------------------------------
rs27 1:19313470f629 674 // monitor Aufruf fill
rs27 1:19313470f629 675
rs27 1:19313470f629 676 void fill(void)
rs27 1:19313470f629 677 {
rs27 1:19313470f629 678 char dname[25];
rs27 1:19313470f629 679 char buffer[40];
rs27 1:19313470f629 680 int n = 20;
rs27 1:19313470f629 681
rs27 1:19313470f629 682 sscanf(&com_line[ComLinePtr],"%s %d",dname,&n);
rs27 1:19313470f629 683 sprintf(buffer,"/sd/%s",dname);
rs27 1:19313470f629 684 pc.printf("\nfill file %s \n",buffer);
rs27 1:19313470f629 685 FILE *fp = fopen(buffer, "w");
rs27 1:19313470f629 686 if(fp == NULL)
rs27 1:19313470f629 687 {
rs27 1:19313470f629 688 pc.printf("Could not open file for write\n");
rs27 1:19313470f629 689 }
rs27 1:19313470f629 690 for (int i = 0; i<n; i++)
rs27 1:19313470f629 691 {
rs27 1:19313470f629 692 fprintf(fp, "\nschreibe eine Zeile %d ",i);
rs27 1:19313470f629 693 }
rs27 1:19313470f629 694 fclose(fp);
rs27 1:19313470f629 695 pc.printf("\ndone\n");
rs27 1:19313470f629 696 }
rs27 1:19313470f629 697
rs27 1:19313470f629 698