Code for Browonout Generator box

Revision:
2:018630ec52d1
Parent:
1:8cad7e957324
Child:
3:16478dd3d1f3
--- a/main.cpp	Fri Feb 07 12:28:58 2020 +0000
+++ b/main.cpp	Tue Feb 11 14:59:35 2020 +0000
@@ -1,22 +1,29 @@
 
-/*
 #include "mbed.h"
 #include <string>
 #include <stdio.h>
 #include <stdlib.h>
+#include <FileHandle.h>
+#include <vector>
 
-DigitalOut led1(LED1, 0);
-DigitalOut led2(LED2, 0);
-DigitalOut led3(LED3, 0);
-DigitalOut led4(LED4, 0);
-DigitalOut do21(p21, 0);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+DigitalOut do21(p21);
+InterruptIn di22(p22,PullDown); //removing di22 and its related calls and functions causes a major fault for unknown reasons so it has been left in dispite not being used.
+Ticker tickOn;
+Ticker tickOff;
 
 Serial pc(USBTX, USBRX);  // for PC debug
 LocalFileSystem fs("local");
 
-long double configData[3];
-string strData[3];
+#define NUMCONFIGPARAM  3
 
+bool flg_start = 0;
+bool flg_END = false;
+long double configData[NUMCONFIGPARAM];
+string strData[NUMCONFIGPARAM];
 
 //returns if the given character is a number or decimal point character
 bool Is_Num_Char(char c)
@@ -53,144 +60,67 @@
 //Reads reads and converts data from config file
 void Get_Config_data()
 {
-    printf("Get Config data\r\n");
+//    printf("Get Config data\r\n");
+//    FILE*   fp = fopen("/local/config.txt", "r");
+//    char c;
+//    char stateData = 0; //which data it is reading on duration, off duration e.t.c.
+//    char stateRead = 0; //0 = parsing, 1 = reading data
+//    char* pEnd;
+//    string data;
+//    printf("test");
+//    while (!feof(fp)) {
+//        c = fgetc(fp);
+//        if (Is_Num_Char(c)) {
+//            printf("Read in %d\r\n",c);
+//            data.push_back(c);
+//            stateRead = 1;
+//            c = NULL;
+//        } else if (stateRead == 1) {
+//            //convert to double and add to Data
+//            printf("stateData = %d\r\n",stateData);
+//            strData[stateData] = data;
+//            configData[stateData] = strtod(data.c_str(), &pEnd);
+//            data.clear();
+//            stateData++;
+//            stateRead = 0;
+//        }
+//    }
+//
+//    fclose(fp);
+
+
+    printf("Get Config Data \r\n");
+    char c; //Current character being read
+    char strData_index = 0;
+    char* pEnd;
+    bool isReading = false;
+    bool isNumChar;
+    string currentStr;
     FILE*   fp = fopen("/local/config.txt", "r");
-    int c;
-    char stateData = 0; //which data it is reading on duration, off duration e.t.c.
-    char stateRead = 0; //0 = parsing, 1 = reading data
-    char* pEnd;
-    string data;
 
     while (!feof(fp)) {
         c = fgetc(fp);
-        if (Is_Num_Char(c)) {
-            data.push_back(c);
-            stateRead = 1;
-            c = NULL;
-        } else if (stateRead == 1) {
-            //convert to double and add to Data
-            strData[stateData] = data;
-            configData[stateData] = strtod(data.c_str(), &pEnd);
-            data.clear();
-            stateData++;
-            stateRead = 0;
-        }
-    }
-
-    fclose(fp);
-
-    //configData[0] = configData[0] /10; //wait functions
-    //configData[2] = configData[2] /10;
-
-}
-
-
-//init function
-void init()
-{
-
-    Print_Config();
-    //Get_Config_data();
-}
-
-int main()
-{
-    printf("STARTING\r\n");
-    init();
-    //printf("Strings: On: %s, repeat: %s, Off: %s \r\n", strData[0].c_str(),strData[1].c_str(), strData[2].c_str() );
-    //printf("Data: %Lf, %Lf, %Lf\r\n",configData[0]*10,configData[1],configData[2]*10); //multiplying back to real values
-
-
-
-
-    printf("END \r\n");
-    return 0;
-}
-*/
-
-
-#include "mbed.h"
-#include <string>
-#include <stdio.h>
-#include <stdlib.h>
-
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-DigitalOut led4(LED4);
-DigitalOut do21(p21);
-InterruptIn di22(p22,PullDown); //removing di22 and its related calls and functions causes a major fault for unknown reasons so it has been left in dispite not being used.
-
-Serial pc(USBTX, USBRX);  // for PC debug
-LocalFileSystem fs("local");
+        isNumChar = Is_Num_Char(c);
+        if(isNumChar) {
+            currentStr.push_back(c);
+            isReading = true;
+//            printf("num: %c\r\n", c);
+        } else if(!isNumChar and isReading) {
+            isReading = false;
+            strData[strData_index] = currentStr;
+            configData[strData_index] = strtod(currentStr.c_str(), &pEnd);
+            
+//            printf("string added: %s, %i\r\n", currentStr.c_str(), strData_index);
+            
+            strData_index++;
+            currentStr = "";
 
-bool flg_start = 0;
-bool flg_END = false;
-long double configData[3];
-string strData[3];
-
-//returns if the given character is a number or decimal point character
-bool Is_Num_Char(char c)
-{
-    bool isChar = false;
-    if((c >= '0' and c <= '9') or c == '.') {
-        isChar = true;
-    }
-    return isChar;
-}
-
-//From: https://os.mbed.com/questions/83075/Is-it-possible-to-read-a-small-text-file/
-//Reads config.txt from local drive
-bool Print_Config()
-{
-    bool flg_error;
-    printf("Opening file 'config.txt'... ");
-    FILE*   fp = fopen("/local/config.txt", "r");
-    printf("%s\n\r", (!fp ? "Fail :(" : "OK"));
-    if (!fp) {
-        error("error: %s (%d)\n", strerror(errno), -errno);
-        flg_error = 1;
-    }
-    while (!feof(fp)) {
-        int c = fgetc(fp);
-        printf("%c", c);
+        }
+        if (strData_index >= NUMCONFIGPARAM ) {
+            break;
+        }
+        
     }
-
-    fclose(fp);
-    printf("\r\n===========\r\n");
-    return flg_error;
-}
-
-//Reads reads and converts data from config file
-void Get_Config_data()
-{
-    printf("Get Config data\r\n");
-    FILE*   fp = fopen("/local/config.txt", "r");
-    int c;
-    char stateData = 0; //which data it is reading on duration, off duration e.t.c.
-    char stateRead = 0; //0 = parsing, 1 = reading data
-    char* pEnd;
-    string data;
-
-    while (!feof(fp)) {
-        c = fgetc(fp);
-        if (Is_Num_Char(c)) {
-            data.push_back(c);
-            stateRead = 1;
-            c = NULL;
-        } else if (stateRead == 1) {
-            //convert to double and add to Data
-            strData[stateData] = data;
-            configData[stateData] = strtod(data.c_str(), &pEnd);
-            data.clear();
-            stateData++;
-            stateRead = 0;
-        }
-    }
-
-    fclose(fp);
-
-
 }
 
 // Runs wait functions and divides by 10 to account for error in function
@@ -208,10 +138,13 @@
     do21 = 1;
     led1 = 1;
     thread_sleep_for(configData[0]);
-
     //printf("Off \r\n");
     do21 = 0;
     led1 = 0;
+    thread_sleep_for(configData[2]);
+    do21 = 1;
+    led1 = 1;
+
 }
 
 //interrupt function to start cycling
@@ -233,10 +166,23 @@
 {
     while(1) {
         run_Cycle();
-        thread_sleep_for(configData[2]);
     }
 }
 
+void switch_2()
+{
+    do21 = !do21;
+    led1 = !led1;
+}
+
+void start_tick(float timeOnSec, float timeOffSec)
+{
+    tickOn.attach(&switch_2, timeOnSec);
+    tickOff.attach(&switch_2, timeOnSec + timeOffSec);
+}
+
+
+// Allows reads the USB input to allow serial commms to control the box
 void serial_mode()
 {
     bool flg_read = true;
@@ -266,6 +212,10 @@
                 pc.printf("clycle loop, power cycle box to stop\r\n");
                 cycle_loop();
 
+            } else if(str == "cycle3\r") {
+                //start_tick();
+
+
             } else if( str == "exit\r") {
                 flg_read = false;
             } else {
@@ -280,6 +230,7 @@
 }
 
 
+
 int main()
 {
     int Mode;
@@ -289,14 +240,16 @@
     printf("Data: %Lf, %Lf, %Lf\r\n",configData[0],configData[1],configData[2]);
 
     while(!flg_END) {
-    Mode = (int)configData[1];
+        Mode = (int)configData[1];
         if(Mode == 0) {
             run_Cycle();
         } else if(Mode == 1) {
             cycle_loop();
         } else if(Mode == 2) {
             serial_mode();
+            printf("1\r\n");
             Get_Config_data();
+            printf("2\r\n");
             printf("Data: %Lf, %Lf, %Lf\r\n",configData[0],configData[1],configData[2]);
 
         } else {
@@ -307,5 +260,3 @@
     printf("END \r\n");
     return 0;
 }
-
-