preliminary brownout generator code

Committer:
el16ba
Date:
Tue Feb 04 17:37:01 2020 +0000
Revision:
100:dd9492604669
Parent:
99:69dcd2885fbc
functioning first draft

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 82:abf1b1785bd7 1
Jonathan Austin 0:2757d7abb7d9 2 #include "mbed.h"
el16ba 99:69dcd2885fbc 3 #include <string>
el16ba 99:69dcd2885fbc 4 #include <stdio.h>
el16ba 99:69dcd2885fbc 5 #include <stdlib.h>
Jonathan Austin 0:2757d7abb7d9 6
Jonathan Austin 0:2757d7abb7d9 7 DigitalOut led1(LED1);
el16ba 99:69dcd2885fbc 8 DigitalOut led2(LED2);
el16ba 99:69dcd2885fbc 9 DigitalOut led3(LED3);
el16ba 99:69dcd2885fbc 10 DigitalOut led4(LED4);
el16ba 99:69dcd2885fbc 11 DigitalOut do21(p21);
el16ba 99:69dcd2885fbc 12 InterruptIn di22(p22,PullDown);
Jonathan Austin 0:2757d7abb7d9 13
el16ba 99:69dcd2885fbc 14
el16ba 99:69dcd2885fbc 15 Serial pc(USBTX, USBRX); // for PC debug
el16ba 99:69dcd2885fbc 16 LocalFileSystem fs("local");
el16ba 99:69dcd2885fbc 17
el16ba 99:69dcd2885fbc 18 bool flg_start = 0;
el16ba 99:69dcd2885fbc 19 long double configData[3];
el16ba 99:69dcd2885fbc 20 string strData[3];
el16ba 99:69dcd2885fbc 21
el16ba 99:69dcd2885fbc 22 //returns if the given character is a number or decimal point character
el16ba 99:69dcd2885fbc 23 bool Is_Num_Char(char c)
el16ba 99:69dcd2885fbc 24 {
el16ba 99:69dcd2885fbc 25 bool isChar = false;
el16ba 99:69dcd2885fbc 26 if((c >= '0' and c <= '9') or c == '.') {
el16ba 99:69dcd2885fbc 27 isChar = true;
el16ba 99:69dcd2885fbc 28 }
el16ba 99:69dcd2885fbc 29 return isChar;
el16ba 99:69dcd2885fbc 30 }
el16ba 99:69dcd2885fbc 31
el16ba 99:69dcd2885fbc 32 //From: https://os.mbed.com/questions/83075/Is-it-possible-to-read-a-small-text-file/
el16ba 99:69dcd2885fbc 33 //Reads config.txt from local drive
el16ba 99:69dcd2885fbc 34 bool Print_Config()
el16ba 99:69dcd2885fbc 35 {
el16ba 99:69dcd2885fbc 36 bool flg_error;
el16ba 99:69dcd2885fbc 37 printf("Opening file 'config.txt'... ");
el16ba 99:69dcd2885fbc 38 FILE* fp = fopen("/local/config.txt", "r");
el16ba 99:69dcd2885fbc 39 printf("%s\n\r", (!fp ? "Fail :(" : "OK"));
el16ba 99:69dcd2885fbc 40 if (!fp) {
el16ba 99:69dcd2885fbc 41 error("error: %s (%d)\n", strerror(errno), -errno);
el16ba 99:69dcd2885fbc 42 flg_error = 1;
el16ba 99:69dcd2885fbc 43 }
el16ba 99:69dcd2885fbc 44 while (!feof(fp)) {
el16ba 99:69dcd2885fbc 45 int c = fgetc(fp);
el16ba 99:69dcd2885fbc 46 printf("%c", c);
el16ba 99:69dcd2885fbc 47 }
el16ba 99:69dcd2885fbc 48
el16ba 99:69dcd2885fbc 49 fclose(fp);
el16ba 99:69dcd2885fbc 50 printf("\r\n===========\r\n");
el16ba 99:69dcd2885fbc 51 return flg_error;
el16ba 99:69dcd2885fbc 52 }
mbed_official 88:bea4f2daa48c 53
el16ba 99:69dcd2885fbc 54 //Reads reads and converts data from config file
el16ba 99:69dcd2885fbc 55 void Get_Config_data()
el16ba 99:69dcd2885fbc 56 {
el16ba 99:69dcd2885fbc 57 printf("Get Config data\r\n");
el16ba 99:69dcd2885fbc 58 FILE* fp = fopen("/local/config.txt", "r");
el16ba 99:69dcd2885fbc 59 int c;
el16ba 100:dd9492604669 60 char stateData = 0; //which data it is reading on duration, off duration e.t.c.
el16ba 99:69dcd2885fbc 61 char stateRead = 0; //0 = parsing, 1 = reading data
el16ba 99:69dcd2885fbc 62 char* pEnd;
el16ba 99:69dcd2885fbc 63 string data;
el16ba 99:69dcd2885fbc 64
el16ba 99:69dcd2885fbc 65 while (!feof(fp)) {
el16ba 99:69dcd2885fbc 66 c = fgetc(fp);
el16ba 99:69dcd2885fbc 67 if (Is_Num_Char(c)) {
el16ba 99:69dcd2885fbc 68 data.push_back(c);
el16ba 99:69dcd2885fbc 69 stateRead = 1;
el16ba 99:69dcd2885fbc 70 c = NULL;
el16ba 99:69dcd2885fbc 71 } else if (stateRead == 1) {
el16ba 99:69dcd2885fbc 72 //convert to double and add to Data
el16ba 99:69dcd2885fbc 73 strData[stateData] = data;
el16ba 99:69dcd2885fbc 74 configData[stateData] = strtod(data.c_str(), &pEnd);
el16ba 99:69dcd2885fbc 75 data.clear();
el16ba 99:69dcd2885fbc 76 stateData++;
el16ba 99:69dcd2885fbc 77 stateRead = 0;
el16ba 99:69dcd2885fbc 78 }
el16ba 99:69dcd2885fbc 79 }
el16ba 99:69dcd2885fbc 80
el16ba 99:69dcd2885fbc 81 fclose(fp);
el16ba 100:dd9492604669 82
el16ba 100:dd9492604669 83 configData[0] = configData[0] /10; //wait functions
el16ba 100:dd9492604669 84 configData[2] = configData[2] /10;
el16ba 100:dd9492604669 85
el16ba 99:69dcd2885fbc 86 }
el16ba 99:69dcd2885fbc 87
el16ba 100:dd9492604669 88 // Runs wait functions and divides by 10 to account for error in function
el16ba 100:dd9492604669 89 // unused as calling function causes too much of a delay when below miliseconds
el16ba 100:dd9492604669 90 void wait_fixed(float t){
el16ba 100:dd9492604669 91 wait(t / 10);
el16ba 100:dd9492604669 92 }
el16ba 100:dd9492604669 93
el16ba 100:dd9492604669 94
el16ba 99:69dcd2885fbc 95 //Flips output
el16ba 99:69dcd2885fbc 96 void run_Cycle()
el16ba 99:69dcd2885fbc 97 {
el16ba 100:dd9492604669 98 //printf("On \r\n");
el16ba 99:69dcd2885fbc 99 do21 = 1;
el16ba 99:69dcd2885fbc 100 led1 = 1;
el16ba 100:dd9492604669 101 wait(configData[0]);
el16ba 100:dd9492604669 102
el16ba 100:dd9492604669 103 //printf("Off \r\n");
el16ba 99:69dcd2885fbc 104 do21 = 0;
el16ba 99:69dcd2885fbc 105 led1 = 0;
el16ba 99:69dcd2885fbc 106 }
el16ba 99:69dcd2885fbc 107
el16ba 99:69dcd2885fbc 108 //interrupt function to start cycling
el16ba 99:69dcd2885fbc 109 void start()
el16ba 99:69dcd2885fbc 110 {
el16ba 99:69dcd2885fbc 111 flg_start = 1;
el16ba 99:69dcd2885fbc 112 }
el16ba 99:69dcd2885fbc 113
el16ba 99:69dcd2885fbc 114 //init function
el16ba 99:69dcd2885fbc 115 void init()
el16ba 99:69dcd2885fbc 116 {
el16ba 99:69dcd2885fbc 117 do21 = 0;
el16ba 99:69dcd2885fbc 118 di22.rise(&start);
el16ba 99:69dcd2885fbc 119 Print_Config();
el16ba 99:69dcd2885fbc 120 Get_Config_data();
el16ba 99:69dcd2885fbc 121 }
el16ba 99:69dcd2885fbc 122
mbed_official 82:abf1b1785bd7 123 int main()
mbed_official 82:abf1b1785bd7 124 {
el16ba 99:69dcd2885fbc 125 printf("STARTING\r\n");
el16ba 99:69dcd2885fbc 126 init();
el16ba 100:dd9492604669 127 printf("Strings: On: %s, repeat: %s, Off: %s \r\n", strData[0].c_str(),strData[1].c_str(), strData[2].c_str() );
el16ba 100:dd9492604669 128 printf("Data: %Lf, %Lf, %Lf\r\n",configData[0]*10,configData[1],configData[2]*10); //multiplying back to real values
mbed_official 82:abf1b1785bd7 129
mbed_official 82:abf1b1785bd7 130
el16ba 99:69dcd2885fbc 131 while((int)configData[1] != 0) {
el16ba 99:69dcd2885fbc 132 run_Cycle();
el16ba 100:dd9492604669 133 wait(configData[2]);
Jonathan Austin 0:2757d7abb7d9 134 }
el16ba 99:69dcd2885fbc 135 run_Cycle();
el16ba 100:dd9492604669 136
el16ba 99:69dcd2885fbc 137 printf("END \r\n");
el16ba 99:69dcd2885fbc 138 return 0;
el16ba 99:69dcd2885fbc 139 }