Wim Huiskamp
/
mbed_kitt
Simple Demo of PWM to show a KITT display with trailing LEDs
main.cpp@0:812790893086, 2011-11-23 (annotated)
- Committer:
- wim
- Date:
- Wed Nov 23 20:18:59 2011 +0000
- Revision:
- 0:812790893086
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wim | 0:812790893086 | 1 | #include "mbed.h" |
wim | 0:812790893086 | 2 | |
wim | 0:812790893086 | 3 | Serial pc(USBTX, USBRX); // tx, rx |
wim | 0:812790893086 | 4 | |
wim | 0:812790893086 | 5 | // Variables for Heartbeat and Status |
wim | 0:812790893086 | 6 | Ticker heartbeat; |
wim | 0:812790893086 | 7 | bool heartbeatflag=false; |
wim | 0:812790893086 | 8 | |
wim | 0:812790893086 | 9 | PwmOut K1(LED1); |
wim | 0:812790893086 | 10 | PwmOut K2(LED2); |
wim | 0:812790893086 | 11 | PwmOut K3(LED3); |
wim | 0:812790893086 | 12 | PwmOut K4(LED4); |
wim | 0:812790893086 | 13 | |
wim | 0:812790893086 | 14 | void show_menu() { |
wim | 0:812790893086 | 15 | pc.printf("0: Exit\n\r"); |
wim | 0:812790893086 | 16 | pc.printf("1: Show Menu\n\r"); |
wim | 0:812790893086 | 17 | pc.printf("2: Start KITT\n\r"); |
wim | 0:812790893086 | 18 | pc.printf("3: Stop KITT\n\r"); |
wim | 0:812790893086 | 19 | pc.printf("\n\r"); |
wim | 0:812790893086 | 20 | } |
wim | 0:812790893086 | 21 | |
wim | 0:812790893086 | 22 | |
wim | 0:812790893086 | 23 | #define KITT_PERIOD 0.010 |
wim | 0:812790893086 | 24 | #define KITT_OFF 0.00 |
wim | 0:812790893086 | 25 | #define KITT_20 (KITT_PERIOD / 15.0) |
wim | 0:812790893086 | 26 | #define KITT_50 (KITT_PERIOD / 5.0) |
wim | 0:812790893086 | 27 | #define KITT_MAX (KITT_PERIOD) |
wim | 0:812790893086 | 28 | |
wim | 0:812790893086 | 29 | // Heartbeat monitor |
wim | 0:812790893086 | 30 | void pulse() { |
wim | 0:812790893086 | 31 | static int kitt_state=0; |
wim | 0:812790893086 | 32 | |
wim | 0:812790893086 | 33 | if (!heartbeatflag) { |
wim | 0:812790893086 | 34 | K1.pulsewidth(KITT_OFF); // K1 Off |
wim | 0:812790893086 | 35 | K2.pulsewidth(KITT_OFF); // K2 Off |
wim | 0:812790893086 | 36 | K3.pulsewidth(KITT_OFF); // K3 Off |
wim | 0:812790893086 | 37 | K4.pulsewidth(KITT_OFF); // K4 Off |
wim | 0:812790893086 | 38 | } |
wim | 0:812790893086 | 39 | else { |
wim | 0:812790893086 | 40 | |
wim | 0:812790893086 | 41 | switch (kitt_state) { |
wim | 0:812790893086 | 42 | case 0: |
wim | 0:812790893086 | 43 | // 1000 |
wim | 0:812790893086 | 44 | K1.pulsewidth(KITT_MAX); // K1 On |
wim | 0:812790893086 | 45 | K2.pulsewidth(KITT_20); // K2 Decay |
wim | 0:812790893086 | 46 | K3.pulsewidth(KITT_OFF); // K3 Off |
wim | 0:812790893086 | 47 | K4.pulsewidth(KITT_OFF); // K4 Off |
wim | 0:812790893086 | 48 | |
wim | 0:812790893086 | 49 | kitt_state++; |
wim | 0:812790893086 | 50 | break; |
wim | 0:812790893086 | 51 | case 1: |
wim | 0:812790893086 | 52 | // 0100 |
wim | 0:812790893086 | 53 | K1.pulsewidth(KITT_50); // K1 Decay |
wim | 0:812790893086 | 54 | K2.pulsewidth(KITT_MAX); // K2 On |
wim | 0:812790893086 | 55 | K3.pulsewidth(KITT_OFF); // K3 Off |
wim | 0:812790893086 | 56 | K4.pulsewidth(KITT_OFF); // K4 Off |
wim | 0:812790893086 | 57 | |
wim | 0:812790893086 | 58 | kitt_state++; |
wim | 0:812790893086 | 59 | break; |
wim | 0:812790893086 | 60 | case 2: |
wim | 0:812790893086 | 61 | // 0010 |
wim | 0:812790893086 | 62 | K1.pulsewidth(KITT_20); // K1 Decay |
wim | 0:812790893086 | 63 | K2.pulsewidth(KITT_50); // K2 Decay |
wim | 0:812790893086 | 64 | K3.pulsewidth(KITT_MAX); // K3 On |
wim | 0:812790893086 | 65 | K4.pulsewidth(KITT_OFF); // K4 Off |
wim | 0:812790893086 | 66 | |
wim | 0:812790893086 | 67 | kitt_state++; |
wim | 0:812790893086 | 68 | break; |
wim | 0:812790893086 | 69 | case 3: |
wim | 0:812790893086 | 70 | // 0001 |
wim | 0:812790893086 | 71 | K1.pulsewidth(KITT_OFF); // K1 Off |
wim | 0:812790893086 | 72 | K2.pulsewidth(KITT_20); // K2 Decay |
wim | 0:812790893086 | 73 | K3.pulsewidth(KITT_50); // K3 Decay |
wim | 0:812790893086 | 74 | K4.pulsewidth(KITT_MAX); // K4 On |
wim | 0:812790893086 | 75 | |
wim | 0:812790893086 | 76 | kitt_state++; |
wim | 0:812790893086 | 77 | break; |
wim | 0:812790893086 | 78 | case 4: |
wim | 0:812790893086 | 79 | // 0001 |
wim | 0:812790893086 | 80 | K1.pulsewidth(KITT_OFF); // K1 Off |
wim | 0:812790893086 | 81 | K2.pulsewidth(KITT_OFF); // K2 Off |
wim | 0:812790893086 | 82 | K3.pulsewidth(KITT_20); // K3 Decay |
wim | 0:812790893086 | 83 | K4.pulsewidth(KITT_MAX); // K4 On |
wim | 0:812790893086 | 84 | |
wim | 0:812790893086 | 85 | kitt_state++; |
wim | 0:812790893086 | 86 | break; |
wim | 0:812790893086 | 87 | case 5: |
wim | 0:812790893086 | 88 | // 0010 |
wim | 0:812790893086 | 89 | K1.pulsewidth(KITT_OFF); // K1 Off |
wim | 0:812790893086 | 90 | K2.pulsewidth(KITT_OFF); // K2 Off |
wim | 0:812790893086 | 91 | K3.pulsewidth(KITT_MAX); // K3 On |
wim | 0:812790893086 | 92 | K4.pulsewidth(KITT_50); // K4 Decay |
wim | 0:812790893086 | 93 | |
wim | 0:812790893086 | 94 | kitt_state++; |
wim | 0:812790893086 | 95 | break; |
wim | 0:812790893086 | 96 | case 6: |
wim | 0:812790893086 | 97 | // 0100 |
wim | 0:812790893086 | 98 | K1.pulsewidth(KITT_OFF); // K1 Off |
wim | 0:812790893086 | 99 | K2.pulsewidth(KITT_MAX); // K2 On |
wim | 0:812790893086 | 100 | K3.pulsewidth(KITT_50); // K3 Decay |
wim | 0:812790893086 | 101 | K4.pulsewidth(KITT_20); // K4 Decay |
wim | 0:812790893086 | 102 | |
wim | 0:812790893086 | 103 | kitt_state++; |
wim | 0:812790893086 | 104 | break; |
wim | 0:812790893086 | 105 | case 7: |
wim | 0:812790893086 | 106 | // 1000 |
wim | 0:812790893086 | 107 | K1.pulsewidth(KITT_MAX); // K1 On |
wim | 0:812790893086 | 108 | K2.pulsewidth(KITT_50); // K2 Decay |
wim | 0:812790893086 | 109 | K3.pulsewidth(KITT_20); // K3 Decay |
wim | 0:812790893086 | 110 | K4.pulsewidth(KITT_OFF); // K4 Off |
wim | 0:812790893086 | 111 | |
wim | 0:812790893086 | 112 | kitt_state = 0; |
wim | 0:812790893086 | 113 | break; |
wim | 0:812790893086 | 114 | |
wim | 0:812790893086 | 115 | } //switch |
wim | 0:812790893086 | 116 | } //if |
wim | 0:812790893086 | 117 | |
wim | 0:812790893086 | 118 | } |
wim | 0:812790893086 | 119 | |
wim | 0:812790893086 | 120 | |
wim | 0:812790893086 | 121 | void heartbeat_start() { |
wim | 0:812790893086 | 122 | heartbeat.attach(&pulse, 0.1); |
wim | 0:812790893086 | 123 | |
wim | 0:812790893086 | 124 | K1.period(KITT_PERIOD); // KITT LEDs period |
wim | 0:812790893086 | 125 | |
wim | 0:812790893086 | 126 | heartbeatflag = true; |
wim | 0:812790893086 | 127 | } |
wim | 0:812790893086 | 128 | |
wim | 0:812790893086 | 129 | void heartbeat_stop() { |
wim | 0:812790893086 | 130 | heartbeat.detach(); |
wim | 0:812790893086 | 131 | heartbeatflag = false; |
wim | 0:812790893086 | 132 | } |
wim | 0:812790893086 | 133 | |
wim | 0:812790893086 | 134 | |
wim | 0:812790893086 | 135 | int main() { |
wim | 0:812790893086 | 136 | |
wim | 0:812790893086 | 137 | bool running=true; |
wim | 0:812790893086 | 138 | char command; |
wim | 0:812790893086 | 139 | pc.printf("Hello World!\n\r"); |
wim | 0:812790893086 | 140 | |
wim | 0:812790893086 | 141 | heartbeat_start(); |
wim | 0:812790893086 | 142 | |
wim | 0:812790893086 | 143 | show_menu(); |
wim | 0:812790893086 | 144 | |
wim | 0:812790893086 | 145 | while(running) { |
wim | 0:812790893086 | 146 | |
wim | 0:812790893086 | 147 | if(pc.readable()) { |
wim | 0:812790893086 | 148 | command = pc.getc(); |
wim | 0:812790893086 | 149 | pc.printf("command= %c \n\r", command); |
wim | 0:812790893086 | 150 | |
wim | 0:812790893086 | 151 | switch (command) { |
wim | 0:812790893086 | 152 | case '0' : |
wim | 0:812790893086 | 153 | pc.printf("Done\n\r"); |
wim | 0:812790893086 | 154 | running = false; |
wim | 0:812790893086 | 155 | break; |
wim | 0:812790893086 | 156 | |
wim | 0:812790893086 | 157 | case '1' : |
wim | 0:812790893086 | 158 | show_menu(); |
wim | 0:812790893086 | 159 | break; |
wim | 0:812790893086 | 160 | |
wim | 0:812790893086 | 161 | case '2' : |
wim | 0:812790893086 | 162 | pc.printf("Start\n\r"); |
wim | 0:812790893086 | 163 | heartbeatflag = true; |
wim | 0:812790893086 | 164 | break; |
wim | 0:812790893086 | 165 | |
wim | 0:812790893086 | 166 | case '3' : |
wim | 0:812790893086 | 167 | pc.printf("Stop\n\r"); |
wim | 0:812790893086 | 168 | heartbeatflag = false; |
wim | 0:812790893086 | 169 | |
wim | 0:812790893086 | 170 | break; |
wim | 0:812790893086 | 171 | |
wim | 0:812790893086 | 172 | } //switch |
wim | 0:812790893086 | 173 | } // if |
wim | 0:812790893086 | 174 | } //while |
wim | 0:812790893086 | 175 | |
wim | 0:812790893086 | 176 | pc.printf("Bye World!\n\r"); |
wim | 0:812790893086 | 177 | } |