chad
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
main.cpp@15:85616bc0e2ae, 2017-03-08 (annotated)
- Committer:
- f_legge
- Date:
- Wed Mar 08 16:17:09 2017 +0000
- Revision:
- 15:85616bc0e2ae
- Parent:
- 14:ede0e7ed2745
- Child:
- 16:bebcc7d24f3e
Task 2 and 4 are working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
f_legge | 4:70553c83c65a | 1 | // Paramater Allocation |
f_legge | 4:70553c83c65a | 2 | // Paramater: 17 |
f_legge | 4:70553c83c65a | 3 | // Log Option: 1 (uSD) |
f_legge | 4:70553c83c65a | 4 | // Watchdog Pulse Length: 6ms |
f_legge | 4:70553c83c65a | 5 | // Watchdog Repetion Rate: 0.5 |
f_legge | 4:70553c83c65a | 6 | // Error Display: 1 (LCD) |
f_legge | 4:70553c83c65a | 7 | // Execution time display: Task5 (LDC display) |
f_legge | 4:70553c83c65a | 8 | |
f_legge | 13:ad04937ca366 | 9 | #include "main.h" |
f_legge | 0:10e3e2697134 | 10 | |
f_legge | 14:ede0e7ed2745 | 11 | |
f_legge | 14:ede0e7ed2745 | 12 | |
f_legge | 4:70553c83c65a | 13 | // Pointers to LCD Screen |
f_legge | 4:70553c83c65a | 14 | MCP23017 *par_port; // pointer to 16-bit parallel I/O chip |
f_legge | 4:70553c83c65a | 15 | WattBob_TextLCD *lcd; // pointer to 2*16 character LCD object |
f_legge | 13:ad04937ca366 | 16 | FILE *fp; // pointer to uSD object |
f_legge | 4:70553c83c65a | 17 | |
f_legge | 14:ede0e7ed2745 | 18 | //SDFileSystem sd(p5, p6, p7, p8, "sd"); //uSD pinout |
f_legge | 14:ede0e7ed2745 | 19 | |
f_legge | 4:70553c83c65a | 20 | // Digital I/O p11 to p20 |
f_legge | 14:ede0e7ed2745 | 21 | DigitalIn Fq(p11); // Digital frequency in for measurement |
f_legge | 14:ede0e7ed2745 | 22 | DigitalIn DS(p12); // Digital switch input |
f_legge | 14:ede0e7ed2745 | 23 | DigitalIn DS_s(p13); // Digital shutdown switch |
f_legge | 14:ede0e7ed2745 | 24 | DigitalOut WD_pulse_out(p14); // Watchdog Pulse |
f_legge | 14:ede0e7ed2745 | 25 | DigitalOut led1(LED1); |
f_legge | 14:ede0e7ed2745 | 26 | DigitalOut led2(LED2); |
f_legge | 4:70553c83c65a | 27 | |
f_legge | 4:70553c83c65a | 28 | // Analogue I/O p15 to p20 |
f_legge | 14:ede0e7ed2745 | 29 | AnalogIn A1_(p15); // Analogue input to be filtered |
f_legge | 14:ede0e7ed2745 | 30 | AnalogIn A2_(p16); // Analogue input to be filtered |
f_legge | 4:70553c83c65a | 31 | |
f_legge | 4:70553c83c65a | 32 | // Timer objects |
f_legge | 14:ede0e7ed2745 | 33 | //Ticker tick; // Clock timer for CycExec |
f_legge | 14:ede0e7ed2745 | 34 | Ticker ticker; |
f_legge | 15:85616bc0e2ae | 35 | Timer timer; // Frequency Timer |
f_legge | 15:85616bc0e2ae | 36 | Timer T5; // Timer for idle states |
f_legge | 4:70553c83c65a | 37 | |
f_legge | 4:70553c83c65a | 38 | // Constant Declaration |
f_legge | 5:e1ade53bce83 | 39 | const int SampFreq = 100; // Sampling Frequency |
f_legge | 5:e1ade53bce83 | 40 | const int WD = 6000; // Watchdog pulse length |
f_legge | 4:70553c83c65a | 41 | |
f_legge | 4:70553c83c65a | 42 | // Variable Declaration |
f_legge | 14:ede0e7ed2745 | 43 | int tck = 1; // Used to define what task is called (CycExec) |
f_legge | 0:10e3e2697134 | 44 | |
f_legge | 15:85616bc0e2ae | 45 | int FqIn; // Frequency input boolean |
f_legge | 4:70553c83c65a | 46 | int period = 0; // Frequency timer variable (Frequency Check) |
f_legge | 4:70553c83c65a | 47 | int freq = 0; // Frequency return variable (Frequency Check) |
f_legge | 4:70553c83c65a | 48 | |
f_legge | 15:85616bc0e2ae | 49 | int DSIn; // Switch Input boolean |
f_legge | 13:ad04937ca366 | 50 | int switch_state = 0; |
f_legge | 10:2414d28be4ba | 51 | |
f_legge | 15:85616bc0e2ae | 52 | int WD_pulse = 0; |
f_legge | 12:d088f8024cf0 | 53 | |
f_legge | 10:2414d28be4ba | 54 | |
f_legge | 15:85616bc0e2ae | 55 | float A1_in; // Analogue 1 input variable |
f_legge | 15:85616bc0e2ae | 56 | float A2_in; // Analogue 2 input variable |
f_legge | 15:85616bc0e2ae | 57 | float A1_val = 0; // Analogue 1 return variable (Analogue In) |
f_legge | 15:85616bc0e2ae | 58 | float A2_val = 0; // Analogue 2 return variable (Analogue In) |
f_legge | 4:70553c83c65a | 59 | |
f_legge | 14:ede0e7ed2745 | 60 | int DS_sIn = DS_s; // Shutdown Switch |
f_legge | 9:d04a313420c7 | 61 | int error_code = 0; // Error code variable |
f_legge | 6:c538f317f426 | 62 | |
f_legge | 9:d04a313420c7 | 63 | int logcount = 0; // Keep track of log number |
f_legge | 4:70553c83c65a | 64 | |
f_legge | 14:ede0e7ed2745 | 65 | |
f_legge | 14:ede0e7ed2745 | 66 | |
f_legge | 4:70553c83c65a | 67 | //////////////////////////////////////////////////////////////////////////////// |
f_legge | 4:70553c83c65a | 68 | // |
f_legge | 4:70553c83c65a | 69 | // Main Program |
f_legge | 4:70553c83c65a | 70 | // |
f_legge | 13:ad04937ca366 | 71 | |
f_legge | 13:ad04937ca366 | 72 | void CycExec() |
f_legge | 14:ede0e7ed2745 | 73 | { |
f_legge | 14:ede0e7ed2745 | 74 | /* |
f_legge | 14:ede0e7ed2745 | 75 | if(tck == 2){ // Every Second (needs offset) |
f_legge | 14:ede0e7ed2745 | 76 | //Task1(); |
f_legge | 14:ede0e7ed2745 | 77 | lcd->locate(0,0); |
f_legge | 14:ede0e7ed2745 | 78 | } |
f_legge | 14:ede0e7ed2745 | 79 | else if(tck == 4){ // Every 1/3 sec |
f_legge | 14:ede0e7ed2745 | 80 | //Task2(); |
f_legge | 14:ede0e7ed2745 | 81 | lcd->printf("Test"); |
f_legge | 14:ede0e7ed2745 | 82 | } |
f_legge | 14:ede0e7ed2745 | 83 | else if(tck % 80 == 7){ // Every 2 sec |
f_legge | 14:ede0e7ed2745 | 84 | Task3(); |
f_legge | 14:ede0e7ed2745 | 85 | } |
f_legge | 14:ede0e7ed2745 | 86 | else if(tck % 20 == 0){ // Every 1/2 sec |
f_legge | 14:ede0e7ed2745 | 87 | Task4(); |
f_legge | 14:ede0e7ed2745 | 88 | } |
f_legge | 14:ede0e7ed2745 | 89 | else if(tck % 80 == 1){ // Every 2 sec |
f_legge | 14:ede0e7ed2745 | 90 | Task5(); |
f_legge | 14:ede0e7ed2745 | 91 | } |
f_legge | 14:ede0e7ed2745 | 92 | else if(tck % 20 == 3){ // Every 0.5 sec |
f_legge | 14:ede0e7ed2745 | 93 | Task6(); |
f_legge | 14:ede0e7ed2745 | 94 | } |
f_legge | 14:ede0e7ed2745 | 95 | else if(tck % 20 == 10){ // Every 1/2 sec |
f_legge | 14:ede0e7ed2745 | 96 | Task7(); |
f_legge | 14:ede0e7ed2745 | 97 | } |
f_legge | 14:ede0e7ed2745 | 98 | else{ |
f_legge | 14:ede0e7ed2745 | 99 | Task8(); |
f_legge | 14:ede0e7ed2745 | 100 | } */ |
f_legge | 14:ede0e7ed2745 | 101 | |
f_legge | 15:85616bc0e2ae | 102 | Task4(); |
f_legge | 14:ede0e7ed2745 | 103 | |
f_legge | 14:ede0e7ed2745 | 104 | //lcd->locate(0,0); |
f_legge | 14:ede0e7ed2745 | 105 | //lcd->printf("Tck: %d", tck); |
f_legge | 14:ede0e7ed2745 | 106 | led2 = !led2; |
f_legge | 14:ede0e7ed2745 | 107 | |
f_legge | 15:85616bc0e2ae | 108 | FqIn = Fq; |
f_legge | 15:85616bc0e2ae | 109 | DSIn = DS; |
f_legge | 15:85616bc0e2ae | 110 | A1_in = A1_; |
f_legge | 15:85616bc0e2ae | 111 | A2_in = A2_; |
f_legge | 15:85616bc0e2ae | 112 | DS_sIn = DS_s; |
f_legge | 15:85616bc0e2ae | 113 | WD_pulse_out = WD_pulse; |
f_legge | 15:85616bc0e2ae | 114 | |
f_legge | 15:85616bc0e2ae | 115 | /*lcd->locate(0,0); |
f_legge | 15:85616bc0e2ae | 116 | lcd->printf("S: %d", switch_state);*/ |
f_legge | 15:85616bc0e2ae | 117 | |
f_legge | 14:ede0e7ed2745 | 118 | tck++; |
f_legge | 15:85616bc0e2ae | 119 | |
f_legge | 14:ede0e7ed2745 | 120 | } |
f_legge | 14:ede0e7ed2745 | 121 | |
f_legge | 4:70553c83c65a | 122 | |
f_legge | 4:70553c83c65a | 123 | int main() |
f_legge | 14:ede0e7ed2745 | 124 | { |
f_legge | 4:70553c83c65a | 125 | // LCD Init |
f_legge | 4:70553c83c65a | 126 | par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip |
f_legge | 14:ede0e7ed2745 | 127 | par_port->config(0x0F00, 0x0F00, 0x0F00); |
f_legge | 14:ede0e7ed2745 | 128 | |
f_legge | 4:70553c83c65a | 129 | lcd = new WattBob_TextLCD(par_port); // initialise 2*26 char display |
f_legge | 4:70553c83c65a | 130 | par_port->write_bit(1,BL_BIT); // turn LCD backlight ON |
f_legge | 14:ede0e7ed2745 | 131 | |
f_legge | 4:70553c83c65a | 132 | lcd->cls(); // clear display |
f_legge | 4:70553c83c65a | 133 | |
f_legge | 14:ede0e7ed2745 | 134 | |
f_legge | 14:ede0e7ed2745 | 135 | |
f_legge | 4:70553c83c65a | 136 | // .csv log Init |
f_legge | 14:ede0e7ed2745 | 137 | //mkdir("/sd/logs", 0777); |
f_legge | 14:ede0e7ed2745 | 138 | //fp = fopen ("/sd/logs/log.txt", "w"); // Pointer to log file on uSD |
f_legge | 14:ede0e7ed2745 | 139 | //fprintf(fp, "Log of Frazer Legge's Embedded Software Assignment 2\n\n"); |
f_legge | 14:ede0e7ed2745 | 140 | |
f_legge | 14:ede0e7ed2745 | 141 | //tick.start(CycExec); |
f_legge | 14:ede0e7ed2745 | 142 | |
f_legge | 14:ede0e7ed2745 | 143 | ticker.attach(&CycExec, 0.025); // Period set to 25ms |
f_legge | 4:70553c83c65a | 144 | |
f_legge | 14:ede0e7ed2745 | 145 | /*lcd->locate(0,0); |
f_legge | 14:ede0e7ed2745 | 146 | lcd->printf("Tck: %d", tck);*/ |
f_legge | 14:ede0e7ed2745 | 147 | |
f_legge | 4:70553c83c65a | 148 | while(1){ |
f_legge | 14:ede0e7ed2745 | 149 | led1 = !led1; |
f_legge | 15:85616bc0e2ae | 150 | wait(0.2); |
f_legge | 4:70553c83c65a | 151 | } |
f_legge | 14:ede0e7ed2745 | 152 | } |
f_legge | 14:ede0e7ed2745 | 153 | |
f_legge | 14:ede0e7ed2745 | 154 | |
f_legge | 14:ede0e7ed2745 | 155 | |
f_legge | 14:ede0e7ed2745 | 156 |