Wim Huiskamp
/
mbed_kitt
Simple Demo of PWM to show a KITT display with trailing LEDs
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 00003 Serial pc(USBTX, USBRX); // tx, rx 00004 00005 // Variables for Heartbeat and Status 00006 Ticker heartbeat; 00007 bool heartbeatflag=false; 00008 00009 PwmOut K1(LED1); 00010 PwmOut K2(LED2); 00011 PwmOut K3(LED3); 00012 PwmOut K4(LED4); 00013 00014 void show_menu() { 00015 pc.printf("0: Exit\n\r"); 00016 pc.printf("1: Show Menu\n\r"); 00017 pc.printf("2: Start KITT\n\r"); 00018 pc.printf("3: Stop KITT\n\r"); 00019 pc.printf("\n\r"); 00020 } 00021 00022 00023 #define KITT_PERIOD 0.010 00024 #define KITT_OFF 0.00 00025 #define KITT_20 (KITT_PERIOD / 15.0) 00026 #define KITT_50 (KITT_PERIOD / 5.0) 00027 #define KITT_MAX (KITT_PERIOD) 00028 00029 // Heartbeat monitor 00030 void pulse() { 00031 static int kitt_state=0; 00032 00033 if (!heartbeatflag) { 00034 K1.pulsewidth(KITT_OFF); // K1 Off 00035 K2.pulsewidth(KITT_OFF); // K2 Off 00036 K3.pulsewidth(KITT_OFF); // K3 Off 00037 K4.pulsewidth(KITT_OFF); // K4 Off 00038 } 00039 else { 00040 00041 switch (kitt_state) { 00042 case 0: 00043 // 1000 00044 K1.pulsewidth(KITT_MAX); // K1 On 00045 K2.pulsewidth(KITT_20); // K2 Decay 00046 K3.pulsewidth(KITT_OFF); // K3 Off 00047 K4.pulsewidth(KITT_OFF); // K4 Off 00048 00049 kitt_state++; 00050 break; 00051 case 1: 00052 // 0100 00053 K1.pulsewidth(KITT_50); // K1 Decay 00054 K2.pulsewidth(KITT_MAX); // K2 On 00055 K3.pulsewidth(KITT_OFF); // K3 Off 00056 K4.pulsewidth(KITT_OFF); // K4 Off 00057 00058 kitt_state++; 00059 break; 00060 case 2: 00061 // 0010 00062 K1.pulsewidth(KITT_20); // K1 Decay 00063 K2.pulsewidth(KITT_50); // K2 Decay 00064 K3.pulsewidth(KITT_MAX); // K3 On 00065 K4.pulsewidth(KITT_OFF); // K4 Off 00066 00067 kitt_state++; 00068 break; 00069 case 3: 00070 // 0001 00071 K1.pulsewidth(KITT_OFF); // K1 Off 00072 K2.pulsewidth(KITT_20); // K2 Decay 00073 K3.pulsewidth(KITT_50); // K3 Decay 00074 K4.pulsewidth(KITT_MAX); // K4 On 00075 00076 kitt_state++; 00077 break; 00078 case 4: 00079 // 0001 00080 K1.pulsewidth(KITT_OFF); // K1 Off 00081 K2.pulsewidth(KITT_OFF); // K2 Off 00082 K3.pulsewidth(KITT_20); // K3 Decay 00083 K4.pulsewidth(KITT_MAX); // K4 On 00084 00085 kitt_state++; 00086 break; 00087 case 5: 00088 // 0010 00089 K1.pulsewidth(KITT_OFF); // K1 Off 00090 K2.pulsewidth(KITT_OFF); // K2 Off 00091 K3.pulsewidth(KITT_MAX); // K3 On 00092 K4.pulsewidth(KITT_50); // K4 Decay 00093 00094 kitt_state++; 00095 break; 00096 case 6: 00097 // 0100 00098 K1.pulsewidth(KITT_OFF); // K1 Off 00099 K2.pulsewidth(KITT_MAX); // K2 On 00100 K3.pulsewidth(KITT_50); // K3 Decay 00101 K4.pulsewidth(KITT_20); // K4 Decay 00102 00103 kitt_state++; 00104 break; 00105 case 7: 00106 // 1000 00107 K1.pulsewidth(KITT_MAX); // K1 On 00108 K2.pulsewidth(KITT_50); // K2 Decay 00109 K3.pulsewidth(KITT_20); // K3 Decay 00110 K4.pulsewidth(KITT_OFF); // K4 Off 00111 00112 kitt_state = 0; 00113 break; 00114 00115 } //switch 00116 } //if 00117 00118 } 00119 00120 00121 void heartbeat_start() { 00122 heartbeat.attach(&pulse, 0.1); 00123 00124 K1.period(KITT_PERIOD); // KITT LEDs period 00125 00126 heartbeatflag = true; 00127 } 00128 00129 void heartbeat_stop() { 00130 heartbeat.detach(); 00131 heartbeatflag = false; 00132 } 00133 00134 00135 int main() { 00136 00137 bool running=true; 00138 char command; 00139 pc.printf("Hello World!\n\r"); 00140 00141 heartbeat_start(); 00142 00143 show_menu(); 00144 00145 while(running) { 00146 00147 if(pc.readable()) { 00148 command = pc.getc(); 00149 pc.printf("command= %c \n\r", command); 00150 00151 switch (command) { 00152 case '0' : 00153 pc.printf("Done\n\r"); 00154 running = false; 00155 break; 00156 00157 case '1' : 00158 show_menu(); 00159 break; 00160 00161 case '2' : 00162 pc.printf("Start\n\r"); 00163 heartbeatflag = true; 00164 break; 00165 00166 case '3' : 00167 pc.printf("Stop\n\r"); 00168 heartbeatflag = false; 00169 00170 break; 00171 00172 } //switch 00173 } // if 00174 } //while 00175 00176 pc.printf("Bye World!\n\r"); 00177 }
Generated on Tue Jul 19 2022 05:56:23 by 1.7.2