Code for Browonout Generator box

Revision:
4:44760dafcab7
Parent:
3:16478dd3d1f3
Child:
5:a8297e5f4de1
--- a/main.cpp	Thu Feb 13 18:08:20 2020 +0000
+++ b/main.cpp	Fri Feb 14 12:20:31 2020 +0000
@@ -5,6 +5,9 @@
 #include <stdlib.h>
 #include <FileHandle.h>
 #include <vector>
+#include <iostream>
+#include <cstdio>
+#include <cstdlib>
 
 DigitalOut led1(LED1, 0);
 DigitalOut led2(LED2, 0);
@@ -30,8 +33,10 @@
 bool is_num_char(char c);
 bool print_config();
 void get_config_data();
-
-
+void power(char pwr = 0);
+void cycle_wait(long double tOn = configData[0], long double tOff = configData[2]);
+void cycle_loop(long double tOn = configData[0], long double tOff = configData[2]);
+void serial_mode();
 
 
 //returns if the given character is a number or decimal point character
@@ -52,6 +57,7 @@
     pc.printf("Opening file 'config.txt'... ");
     FILE*   fp = fopen("/local/config.txt", "r");
     pc.printf("%s\n\r", (!fp ? "Fail :(" : "OK"));
+    pc.printf("\r\n==========\r\n");
     if (!fp) {
         error("error: %s (%d)\n", strerror(errno), -errno);
         flg_error = 1;
@@ -62,7 +68,7 @@
     }
 
     fclose(fp);
-    pc.printf("\r\n===========\r\n");
+    pc.printf("\r\n==========\r\n");
     return flg_error;
 }
 
@@ -100,7 +106,6 @@
 
     }
     fclose(fp);
-    ThisThread::sleep_for(5000);
     pc.printf("Data: %Lf, %Lf, %Lf\r\n",configData[0],configData[1],configData[2]);
 }
 
@@ -114,13 +119,13 @@
     get_config_data();
 }
 
-void power(char pwr = 0)
+void power(char pwr)
 {
     do21 = pwr;
     led1 = pwr;
 }
 
-void cycle_wait(long double tOn = configData[0], long double tOff = configData[2])
+void cycle_wait(long double tOn, long double tOff)
 {
     power(1);
     ThisThread::sleep_for(tOn);
@@ -129,34 +134,110 @@
     power(1);
 }
 
-void cycle_loop(long double tOn = configData[0], long double tOff = configData[2])
+void cycle_loop(long double tOn, long double tOff)
 {
     while(1) {
         cycle_wait(tOn,tOff);
     }
 }
 
+string read_serial_input()
+{
+    bool flg_read = true;
+    char c;
+    string str = "";
+
+    while(flg_read) {
+        c = pc.getc();
+        pc.putc(c);
+        if(c == 8 or c == 127) {                                                //If back space or delete remove last character
+            str.pop_back();
+        } else if (c == '\n') {
+            str.pop_back();
+            flg_read = false;
+            break;
+
+//        } else if(c < ' ') {                                                    //If none visible character, bar backspace or delete
+//            flg_read = false;
+//            break;
+        } else {
+            str.push_back(c);
+        }
+    }
+    return str;
+}
+
+bool is_num_str(string str)
+{
+    bool isNumC = false;
+    bool output = true;
+    for(int i = 0; i < str.length(); i++) {
+        isNumC = is_num_char(str[i]);
+        if(!isNumC) {
+            output = false;
+        }
+    }
+    return output;
+}
+
+long double get_num_input()
+{
+    long double output;
+    bool flg_gotStr = false;
+    string str_v = "";
+    char* pEnd;
+
+    while(!flg_gotStr) {
+        pc.puts("value: ");
+        str_v = read_serial_input();
+        if (is_num_str(str_v)) {
+            output = strtod(str_v.c_str(), &pEnd);
+            flg_gotStr = true;
+            break;
+        } else {
+            pc.printf("entry contained non number characters please try again: \r\n");
+        }
+
+    }
+    return output;
+}
+
+
+
 void serial_mode()
 {
     pc.printf("Serial Mode \r\n");
 
     bool flg_read = true;
+    bool flg_read2 = true;
     char c;
-    string str = "";
+    string str_c = "";
 
     while(flg_read) {
-        if (c == '\n') {
-            if(str == "cyclew\r"){
-                cycle_wait();
-            }else if(str == "loop\r") {
-                cycle_loop();
-            }else{
-                pc.printf("Unknown command, see README for commands \r\n");
-            }
-            str = "";
+        str_c = read_serial_input();
+        if (str_c == "on"){
+            power(1);
+            pc.printf("on\r\n");
+        } else if(str_c == "off"){
+            power(0);
+            pc.printf("off\r\n");
+        } else if(str_c == "cyclew") {
+            cycle_wait();
+            pc.printf("cycled \r\n");
+        } else if(str_c == "loop") {
+            pc.printf("Looping restart unit to end loop\r\n");
+            cycle_loop();
+        } else if(str_c == "newval") {
+            pc.printf("enter your new on and off times(ms)\r\n");
+            pc.puts("Time on\r\n");
+            configData[0] = get_num_input();
+            pc.puts("Time off\r\n");
+            configData[2] = get_num_input();
+            pc.printf("Data: %Lf, %Lf, %Lf\r\n",configData[0],configData[1],configData[2]);
         } else {
-            str.push_back(c);
+            pc.printf("Unknown command, see README for commands \r\n");
         }
+        str_c = "";
     }
 
 }
@@ -164,6 +245,7 @@
 int main()
 {
     init();
+
     while(!flg_END) {
         switch((int)configData[1]) {
             case(1):                                                            //Cut the power to the machine once
@@ -185,7 +267,5 @@
 
     pc.printf("Program End \r\n");
 
-
-
     return 0;
 }
\ No newline at end of file