run this here
Dependencies: Hexi_KW40Z Hexi_OLED_SSD1351
main.cpp@0:2b94f7017e4e, 2018-04-27 (annotated)
- Committer:
- trhackett
- Date:
- Fri Apr 27 05:53:47 2018 +0000
- Revision:
- 0:2b94f7017e4e
- Child:
- 1:b965810f9bb3
works completely
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
trhackett | 0:2b94f7017e4e | 1 | #include "mbed.h" |
trhackett | 0:2b94f7017e4e | 2 | #include "Ticker.h" |
trhackett | 0:2b94f7017e4e | 3 | #include <stdlib.h> |
trhackett | 0:2b94f7017e4e | 4 | |
trhackett | 0:2b94f7017e4e | 5 | InterruptIn catchChange(PTD2); |
trhackett | 0:2b94f7017e4e | 6 | Serial pc(USBTX, USBRX); |
trhackett | 0:2b94f7017e4e | 7 | |
trhackett | 0:2b94f7017e4e | 8 | // software PWM using DigitalOut |
trhackett | 0:2b94f7017e4e | 9 | DigitalOut pulse(PTA10); |
trhackett | 0:2b94f7017e4e | 10 | |
trhackett | 0:2b94f7017e4e | 11 | float PERIOD = 0.06f; |
trhackett | 0:2b94f7017e4e | 12 | float DUTYCYCLE = 0.50f; |
trhackett | 0:2b94f7017e4e | 13 | |
trhackett | 0:2b94f7017e4e | 14 | // period and duty cycle that we'll be changing |
trhackett | 0:2b94f7017e4e | 15 | float currentPeriod = PERIOD; |
trhackett | 0:2b94f7017e4e | 16 | float currentDutyCycle = DUTYCYCLE; |
trhackett | 0:2b94f7017e4e | 17 | |
trhackett | 0:2b94f7017e4e | 18 | // period is the time between the previous rising edge |
trhackett | 0:2b94f7017e4e | 19 | // and the current one, so recompute each time you |
trhackett | 0:2b94f7017e4e | 20 | // encounter a rising edge |
trhackett | 0:2b94f7017e4e | 21 | float period; |
trhackett | 0:2b94f7017e4e | 22 | Timer t; |
trhackett | 0:2b94f7017e4e | 23 | |
trhackett | 0:2b94f7017e4e | 24 | // D is fraction of time that was high during the preceding interval |
trhackett | 0:2b94f7017e4e | 25 | float D; |
trhackett | 0:2b94f7017e4e | 26 | Timer highTime; |
trhackett | 0:2b94f7017e4e | 27 | Timer lowTime; |
trhackett | 0:2b94f7017e4e | 28 | |
trhackett | 0:2b94f7017e4e | 29 | // every 10 rising edges, print T and D |
trhackett | 0:2b94f7017e4e | 30 | int risingEdges = 0; |
trhackett | 0:2b94f7017e4e | 31 | |
trhackett | 0:2b94f7017e4e | 32 | // add in a thread that will do printing so it |
trhackett | 0:2b94f7017e4e | 33 | // doesn't interfere with my measurements |
trhackett | 0:2b94f7017e4e | 34 | EventQueue q1; |
trhackett | 0:2b94f7017e4e | 35 | Thread t1; |
trhackett | 0:2b94f7017e4e | 36 | |
trhackett | 0:2b94f7017e4e | 37 | // ticker to change from low to high and one to change from high to low |
trhackett | 0:2b94f7017e4e | 38 | Ticker lowToHigh; // low to high every period seconds |
trhackett | 0:2b94f7017e4e | 39 | Ticker highToLow; // high to low every period + period * duty_cycle seconds |
trhackett | 0:2b94f7017e4e | 40 | |
trhackett | 0:2b94f7017e4e | 41 | // switch the digital signal whenever the ticker goes off |
trhackett | 0:2b94f7017e4e | 42 | void tickerHandle() { |
trhackett | 0:2b94f7017e4e | 43 | if (pulse.read() == 1) { |
trhackett | 0:2b94f7017e4e | 44 | pulse.write(0); |
trhackett | 0:2b94f7017e4e | 45 | } else { |
trhackett | 0:2b94f7017e4e | 46 | pulse.write(1); |
trhackett | 0:2b94f7017e4e | 47 | } |
trhackett | 0:2b94f7017e4e | 48 | } |
trhackett | 0:2b94f7017e4e | 49 | |
trhackett | 0:2b94f7017e4e | 50 | void printData() { |
trhackett | 0:2b94f7017e4e | 51 | // this does not run in the ISR |
trhackett | 0:2b94f7017e4e | 52 | pc.printf("mbed> %i, %.3f\n\r",(int)(period*1000000.0f),D); |
trhackett | 0:2b94f7017e4e | 53 | } |
trhackett | 0:2b94f7017e4e | 54 | |
trhackett | 0:2b94f7017e4e | 55 | void riseHandle() { |
trhackett | 0:2b94f7017e4e | 56 | // recompute the period |
trhackett | 0:2b94f7017e4e | 57 | period = t.read(); |
trhackett | 0:2b94f7017e4e | 58 | t.reset(); |
trhackett | 0:2b94f7017e4e | 59 | t.start(); |
trhackett | 0:2b94f7017e4e | 60 | |
trhackett | 0:2b94f7017e4e | 61 | // if it's the first rising edge of a 10 edge interval, |
trhackett | 0:2b94f7017e4e | 62 | // then reset both timers |
trhackett | 0:2b94f7017e4e | 63 | if (risingEdges == 0) { |
trhackett | 0:2b94f7017e4e | 64 | lowTime.reset(); |
trhackett | 0:2b94f7017e4e | 65 | highTime.reset(); |
trhackett | 0:2b94f7017e4e | 66 | lowTime.stop(); |
trhackett | 0:2b94f7017e4e | 67 | highTime.start(); |
trhackett | 0:2b94f7017e4e | 68 | |
trhackett | 0:2b94f7017e4e | 69 | // and you're in high time on the first rising edge |
trhackett | 0:2b94f7017e4e | 70 | risingEdges++; |
trhackett | 0:2b94f7017e4e | 71 | } |
trhackett | 0:2b94f7017e4e | 72 | |
trhackett | 0:2b94f7017e4e | 73 | // if it's the tenth, then store D so that someone else can |
trhackett | 0:2b94f7017e4e | 74 | // print it out. reset the timers and rising edge count |
trhackett | 0:2b94f7017e4e | 75 | else if (risingEdges >= 9) { |
trhackett | 0:2b94f7017e4e | 76 | float h = highTime.read(); |
trhackett | 0:2b94f7017e4e | 77 | float l = lowTime.read(); |
trhackett | 0:2b94f7017e4e | 78 | D = h / (h + l); |
trhackett | 0:2b94f7017e4e | 79 | |
trhackett | 0:2b94f7017e4e | 80 | lowTime.reset(); |
trhackett | 0:2b94f7017e4e | 81 | highTime.reset(); |
trhackett | 0:2b94f7017e4e | 82 | lowTime.stop(); |
trhackett | 0:2b94f7017e4e | 83 | highTime.start(); |
trhackett | 0:2b94f7017e4e | 84 | |
trhackett | 0:2b94f7017e4e | 85 | risingEdges++; |
trhackett | 0:2b94f7017e4e | 86 | } |
trhackett | 0:2b94f7017e4e | 87 | |
trhackett | 0:2b94f7017e4e | 88 | // if it's rising edge 2 ... 9, then just increment and start |
trhackett | 0:2b94f7017e4e | 89 | // the high timer and stop the low timer |
trhackett | 0:2b94f7017e4e | 90 | else { |
trhackett | 0:2b94f7017e4e | 91 | risingEdges++; |
trhackett | 0:2b94f7017e4e | 92 | lowTime.stop(); |
trhackett | 0:2b94f7017e4e | 93 | highTime.start(); |
trhackett | 0:2b94f7017e4e | 94 | } |
trhackett | 0:2b94f7017e4e | 95 | |
trhackett | 0:2b94f7017e4e | 96 | // then defer the possible printf call to the other thread |
trhackett | 0:2b94f7017e4e | 97 | if (risingEdges == 10) { |
trhackett | 0:2b94f7017e4e | 98 | q1.call(&printData); |
trhackett | 0:2b94f7017e4e | 99 | risingEdges = 0; |
trhackett | 0:2b94f7017e4e | 100 | } |
trhackett | 0:2b94f7017e4e | 101 | } |
trhackett | 0:2b94f7017e4e | 102 | |
trhackett | 0:2b94f7017e4e | 103 | // when you come to a falling edge, you should stop the high timer and |
trhackett | 0:2b94f7017e4e | 104 | // start the low timer |
trhackett | 0:2b94f7017e4e | 105 | void fallHandle() { |
trhackett | 0:2b94f7017e4e | 106 | lowTime.start(); |
trhackett | 0:2b94f7017e4e | 107 | highTime.stop(); |
trhackett | 0:2b94f7017e4e | 108 | } |
trhackett | 0:2b94f7017e4e | 109 | |
trhackett | 0:2b94f7017e4e | 110 | void inputHandle() { |
trhackett | 0:2b94f7017e4e | 111 | char buff[256]; |
trhackett | 0:2b94f7017e4e | 112 | gets(buff); |
trhackett | 0:2b94f7017e4e | 113 | |
trhackett | 0:2b94f7017e4e | 114 | // extract out the values from the character array |
trhackett | 0:2b94f7017e4e | 115 | int i = 0; |
trhackett | 0:2b94f7017e4e | 116 | char p[20]; |
trhackett | 0:2b94f7017e4e | 117 | while (buff[i] != ',') { |
trhackett | 0:2b94f7017e4e | 118 | p[i] = buff[i]; |
trhackett | 0:2b94f7017e4e | 119 | ++i; |
trhackett | 0:2b94f7017e4e | 120 | } |
trhackett | 0:2b94f7017e4e | 121 | p[i] = '\0'; |
trhackett | 0:2b94f7017e4e | 122 | |
trhackett | 0:2b94f7017e4e | 123 | i += 2; |
trhackett | 0:2b94f7017e4e | 124 | int j = 0; |
trhackett | 0:2b94f7017e4e | 125 | char dc[20]; |
trhackett | 0:2b94f7017e4e | 126 | while (buff[i] != '\0') { |
trhackett | 0:2b94f7017e4e | 127 | dc[j] = buff[i]; |
trhackett | 0:2b94f7017e4e | 128 | ++i; |
trhackett | 0:2b94f7017e4e | 129 | ++j; |
trhackett | 0:2b94f7017e4e | 130 | } |
trhackett | 0:2b94f7017e4e | 131 | |
trhackett | 0:2b94f7017e4e | 132 | int T_temp = atoi(p); |
trhackett | 0:2b94f7017e4e | 133 | float D_temp = atof(dc); |
trhackett | 0:2b94f7017e4e | 134 | |
trhackett | 0:2b94f7017e4e | 135 | // make the changes to the period and duty cycle as long |
trhackett | 0:2b94f7017e4e | 136 | // as they are within range |
trhackett | 0:2b94f7017e4e | 137 | if ((T_temp >= 1000.0f && T_temp <= 60000.0f) && |
trhackett | 0:2b94f7017e4e | 138 | (D_temp >= 0.0f && D_temp <= 1.0f)) |
trhackett | 0:2b94f7017e4e | 139 | { |
trhackett | 0:2b94f7017e4e | 140 | currentPeriod = ((float)T_temp) / 1000000.0f; |
trhackett | 0:2b94f7017e4e | 141 | currentDutyCycle = D_temp; |
trhackett | 0:2b94f7017e4e | 142 | // set to low |
trhackett | 0:2b94f7017e4e | 143 | pulse.write(0); |
trhackett | 0:2b94f7017e4e | 144 | // reset the low to high ticker |
trhackett | 0:2b94f7017e4e | 145 | lowToHigh.detach(); |
trhackett | 0:2b94f7017e4e | 146 | lowToHigh.attach(&tickerHandle, currentPeriod); |
trhackett | 0:2b94f7017e4e | 147 | highToLow.detach(); |
trhackett | 0:2b94f7017e4e | 148 | // wait period * duty cycle |
trhackett | 0:2b94f7017e4e | 149 | wait(currentPeriod * currentDutyCycle); |
trhackett | 0:2b94f7017e4e | 150 | // reset the high to low ticker |
trhackett | 0:2b94f7017e4e | 151 | highToLow.attach(&tickerHandle, currentPeriod); |
trhackett | 0:2b94f7017e4e | 152 | } |
trhackett | 0:2b94f7017e4e | 153 | |
trhackett | 0:2b94f7017e4e | 154 | // print an error, non-blocking, if they input bad values |
trhackett | 0:2b94f7017e4e | 155 | else { |
trhackett | 0:2b94f7017e4e | 156 | q1.call(printf,"mbed> ERROR\r\n"); |
trhackett | 0:2b94f7017e4e | 157 | } |
trhackett | 0:2b94f7017e4e | 158 | } |
trhackett | 0:2b94f7017e4e | 159 | |
trhackett | 0:2b94f7017e4e | 160 | // main() runs in its own thread in the OS |
trhackett | 0:2b94f7017e4e | 161 | int main() { |
trhackett | 0:2b94f7017e4e | 162 | |
trhackett | 0:2b94f7017e4e | 163 | // each time you see a rising edge, recompute the period |
trhackett | 0:2b94f7017e4e | 164 | // and stop timing the low signal |
trhackett | 0:2b94f7017e4e | 165 | catchChange.rise(&riseHandle); |
trhackett | 0:2b94f7017e4e | 166 | catchChange.fall(&fallHandle); |
trhackett | 0:2b94f7017e4e | 167 | |
trhackett | 0:2b94f7017e4e | 168 | // when the user inputs something |
trhackett | 0:2b94f7017e4e | 169 | pc.attach(&inputHandle); |
trhackett | 0:2b94f7017e4e | 170 | |
trhackett | 0:2b94f7017e4e | 171 | // start low |
trhackett | 0:2b94f7017e4e | 172 | pulse.write(0); |
trhackett | 0:2b94f7017e4e | 173 | |
trhackett | 0:2b94f7017e4e | 174 | // ticker that goes from low to high every period seconds |
trhackett | 0:2b94f7017e4e | 175 | lowToHigh.attach(&tickerHandle, currentPeriod); |
trhackett | 0:2b94f7017e4e | 176 | // wait period * duty cycle |
trhackett | 0:2b94f7017e4e | 177 | wait(currentPeriod * currentDutyCycle); |
trhackett | 0:2b94f7017e4e | 178 | // ticker that goes from high to low every period seconds |
trhackett | 0:2b94f7017e4e | 179 | highToLow.attach(&tickerHandle, currentPeriod); |
trhackett | 0:2b94f7017e4e | 180 | |
trhackett | 0:2b94f7017e4e | 181 | t1.start(callback(&q1, &EventQueue::dispatch_forever)); |
trhackett | 0:2b94f7017e4e | 182 | |
trhackett | 0:2b94f7017e4e | 183 | wait(osWaitForever); |
trhackett | 0:2b94f7017e4e | 184 | } |
trhackett | 0:2b94f7017e4e | 185 | |
trhackett | 0:2b94f7017e4e | 186 | |
trhackett | 0:2b94f7017e4e | 187 | |
trhackett | 0:2b94f7017e4e | 188 | |
trhackett | 0:2b94f7017e4e | 189 | |
trhackett | 0:2b94f7017e4e | 190 | |
trhackett | 0:2b94f7017e4e | 191 | |
trhackett | 0:2b94f7017e4e | 192 | |
trhackett | 0:2b94f7017e4e | 193 | |
trhackett | 0:2b94f7017e4e | 194 | //#include "mbed.h" |
trhackett | 0:2b94f7017e4e | 195 | //#include <string> |
trhackett | 0:2b94f7017e4e | 196 | //#include <sstream> |
trhackett | 0:2b94f7017e4e | 197 | //#include "Ticker.h" |
trhackett | 0:2b94f7017e4e | 198 | // |
trhackett | 0:2b94f7017e4e | 199 | // |
trhackett | 0:2b94f7017e4e | 200 | //InterruptIn catchChange(PTD2); |
trhackett | 0:2b94f7017e4e | 201 | //// printing from the device |
trhackett | 0:2b94f7017e4e | 202 | //Serial pc(USBTX, USBRX); |
trhackett | 0:2b94f7017e4e | 203 | // |
trhackett | 0:2b94f7017e4e | 204 | //// software PWM using DigitalOut |
trhackett | 0:2b94f7017e4e | 205 | //DigitalOut pulse(PTA10); |
trhackett | 0:2b94f7017e4e | 206 | // |
trhackett | 0:2b94f7017e4e | 207 | //// some defaults |
trhackett | 0:2b94f7017e4e | 208 | //float DEFAULT_PERIOD = 0.1f; |
trhackett | 0:2b94f7017e4e | 209 | //float DEFAULT_DUTYCYCLE = 0.5f; |
trhackett | 0:2b94f7017e4e | 210 | //float currentPeriod; |
trhackett | 0:2b94f7017e4e | 211 | //float currentDutyCycle; |
trhackett | 0:2b94f7017e4e | 212 | // |
trhackett | 0:2b94f7017e4e | 213 | //// ticker to change from low to high and one to change from high to low |
trhackett | 0:2b94f7017e4e | 214 | //Ticker lowToHigh; |
trhackett | 0:2b94f7017e4e | 215 | //Ticker highToLow; |
trhackett | 0:2b94f7017e4e | 216 | // |
trhackett | 0:2b94f7017e4e | 217 | //// every 10 rising edges, print T and D |
trhackett | 0:2b94f7017e4e | 218 | //int risingEdges = 0; |
trhackett | 0:2b94f7017e4e | 219 | // |
trhackett | 0:2b94f7017e4e | 220 | //// T is time between current edge and the previous one |
trhackett | 0:2b94f7017e4e | 221 | //int T_prev = -1; |
trhackett | 0:2b94f7017e4e | 222 | //int T_curr = -1; |
trhackett | 0:2b94f7017e4e | 223 | //int T; |
trhackett | 0:2b94f7017e4e | 224 | // |
trhackett | 0:2b94f7017e4e | 225 | //// D is fraction of time that was high during the preceding interval |
trhackett | 0:2b94f7017e4e | 226 | //float D; |
trhackett | 0:2b94f7017e4e | 227 | //Timer highTime; |
trhackett | 0:2b94f7017e4e | 228 | //Timer lowTime; |
trhackett | 0:2b94f7017e4e | 229 | // |
trhackett | 0:2b94f7017e4e | 230 | // |
trhackett | 0:2b94f7017e4e | 231 | //// when you come on a rising edge, you should increment the rising edges |
trhackett | 0:2b94f7017e4e | 232 | //// and count the time as high, meaning stop the low timer and start the |
trhackett | 0:2b94f7017e4e | 233 | //// high timer |
trhackett | 0:2b94f7017e4e | 234 | //void riseHandle() { |
trhackett | 0:2b94f7017e4e | 235 | // // every time, manage the time difference between the previous rising |
trhackett | 0:2b94f7017e4e | 236 | // // edge and the one that came after it |
trhackett | 0:2b94f7017e4e | 237 | // T_prev = T_curr; |
trhackett | 0:2b94f7017e4e | 238 | // T_curr = (int)(highTime.read() * 1000000.0f); |
trhackett | 0:2b94f7017e4e | 239 | // |
trhackett | 0:2b94f7017e4e | 240 | // // if it's the first rising edge of a 10 edge interval, |
trhackett | 0:2b94f7017e4e | 241 | // // then reset both timers |
trhackett | 0:2b94f7017e4e | 242 | // if (risingEdges == 0) { |
trhackett | 0:2b94f7017e4e | 243 | // lowTime.stop(); |
trhackett | 0:2b94f7017e4e | 244 | // highTime.start(); |
trhackett | 0:2b94f7017e4e | 245 | // lowTime.reset(); |
trhackett | 0:2b94f7017e4e | 246 | // highTime.reset(); |
trhackett | 0:2b94f7017e4e | 247 | // |
trhackett | 0:2b94f7017e4e | 248 | // // and you're in high time on the first rising edge |
trhackett | 0:2b94f7017e4e | 249 | // risingEdges++; |
trhackett | 0:2b94f7017e4e | 250 | // } |
trhackett | 0:2b94f7017e4e | 251 | // |
trhackett | 0:2b94f7017e4e | 252 | // // if it's the tenth, then store D so that someone else can |
trhackett | 0:2b94f7017e4e | 253 | // // print it out. reset the timers and rising edge count |
trhackett | 0:2b94f7017e4e | 254 | // else if (risingEdges == 9) { |
trhackett | 0:2b94f7017e4e | 255 | // float h = highTime.read(); |
trhackett | 0:2b94f7017e4e | 256 | // float l = lowTime.read(); |
trhackett | 0:2b94f7017e4e | 257 | // D = h / (h + l); |
trhackett | 0:2b94f7017e4e | 258 | // |
trhackett | 0:2b94f7017e4e | 259 | // T = T_curr - T_prev; |
trhackett | 0:2b94f7017e4e | 260 | // |
trhackett | 0:2b94f7017e4e | 261 | //// pc.printf("previous rising edge: %i, this rising edge: %i\n\r",T_prev,T_curr); |
trhackett | 0:2b94f7017e4e | 262 | // |
trhackett | 0:2b94f7017e4e | 263 | // lowTime.stop(); |
trhackett | 0:2b94f7017e4e | 264 | // highTime.start(); |
trhackett | 0:2b94f7017e4e | 265 | // lowTime.reset(); |
trhackett | 0:2b94f7017e4e | 266 | // highTime.reset(); |
trhackett | 0:2b94f7017e4e | 267 | // |
trhackett | 0:2b94f7017e4e | 268 | // risingEdges++; |
trhackett | 0:2b94f7017e4e | 269 | // } |
trhackett | 0:2b94f7017e4e | 270 | // |
trhackett | 0:2b94f7017e4e | 271 | // // if it's rising edge 2 ... 9, then just increment and start |
trhackett | 0:2b94f7017e4e | 272 | // // the high timer and stop the low timer |
trhackett | 0:2b94f7017e4e | 273 | // else { |
trhackett | 0:2b94f7017e4e | 274 | // risingEdges++; |
trhackett | 0:2b94f7017e4e | 275 | // lowTime.stop(); |
trhackett | 0:2b94f7017e4e | 276 | // highTime.start(); |
trhackett | 0:2b94f7017e4e | 277 | // } |
trhackett | 0:2b94f7017e4e | 278 | //} |
trhackett | 0:2b94f7017e4e | 279 | // |
trhackett | 0:2b94f7017e4e | 280 | //// when you come to a falling edge, you should stop the high timer and |
trhackett | 0:2b94f7017e4e | 281 | //// start the low timer |
trhackett | 0:2b94f7017e4e | 282 | //void fallHandle() { |
trhackett | 0:2b94f7017e4e | 283 | // lowTime.start(); |
trhackett | 0:2b94f7017e4e | 284 | // highTime.stop(); |
trhackett | 0:2b94f7017e4e | 285 | //} |
trhackett | 0:2b94f7017e4e | 286 | // |
trhackett | 0:2b94f7017e4e | 287 | //void inputHandle() { |
trhackett | 0:2b94f7017e4e | 288 | // int T_temp; |
trhackett | 0:2b94f7017e4e | 289 | // float D_temp; |
trhackett | 0:2b94f7017e4e | 290 | // pc.scanf("%i, %f",&T_temp,&D_temp); |
trhackett | 0:2b94f7017e4e | 291 | // pc.printf("read in T as %i, D as %f\r\n",T_temp,D_temp); |
trhackett | 0:2b94f7017e4e | 292 | // |
trhackett | 0:2b94f7017e4e | 293 | // // make the changes to the period and duty cycle as long |
trhackett | 0:2b94f7017e4e | 294 | // // as they are within range |
trhackett | 0:2b94f7017e4e | 295 | // if ((T_temp >= 1000 && T_temp <= 60000) && |
trhackett | 0:2b94f7017e4e | 296 | // (D_temp >= 0.0f && D_temp <= 1.0f)) |
trhackett | 0:2b94f7017e4e | 297 | // { |
trhackett | 0:2b94f7017e4e | 298 | // currentPeriod = (float)T_temp / 1000000.0f; |
trhackett | 0:2b94f7017e4e | 299 | // currentDutyCycle = D_temp; |
trhackett | 0:2b94f7017e4e | 300 | // |
trhackett | 0:2b94f7017e4e | 301 | // pc.printf("period is now %f, duty cycle is now %f\n\r",(float)T_temp/1000000.0f,D_temp); |
trhackett | 0:2b94f7017e4e | 302 | // } |
trhackett | 0:2b94f7017e4e | 303 | // |
trhackett | 0:2b94f7017e4e | 304 | // else { |
trhackett | 0:2b94f7017e4e | 305 | // pc.printf("mbed> ERROR\n\r"); |
trhackett | 0:2b94f7017e4e | 306 | // } |
trhackett | 0:2b94f7017e4e | 307 | //} |
trhackett | 0:2b94f7017e4e | 308 | // |
trhackett | 0:2b94f7017e4e | 309 | //void tickerHandle() { |
trhackett | 0:2b94f7017e4e | 310 | // if (pulse.read() == 1) { |
trhackett | 0:2b94f7017e4e | 311 | // pulse.write(0); |
trhackett | 0:2b94f7017e4e | 312 | // } else { |
trhackett | 0:2b94f7017e4e | 313 | // pulse.write(1); |
trhackett | 0:2b94f7017e4e | 314 | // } |
trhackett | 0:2b94f7017e4e | 315 | //} |
trhackett | 0:2b94f7017e4e | 316 | // |
trhackett | 0:2b94f7017e4e | 317 | //int main() { |
trhackett | 0:2b94f7017e4e | 318 | // catchChange.rise(&riseHandle); |
trhackett | 0:2b94f7017e4e | 319 | // catchChange.fall(&fallHandle); |
trhackett | 0:2b94f7017e4e | 320 | // pc.attach(&inputHandle); |
trhackett | 0:2b94f7017e4e | 321 | // |
trhackett | 0:2b94f7017e4e | 322 | // currentPeriod = DEFAULT_PERIOD; |
trhackett | 0:2b94f7017e4e | 323 | // currentDutyCycle = DEFAULT_DUTYCYCLE; |
trhackett | 0:2b94f7017e4e | 324 | // |
trhackett | 0:2b94f7017e4e | 325 | // // start at a low signal |
trhackett | 0:2b94f7017e4e | 326 | // pulse.write(0); |
trhackett | 0:2b94f7017e4e | 327 | // |
trhackett | 0:2b94f7017e4e | 328 | // // go from low to high every period seconds |
trhackett | 0:2b94f7017e4e | 329 | // float riseInterval = currentPeriod; |
trhackett | 0:2b94f7017e4e | 330 | // // go from high to low every period + period*dutyCycle seconds |
trhackett | 0:2b94f7017e4e | 331 | // float fallInterval = riseInterval + currentPeriod * currentDutyCycle; |
trhackett | 0:2b94f7017e4e | 332 | // |
trhackett | 0:2b94f7017e4e | 333 | // // set ticker to change signal given intervals above |
trhackett | 0:2b94f7017e4e | 334 | // lowToHigh.attach(&tickerHandle, riseInterval); |
trhackett | 0:2b94f7017e4e | 335 | // highToLow.attach(&tickerHandle, fallInterval); |
trhackett | 0:2b94f7017e4e | 336 | // |
trhackett | 0:2b94f7017e4e | 337 | // pc.printf("Starting main function!!!\n\r"); |
trhackett | 0:2b94f7017e4e | 338 | // |
trhackett | 0:2b94f7017e4e | 339 | // pc.printf("rise interval: %f, fall interval: %f\n\r",riseInterval,fallInterval); |
trhackett | 0:2b94f7017e4e | 340 | // |
trhackett | 0:2b94f7017e4e | 341 | // while (1) { |
trhackett | 0:2b94f7017e4e | 342 | // if (risingEdges >= 10) { |
trhackett | 0:2b94f7017e4e | 343 | // risingEdges = 0; |
trhackett | 0:2b94f7017e4e | 344 | // pc.printf("mbed> %u, %.3f\n\r", T, D); |
trhackett | 0:2b94f7017e4e | 345 | // } |
trhackett | 0:2b94f7017e4e | 346 | // |
trhackett | 0:2b94f7017e4e | 347 | // } |
trhackett | 0:2b94f7017e4e | 348 | //} |