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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }