
Code for Browonout Generator box
Diff: main.cpp
- 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; } - -