
Code for Browonout Generator box
main.cpp@6:3f5d21480f11, 2020-02-17 (annotated)
- Committer:
- el16ba
- Date:
- Mon Feb 17 12:52:32 2020 +0000
- Revision:
- 6:3f5d21480f11
- Parent:
- 5:a8297e5f4de1
- Child:
- 7:fb8b01ec74a8
added in power-cycle loop that is exit able via serial commands
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el16ba | 5:a8297e5f4de1 | 1 | |
el16ba | 5:a8297e5f4de1 | 2 | //By Barnaby Ayriss |
el16ba | 5:a8297e5f4de1 | 3 | //Owned by Buhler UK Ltd |
el16ba | 0:9dd5634b94f3 | 4 | |
el16ba | 0:9dd5634b94f3 | 5 | #include "mbed.h" |
el16ba | 0:9dd5634b94f3 | 6 | #include <string> |
el16ba | 0:9dd5634b94f3 | 7 | #include <stdio.h> |
el16ba | 0:9dd5634b94f3 | 8 | #include <stdlib.h> |
el16ba | 2:018630ec52d1 | 9 | #include <FileHandle.h> |
el16ba | 2:018630ec52d1 | 10 | #include <vector> |
el16ba | 4:44760dafcab7 | 11 | #include <iostream> |
el16ba | 4:44760dafcab7 | 12 | #include <cstdio> |
el16ba | 4:44760dafcab7 | 13 | #include <cstdlib> |
el16ba | 0:9dd5634b94f3 | 14 | |
el16ba | 3:16478dd3d1f3 | 15 | DigitalOut led1(LED1, 0); |
el16ba | 3:16478dd3d1f3 | 16 | DigitalOut led2(LED2, 0); |
el16ba | 3:16478dd3d1f3 | 17 | DigitalOut led3(LED3, 0); |
el16ba | 3:16478dd3d1f3 | 18 | DigitalOut led4(LED4, 0); |
el16ba | 3:16478dd3d1f3 | 19 | DigitalOut do21(p21, 0); |
el16ba | 2:018630ec52d1 | 20 | 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. |
el16ba | 6:3f5d21480f11 | 21 | Timeout toOn; |
el16ba | 6:3f5d21480f11 | 22 | Timeout toOff; |
el16ba | 2:018630ec52d1 | 23 | Ticker tickOn; |
el16ba | 2:018630ec52d1 | 24 | Ticker tickOff; |
el16ba | 0:9dd5634b94f3 | 25 | |
el16ba | 0:9dd5634b94f3 | 26 | Serial pc(USBTX, USBRX); // for PC debug |
el16ba | 0:9dd5634b94f3 | 27 | LocalFileSystem fs("local"); |
el16ba | 0:9dd5634b94f3 | 28 | |
el16ba | 2:018630ec52d1 | 29 | #define NUMCONFIGPARAM 3 |
el16ba | 0:9dd5634b94f3 | 30 | |
el16ba | 2:018630ec52d1 | 31 | bool flg_start = 0; |
el16ba | 2:018630ec52d1 | 32 | bool flg_END = false; |
el16ba | 6:3f5d21480f11 | 33 | bool flg_loop0 = false; |
el16ba | 6:3f5d21480f11 | 34 | bool flg_loop1 = false; |
el16ba | 2:018630ec52d1 | 35 | long double configData[NUMCONFIGPARAM]; |
el16ba | 2:018630ec52d1 | 36 | string strData[NUMCONFIGPARAM]; |
el16ba | 0:9dd5634b94f3 | 37 | |
el16ba | 3:16478dd3d1f3 | 38 | //function prototypes |
el16ba | 3:16478dd3d1f3 | 39 | void init(); |
el16ba | 3:16478dd3d1f3 | 40 | bool is_num_char(char c); |
el16ba | 3:16478dd3d1f3 | 41 | bool print_config(); |
el16ba | 3:16478dd3d1f3 | 42 | void get_config_data(); |
el16ba | 4:44760dafcab7 | 43 | void power(char pwr = 0); |
el16ba | 4:44760dafcab7 | 44 | void cycle_wait(long double tOn = configData[0], long double tOff = configData[2]); |
el16ba | 6:3f5d21480f11 | 45 | void cycle_loopw(long double tOn = configData[0], long double tOff = configData[2]); |
el16ba | 5:a8297e5f4de1 | 46 | string read_serial_input(); |
el16ba | 5:a8297e5f4de1 | 47 | bool is_num_str(string str); |
el16ba | 5:a8297e5f4de1 | 48 | long double get_num_input(); |
el16ba | 4:44760dafcab7 | 49 | void serial_mode(); |
el16ba | 6:3f5d21480f11 | 50 | void cycle_timeout(long double tOn = configData[0], long double tOff = configData[2]); |
el16ba | 6:3f5d21480f11 | 51 | void cycle_loopto(long double tOn = configData[0], long double tOff = configData[2]); |
el16ba | 6:3f5d21480f11 | 52 | |
el16ba | 6:3f5d21480f11 | 53 | void cycle_looptick(long double tOn = configData[0], long double tOff = configData[2]); |
el16ba | 6:3f5d21480f11 | 54 | |
el16ba | 3:16478dd3d1f3 | 55 | |
el16ba | 3:16478dd3d1f3 | 56 | |
el16ba | 0:9dd5634b94f3 | 57 | //returns if the given character is a number or decimal point character |
el16ba | 3:16478dd3d1f3 | 58 | bool is_num_char(char c) |
el16ba | 0:9dd5634b94f3 | 59 | { |
el16ba | 0:9dd5634b94f3 | 60 | bool isChar = false; |
el16ba | 0:9dd5634b94f3 | 61 | if((c >= '0' and c <= '9') or c == '.') { |
el16ba | 0:9dd5634b94f3 | 62 | isChar = true; |
el16ba | 0:9dd5634b94f3 | 63 | } |
el16ba | 0:9dd5634b94f3 | 64 | return isChar; |
el16ba | 0:9dd5634b94f3 | 65 | } |
el16ba | 0:9dd5634b94f3 | 66 | |
el16ba | 0:9dd5634b94f3 | 67 | //From: https://os.mbed.com/questions/83075/Is-it-possible-to-read-a-small-text-file/ |
el16ba | 0:9dd5634b94f3 | 68 | //Reads config.txt from local drive |
el16ba | 3:16478dd3d1f3 | 69 | bool print_config() |
el16ba | 0:9dd5634b94f3 | 70 | { |
el16ba | 0:9dd5634b94f3 | 71 | bool flg_error; |
el16ba | 3:16478dd3d1f3 | 72 | pc.printf("Opening file 'config.txt'... "); |
el16ba | 0:9dd5634b94f3 | 73 | FILE* fp = fopen("/local/config.txt", "r"); |
el16ba | 3:16478dd3d1f3 | 74 | pc.printf("%s\n\r", (!fp ? "Fail :(" : "OK")); |
el16ba | 4:44760dafcab7 | 75 | pc.printf("\r\n==========\r\n"); |
el16ba | 0:9dd5634b94f3 | 76 | if (!fp) { |
el16ba | 0:9dd5634b94f3 | 77 | error("error: %s (%d)\n", strerror(errno), -errno); |
el16ba | 0:9dd5634b94f3 | 78 | flg_error = 1; |
el16ba | 0:9dd5634b94f3 | 79 | } |
el16ba | 0:9dd5634b94f3 | 80 | while (!feof(fp)) { |
el16ba | 0:9dd5634b94f3 | 81 | int c = fgetc(fp); |
el16ba | 3:16478dd3d1f3 | 82 | pc.printf("%c", c); |
el16ba | 0:9dd5634b94f3 | 83 | } |
el16ba | 0:9dd5634b94f3 | 84 | |
el16ba | 0:9dd5634b94f3 | 85 | fclose(fp); |
el16ba | 4:44760dafcab7 | 86 | pc.printf("\r\n==========\r\n"); |
el16ba | 0:9dd5634b94f3 | 87 | return flg_error; |
el16ba | 0:9dd5634b94f3 | 88 | } |
el16ba | 0:9dd5634b94f3 | 89 | |
el16ba | 0:9dd5634b94f3 | 90 | //Reads reads and converts data from config file |
el16ba | 3:16478dd3d1f3 | 91 | //Once a timed function (e.g. wait(), sleep_for(), ticker, timer e.t.c) is called opening another File pointer will cause the LPC1768 to crash with a Hard Fault. |
el16ba | 3:16478dd3d1f3 | 92 | void get_config_data() |
el16ba | 0:9dd5634b94f3 | 93 | { |
el16ba | 3:16478dd3d1f3 | 94 | pc.printf("Get Config Data \r\n"); |
el16ba | 2:018630ec52d1 | 95 | char c; //Current character being read |
el16ba | 2:018630ec52d1 | 96 | char strData_index = 0; |
el16ba | 2:018630ec52d1 | 97 | char* pEnd; |
el16ba | 2:018630ec52d1 | 98 | bool isReading = false; |
el16ba | 2:018630ec52d1 | 99 | bool isNumChar; |
el16ba | 2:018630ec52d1 | 100 | string currentStr; |
el16ba | 0:9dd5634b94f3 | 101 | FILE* fp = fopen("/local/config.txt", "r"); |
el16ba | 6:3f5d21480f11 | 102 | |
el16ba | 3:16478dd3d1f3 | 103 | while (!feof(fp)) { //loop till end of file |
el16ba | 3:16478dd3d1f3 | 104 | |
el16ba | 0:9dd5634b94f3 | 105 | c = fgetc(fp); |
el16ba | 3:16478dd3d1f3 | 106 | isNumChar = is_num_char(c); |
el16ba | 3:16478dd3d1f3 | 107 | if(isNumChar) { //at number character? |
el16ba | 2:018630ec52d1 | 108 | currentStr.push_back(c); |
el16ba | 2:018630ec52d1 | 109 | isReading = true; |
el16ba | 3:16478dd3d1f3 | 110 | } else if(!isNumChar and isReading) { //at end of number string? |
el16ba | 2:018630ec52d1 | 111 | isReading = false; |
el16ba | 2:018630ec52d1 | 112 | strData[strData_index] = currentStr; |
el16ba | 2:018630ec52d1 | 113 | configData[strData_index] = strtod(currentStr.c_str(), &pEnd); |
el16ba | 2:018630ec52d1 | 114 | strData_index++; |
el16ba | 2:018630ec52d1 | 115 | currentStr = ""; |
el16ba | 2:018630ec52d1 | 116 | } |
el16ba | 3:16478dd3d1f3 | 117 | if (strData_index >= NUMCONFIGPARAM ) { //Read all nessesary data? |
el16ba | 2:018630ec52d1 | 118 | break; |
el16ba | 2:018630ec52d1 | 119 | } |
el16ba | 3:16478dd3d1f3 | 120 | |
el16ba | 3:16478dd3d1f3 | 121 | } |
el16ba | 3:16478dd3d1f3 | 122 | fclose(fp); |
el16ba | 3:16478dd3d1f3 | 123 | pc.printf("Data: %Lf, %Lf, %Lf\r\n",configData[0],configData[1],configData[2]); |
el16ba | 3:16478dd3d1f3 | 124 | } |
el16ba | 3:16478dd3d1f3 | 125 | |
el16ba | 5:a8297e5f4de1 | 126 | //initialization function |
el16ba | 3:16478dd3d1f3 | 127 | void init() |
el16ba | 3:16478dd3d1f3 | 128 | { |
el16ba | 3:16478dd3d1f3 | 129 | pc.printf("Initializing \r\n"); |
el16ba | 3:16478dd3d1f3 | 130 | do21 = 0; |
el16ba | 3:16478dd3d1f3 | 131 | led1 = 0; |
el16ba | 3:16478dd3d1f3 | 132 | pc.baud(9600); |
el16ba | 3:16478dd3d1f3 | 133 | print_config(); |
el16ba | 3:16478dd3d1f3 | 134 | get_config_data(); |
el16ba | 3:16478dd3d1f3 | 135 | } |
el16ba | 3:16478dd3d1f3 | 136 | |
el16ba | 5:a8297e5f4de1 | 137 | //Sets the pin to control te machines power and its representative LED |
el16ba | 4:44760dafcab7 | 138 | void power(char pwr) |
el16ba | 3:16478dd3d1f3 | 139 | { |
el16ba | 3:16478dd3d1f3 | 140 | do21 = pwr; |
el16ba | 3:16478dd3d1f3 | 141 | led1 = pwr; |
el16ba | 3:16478dd3d1f3 | 142 | } |
el16ba | 3:16478dd3d1f3 | 143 | |
el16ba | 5:a8297e5f4de1 | 144 | //runs a power cycle using sleep commands |
el16ba | 4:44760dafcab7 | 145 | void cycle_wait(long double tOn, long double tOff) |
el16ba | 3:16478dd3d1f3 | 146 | { |
el16ba | 3:16478dd3d1f3 | 147 | power(1); |
el16ba | 3:16478dd3d1f3 | 148 | ThisThread::sleep_for(tOn); |
el16ba | 3:16478dd3d1f3 | 149 | power(0); |
el16ba | 3:16478dd3d1f3 | 150 | ThisThread::sleep_for(tOff); |
el16ba | 3:16478dd3d1f3 | 151 | power(1); |
el16ba | 3:16478dd3d1f3 | 152 | } |
el16ba | 3:16478dd3d1f3 | 153 | |
el16ba | 5:a8297e5f4de1 | 154 | //runs an infinate powercycle loop |
el16ba | 6:3f5d21480f11 | 155 | void cycle_loopw(long double tOn, long double tOff) |
el16ba | 3:16478dd3d1f3 | 156 | { |
el16ba | 3:16478dd3d1f3 | 157 | while(1) { |
el16ba | 3:16478dd3d1f3 | 158 | cycle_wait(tOn,tOff); |
el16ba | 0:9dd5634b94f3 | 159 | } |
el16ba | 0:9dd5634b94f3 | 160 | } |
el16ba | 0:9dd5634b94f3 | 161 | |
el16ba | 6:3f5d21480f11 | 162 | // ouputs a string from the serial input using a |
el16ba | 4:44760dafcab7 | 163 | string read_serial_input() |
el16ba | 4:44760dafcab7 | 164 | { |
el16ba | 4:44760dafcab7 | 165 | bool flg_read = true; |
el16ba | 4:44760dafcab7 | 166 | char c; |
el16ba | 4:44760dafcab7 | 167 | string str = ""; |
el16ba | 4:44760dafcab7 | 168 | |
el16ba | 4:44760dafcab7 | 169 | while(flg_read) { |
el16ba | 4:44760dafcab7 | 170 | c = pc.getc(); |
el16ba | 4:44760dafcab7 | 171 | pc.putc(c); |
el16ba | 4:44760dafcab7 | 172 | if(c == 8 or c == 127) { //If back space or delete remove last character |
el16ba | 4:44760dafcab7 | 173 | str.pop_back(); |
el16ba | 5:a8297e5f4de1 | 174 | } else if (c == '\n') { //If new line character |
el16ba | 5:a8297e5f4de1 | 175 | str.pop_back(); // removes return carriage character |
el16ba | 4:44760dafcab7 | 176 | flg_read = false; |
el16ba | 4:44760dafcab7 | 177 | break; |
el16ba | 5:a8297e5f4de1 | 178 | // } else if(c < ' ') { //If none visible character, bar backspace or delete |
el16ba | 4:44760dafcab7 | 179 | // flg_read = false; |
el16ba | 4:44760dafcab7 | 180 | // break; |
el16ba | 4:44760dafcab7 | 181 | } else { |
el16ba | 4:44760dafcab7 | 182 | str.push_back(c); |
el16ba | 4:44760dafcab7 | 183 | } |
el16ba | 4:44760dafcab7 | 184 | } |
el16ba | 4:44760dafcab7 | 185 | return str; |
el16ba | 4:44760dafcab7 | 186 | } |
el16ba | 4:44760dafcab7 | 187 | |
el16ba | 5:a8297e5f4de1 | 188 | //outputs if a string is comprised entirely of number characters |
el16ba | 4:44760dafcab7 | 189 | bool is_num_str(string str) |
el16ba | 4:44760dafcab7 | 190 | { |
el16ba | 4:44760dafcab7 | 191 | bool isNumC = false; |
el16ba | 4:44760dafcab7 | 192 | bool output = true; |
el16ba | 4:44760dafcab7 | 193 | for(int i = 0; i < str.length(); i++) { |
el16ba | 4:44760dafcab7 | 194 | isNumC = is_num_char(str[i]); |
el16ba | 4:44760dafcab7 | 195 | if(!isNumC) { |
el16ba | 4:44760dafcab7 | 196 | output = false; |
el16ba | 4:44760dafcab7 | 197 | } |
el16ba | 4:44760dafcab7 | 198 | } |
el16ba | 4:44760dafcab7 | 199 | return output; |
el16ba | 4:44760dafcab7 | 200 | } |
el16ba | 4:44760dafcab7 | 201 | |
el16ba | 5:a8297e5f4de1 | 202 | //gets a string of only number characters from the serial input |
el16ba | 4:44760dafcab7 | 203 | long double get_num_input() |
el16ba | 4:44760dafcab7 | 204 | { |
el16ba | 4:44760dafcab7 | 205 | long double output; |
el16ba | 4:44760dafcab7 | 206 | bool flg_gotStr = false; |
el16ba | 4:44760dafcab7 | 207 | string str_v = ""; |
el16ba | 4:44760dafcab7 | 208 | char* pEnd; |
el16ba | 4:44760dafcab7 | 209 | |
el16ba | 4:44760dafcab7 | 210 | while(!flg_gotStr) { |
el16ba | 4:44760dafcab7 | 211 | pc.puts("value: "); |
el16ba | 4:44760dafcab7 | 212 | str_v = read_serial_input(); |
el16ba | 4:44760dafcab7 | 213 | if (is_num_str(str_v)) { |
el16ba | 4:44760dafcab7 | 214 | output = strtod(str_v.c_str(), &pEnd); |
el16ba | 4:44760dafcab7 | 215 | flg_gotStr = true; |
el16ba | 4:44760dafcab7 | 216 | break; |
el16ba | 4:44760dafcab7 | 217 | } else { |
el16ba | 4:44760dafcab7 | 218 | pc.printf("entry contained non number characters please try again: \r\n"); |
el16ba | 4:44760dafcab7 | 219 | } |
el16ba | 4:44760dafcab7 | 220 | |
el16ba | 4:44760dafcab7 | 221 | } |
el16ba | 4:44760dafcab7 | 222 | return output; |
el16ba | 4:44760dafcab7 | 223 | } |
el16ba | 4:44760dafcab7 | 224 | |
el16ba | 6:3f5d21480f11 | 225 | void powerOn() |
el16ba | 6:3f5d21480f11 | 226 | { |
el16ba | 6:3f5d21480f11 | 227 | power(1); |
el16ba | 6:3f5d21480f11 | 228 | flg_loop1 = true; |
el16ba | 6:3f5d21480f11 | 229 | } |
el16ba | 6:3f5d21480f11 | 230 | void powerOff() |
el16ba | 6:3f5d21480f11 | 231 | { |
el16ba | 6:3f5d21480f11 | 232 | power(0); |
el16ba | 6:3f5d21480f11 | 233 | flg_loop0 = true; |
el16ba | 6:3f5d21480f11 | 234 | } |
el16ba | 4:44760dafcab7 | 235 | |
el16ba | 6:3f5d21480f11 | 236 | void powerOnTo(long double t){ |
el16ba | 6:3f5d21480f11 | 237 | power(0); |
el16ba | 6:3f5d21480f11 | 238 | toOn.attach(&powerOn,t); |
el16ba | 6:3f5d21480f11 | 239 | } |
el16ba | 6:3f5d21480f11 | 240 | |
el16ba | 6:3f5d21480f11 | 241 | //powercycles the machine utilizing timouts for time keeping |
el16ba | 6:3f5d21480f11 | 242 | void cycle_timeout(long double tOn, long double tOff) |
el16ba | 6:3f5d21480f11 | 243 | { |
el16ba | 6:3f5d21480f11 | 244 | long int t1,t2; |
el16ba | 6:3f5d21480f11 | 245 | t1 = (int)tOn*1000; |
el16ba | 6:3f5d21480f11 | 246 | t2 = (int)((tOff*1000) + t1); |
el16ba | 6:3f5d21480f11 | 247 | flg_loop0 = false; |
el16ba | 6:3f5d21480f11 | 248 | flg_loop1 = false; |
el16ba | 6:3f5d21480f11 | 249 | power(1); |
el16ba | 6:3f5d21480f11 | 250 | toOn.attach_us(&powerOff,t1); |
el16ba | 6:3f5d21480f11 | 251 | toOff.attach_us(&powerOn,t2); |
el16ba | 6:3f5d21480f11 | 252 | } |
el16ba | 6:3f5d21480f11 | 253 | |
el16ba | 6:3f5d21480f11 | 254 | //powercycles the machine, utilizing timouts for time keeping |
el16ba | 6:3f5d21480f11 | 255 | void cycle_loopto(long double tOn, long double tOff) |
el16ba | 6:3f5d21480f11 | 256 | { |
el16ba | 6:3f5d21480f11 | 257 | bool flg_lend = true; |
el16ba | 6:3f5d21480f11 | 258 | string str = ""; |
el16ba | 6:3f5d21480f11 | 259 | while(flg_lend) { |
el16ba | 6:3f5d21480f11 | 260 | if(flg_loop0 and flg_loop1) { |
el16ba | 6:3f5d21480f11 | 261 | cycle_timeout(tOn,tOff); |
el16ba | 6:3f5d21480f11 | 262 | } |
el16ba | 6:3f5d21480f11 | 263 | } |
el16ba | 6:3f5d21480f11 | 264 | } |
el16ba | 6:3f5d21480f11 | 265 | |
el16ba | 6:3f5d21480f11 | 266 | //call back function for cycle_looptick |
el16ba | 6:3f5d21480f11 | 267 | void loop_tick (){ |
el16ba | 6:3f5d21480f11 | 268 | toOn.attach(&powerOn, (configData[2]/1000) ); |
el16ba | 6:3f5d21480f11 | 269 | powerOff(); |
el16ba | 6:3f5d21480f11 | 270 | flg_loop0 = 1; |
el16ba | 6:3f5d21480f11 | 271 | } |
el16ba | 6:3f5d21480f11 | 272 | |
el16ba | 6:3f5d21480f11 | 273 | //Allows the user to set the machine to powercycle and exit the loop via serial commands |
el16ba | 6:3f5d21480f11 | 274 | //utilizes a ticker and a timeout for time keeping |
el16ba | 6:3f5d21480f11 | 275 | void cycle_looptick(long double tOn, long double tOff){ |
el16ba | 6:3f5d21480f11 | 276 | long double t1,t2; |
el16ba | 6:3f5d21480f11 | 277 | bool flg_exit = false; |
el16ba | 6:3f5d21480f11 | 278 | string str; |
el16ba | 6:3f5d21480f11 | 279 | t1 = tOn/1000; |
el16ba | 6:3f5d21480f11 | 280 | t2 = (tOff/1000); |
el16ba | 6:3f5d21480f11 | 281 | power(1); |
el16ba | 6:3f5d21480f11 | 282 | tickOff.attach(&loop_tick, t1+t2); |
el16ba | 6:3f5d21480f11 | 283 | |
el16ba | 6:3f5d21480f11 | 284 | while(!flg_exit){ |
el16ba | 6:3f5d21480f11 | 285 | |
el16ba | 6:3f5d21480f11 | 286 | str = read_serial_input(); |
el16ba | 6:3f5d21480f11 | 287 | if (str == "end"){ |
el16ba | 6:3f5d21480f11 | 288 | tickOff.detach(); |
el16ba | 6:3f5d21480f11 | 289 | pc.printf("loop ended\r\n"); |
el16ba | 6:3f5d21480f11 | 290 | power(1); |
el16ba | 6:3f5d21480f11 | 291 | flg_exit = true; |
el16ba | 6:3f5d21480f11 | 292 | break; |
el16ba | 6:3f5d21480f11 | 293 | }else{ |
el16ba | 6:3f5d21480f11 | 294 | pc.printf("Unknown Command, enter \"end\" to end loop\r\n"); |
el16ba | 6:3f5d21480f11 | 295 | str = ""; |
el16ba | 6:3f5d21480f11 | 296 | } |
el16ba | 6:3f5d21480f11 | 297 | |
el16ba | 6:3f5d21480f11 | 298 | if(flg_loop0){ |
el16ba | 6:3f5d21480f11 | 299 | pc.printf("pwr Off \r\n"); |
el16ba | 6:3f5d21480f11 | 300 | } |
el16ba | 6:3f5d21480f11 | 301 | |
el16ba | 6:3f5d21480f11 | 302 | if(flg_loop1){ |
el16ba | 6:3f5d21480f11 | 303 | pc.printf("pwr On\r\n"); |
el16ba | 6:3f5d21480f11 | 304 | } |
el16ba | 6:3f5d21480f11 | 305 | flg_loop0 = 0; |
el16ba | 6:3f5d21480f11 | 306 | flg_loop1 = 0; |
el16ba | 6:3f5d21480f11 | 307 | |
el16ba | 6:3f5d21480f11 | 308 | } |
el16ba | 6:3f5d21480f11 | 309 | } |
el16ba | 6:3f5d21480f11 | 310 | |
el16ba | 6:3f5d21480f11 | 311 | |
el16ba | 6:3f5d21480f11 | 312 | |
el16ba | 6:3f5d21480f11 | 313 | // Allows the user to operate the LPC1768 via serial communications |
el16ba | 0:9dd5634b94f3 | 314 | void serial_mode() |
el16ba | 0:9dd5634b94f3 | 315 | { |
el16ba | 3:16478dd3d1f3 | 316 | pc.printf("Serial Mode \r\n"); |
el16ba | 0:9dd5634b94f3 | 317 | bool flg_read = true; |
el16ba | 0:9dd5634b94f3 | 318 | char c; |
el16ba | 4:44760dafcab7 | 319 | string str_c = ""; |
el16ba | 1:8cad7e957324 | 320 | |
el16ba | 3:16478dd3d1f3 | 321 | while(flg_read) { |
el16ba | 4:44760dafcab7 | 322 | str_c = read_serial_input(); |
el16ba | 6:3f5d21480f11 | 323 | if (str_c == "on") { // turns machine on |
el16ba | 4:44760dafcab7 | 324 | power(1); |
el16ba | 5:a8297e5f4de1 | 325 | pc.printf("power on\r\n"); |
el16ba | 6:3f5d21480f11 | 326 | |
el16ba | 6:3f5d21480f11 | 327 | } else if(str_c == "off") { // turns machine off |
el16ba | 4:44760dafcab7 | 328 | power(0); |
el16ba | 5:a8297e5f4de1 | 329 | pc.printf("power off\r\n"); |
el16ba | 6:3f5d21480f11 | 330 | |
el16ba | 5:a8297e5f4de1 | 331 | } else if(str_c == "cyclew") { // runs a powercycle |
el16ba | 4:44760dafcab7 | 332 | cycle_wait(); |
el16ba | 4:44760dafcab7 | 333 | pc.printf("cycled \r\n"); |
el16ba | 6:3f5d21480f11 | 334 | |
el16ba | 6:3f5d21480f11 | 335 | } else if(str_c == "loopw") { // runs a continuous powercycle loop |
el16ba | 6:3f5d21480f11 | 336 | pc.printf("Looping. Restart unit to end loop\r\n"); |
el16ba | 6:3f5d21480f11 | 337 | cycle_loopw(); |
el16ba | 6:3f5d21480f11 | 338 | |
el16ba | 6:3f5d21480f11 | 339 | } else if (str_c == "cycleto") { |
el16ba | 6:3f5d21480f11 | 340 | cycle_timeout(); |
el16ba | 6:3f5d21480f11 | 341 | while(flg_loop0 == 0 or flg_loop1 == 0){ |
el16ba | 6:3f5d21480f11 | 342 | led2 = !led2; |
el16ba | 6:3f5d21480f11 | 343 | ThisThread::sleep_for(100); |
el16ba | 6:3f5d21480f11 | 344 | } |
el16ba | 6:3f5d21480f11 | 345 | printf("cycleto finish\r\n"); |
el16ba | 6:3f5d21480f11 | 346 | |
el16ba | 6:3f5d21480f11 | 347 | } else if (str_c == "loopto") { |
el16ba | 6:3f5d21480f11 | 348 | pc.printf("starting loopto \r\n"); |
el16ba | 6:3f5d21480f11 | 349 | cycle_loopto(); |
el16ba | 6:3f5d21480f11 | 350 | |
el16ba | 6:3f5d21480f11 | 351 | } else if (str_c == "looptick") { |
el16ba | 6:3f5d21480f11 | 352 | pc.printf("starting looptick \r\n"); |
el16ba | 6:3f5d21480f11 | 353 | cycle_looptick(); |
el16ba | 6:3f5d21480f11 | 354 | |
el16ba | 5:a8297e5f4de1 | 355 | } else if(str_c == "newval") { // cahnges cycle time values |
el16ba | 4:44760dafcab7 | 356 | pc.printf("enter your new on and off times(ms)\r\n"); |
el16ba | 4:44760dafcab7 | 357 | pc.puts("Time on\r\n"); |
el16ba | 4:44760dafcab7 | 358 | configData[0] = get_num_input(); |
el16ba | 6:3f5d21480f11 | 359 | pc.puts("Time off\r\n"); |
el16ba | 4:44760dafcab7 | 360 | configData[2] = get_num_input(); |
el16ba | 4:44760dafcab7 | 361 | pc.printf("Data: %Lf, %Lf, %Lf\r\n",configData[0],configData[1],configData[2]); |
el16ba | 6:3f5d21480f11 | 362 | |
el16ba | 0:9dd5634b94f3 | 363 | } else { |
el16ba | 6:3f5d21480f11 | 364 | pc.printf("Unknown command: [%s], see README for commands \r\n", str_c.c_str()); |
el16ba | 0:9dd5634b94f3 | 365 | } |
el16ba | 4:44760dafcab7 | 366 | str_c = ""; |
el16ba | 0:9dd5634b94f3 | 367 | } |
el16ba | 3:16478dd3d1f3 | 368 | |
el16ba | 0:9dd5634b94f3 | 369 | } |
el16ba | 0:9dd5634b94f3 | 370 | |
el16ba | 0:9dd5634b94f3 | 371 | int main() |
el16ba | 0:9dd5634b94f3 | 372 | { |
el16ba | 0:9dd5634b94f3 | 373 | init(); |
el16ba | 4:44760dafcab7 | 374 | |
el16ba | 1:8cad7e957324 | 375 | while(!flg_END) { |
el16ba | 3:16478dd3d1f3 | 376 | switch((int)configData[1]) { |
el16ba | 3:16478dd3d1f3 | 377 | case(1): //Cut the power to the machine once |
el16ba | 3:16478dd3d1f3 | 378 | cycle_wait(); |
el16ba | 3:16478dd3d1f3 | 379 | pc.printf("cycled \r\n"); |
el16ba | 3:16478dd3d1f3 | 380 | break; |
el16ba | 1:8cad7e957324 | 381 | |
el16ba | 3:16478dd3d1f3 | 382 | case(2): //Cut the power to the machine in a loop |
el16ba | 3:16478dd3d1f3 | 383 | pc.printf("Begining Power cycle loop, to end loop press restart button \r\n"); |
el16ba | 6:3f5d21480f11 | 384 | cycle_loopw(); |
el16ba | 3:16478dd3d1f3 | 385 | break; |
el16ba | 3:16478dd3d1f3 | 386 | |
el16ba | 3:16478dd3d1f3 | 387 | case(3): //Launch in serial command mode |
el16ba | 3:16478dd3d1f3 | 388 | serial_mode(); |
el16ba | 3:16478dd3d1f3 | 389 | break; |
el16ba | 1:8cad7e957324 | 390 | } |
el16ba | 3:16478dd3d1f3 | 391 | |
el16ba | 0:9dd5634b94f3 | 392 | } |
el16ba | 0:9dd5634b94f3 | 393 | |
el16ba | 3:16478dd3d1f3 | 394 | pc.printf("Program End \r\n"); |
el16ba | 3:16478dd3d1f3 | 395 | |
el16ba | 0:9dd5634b94f3 | 396 | return 0; |
el16ba | 3:16478dd3d1f3 | 397 | } |