Simple Demo of PWM to show a KITT display with trailing LEDs

Dependencies:   mbed

Committer:
wim
Date:
Wed Nov 23 20:18:59 2011 +0000
Revision:
0:812790893086

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }