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