homework 7

Dependencies:   mbed-rtos mbed C12832_lcd LM75B

Revision:
10:2b0a9fc39109
Parent:
9:cfdb9aa5857c
Child:
11:9cae003da12b
--- a/main.cpp	Sat Sep 07 20:31:06 2013 +0000
+++ b/main.cpp	Sat Sep 07 20:33:38 2013 +0000
@@ -1,68 +1,22 @@
 /*----------------------------------------------//------------------------------
     student   : m-moore
     class     : rtos
-    directory : RTOS_HW_04
+    directory : RTOS_HW_07
     file      : main.cpp
 ----description---------------------------------//------------------------------
-    Joystick-Controlled Metronome
-    
-    features:
-    1. joystick-controlled.
-    2. turns off after one minute.
-    3. ISR's for all joystick inputs.
-    4. joystick debounce.
-    5. LED and LCD displays.
-    6. BPM rate adjustable even when metronome is off.
-    7. BPM saturates at defined lower/upper bounds.
-
-    controls:
-    1. joystick-left   - increase metronome rate.
-    2. joystick-right  - decrease metronome rate.
-    3. joystick-down   - start metronome.
-    4. joystick-up     - stop metronome.
-    5. joystick-center - set metronome to 60BPM.
-    
-    notes:
-    1. adding the mbed-rtos library to this project prevents the
-       LED from blinking and the LCD from displaying, even if
-       there is no #include "rtos.h" statement.
-    2. i was considering having the BPM up/down ISRs set up self-
-       ending threads for continuous button press for rapid rate
-       change, but again, rtos.h was causing trouble.
-    3. I'm making use of disable-interrupts for bounce suppression.
-       this could microscopically delay the metronome while its
-       BPM is being adjusted, since I can't turn off only the
-       interrupt involved with joystick input.
-    
-    testing:
-    1. start metronome - verify it blinks, and stops after a minute.
-    2. stop  metronome - verity it stops metronome.
-    3. verify display indicates ON and OFF state.
-    4. verify display indicates BPM rate.
-    5. operate left/right joystick, inspect for BPM jumps (bounce).
-    6. verify lower/upper BPM bounds.  (only lower-bound tested).
 -----includes-----------------------------------//----------------------------*/
     #include "mbed.h"                           // mbed class.
-//  #include "rtos.h"
-    #include "C12832_lcd.h"                     // LCD class.
+    #include "rtos.h"                           // rtos class.
+    #include "C12832_lcd.h"                     // LCD  class.
 //---defines------------------------------------//------------------------------
     #define LCD1 lcd.locate(0, 0);              // LCD line 1.
     #define LCD2 lcd.locate(0,11);              // LCD line 2.
     #define LCD3 lcd.locate(0,22);              // LCD line 3.
        
-    #define METROMAX       800                  // max. beats per minute.
-    #define METROMIN         8                  // min. beats per minute.
-    #define METROTIME       60.0                // metronome on-time in seconds.
-    #define UDSAMPLERATE     0.1                // how often to sample U/D joystick.
-    #define LCDSAMPLERATE    0.1                // how often to redraw the LCD.
-    #define PULSELENGTH      0.0625             // how long the LED-on-time is.
+
     #define DEBOUNCE         0.16               // debounce pause duration in S.
 //--global_definitions--------------------------//------------------------------
 //--global_variables----------------------------//------------------------------ 
-    float fMetroDelay;                          // time between ticks, in seconds.
-    float fMetroDuty;                           // duration of metro high, in seconds.
-    int   dMetroBPM;                            // master parameter.
-    char  cMetronomeOn;                         // 1 = allow blink.
 //--global_instances----------------------------//------------------------------ 
     C12832_LCD   lcd;                           // LCD object.
     
@@ -80,18 +34,6 @@
     Timeout     timeoutMetronome;
 //-------prototypes-----------------------------//------------------------------
     void initialization();                      // initialize settings.
-    void lcd_display();                         // display on LCD.
-    void interrupt_service_M();                 // metronome tick.                
-    void led3_off();                            // attachable LED control.
-    void led3_on();                             // attachable LED control.
-    void ISR_up();                              // stop metronome.
-    void ISR_down();                            // start metronome.
-    void ISR_right_rising();                    // decrease BPM.
-    void ISR_right_falling();                   // bounce protection.
-    void ISR_left_rising();                     // increase BPM.
-    void ISR_left_falling();                    // bounce protection.
-    void ISR_center();                          // set to 60BPM.
-    void turn_off_metronome();                  // turn off blinker.
 //==============================================//==============================
     int main(void) 
     {
@@ -122,10 +64,7 @@
 /*----------------------------------------------//----------------------------*/
     void initialization(void)                   // program initializations.
     {
-      dMetroBPM      = 60;                      // initialize to 60BPM.      
-      fMetroDelay    = 60.0 / (float) (dMetroBPM);
-      fMetroDuty     = PULSELENGTH;             // initialize LED on-duration.
-      cMetronomeOn   = 0;
+
     }
 /*----------------------------------------------//----------------------------*/
     void ISR_left_rising(void)                  // increase BPM.
@@ -198,55 +137,4 @@
       tickerMetronome.attach(&interrupt_service_M,fMetroDelay);
     }
 /*----------------------------------------------//----------------------------*/
-    void lcd_display(void)                      // display metronome info.
-    {
-      lcd.cls();                                // clear display.
-      
-      LCD1;                                     // line 1.
-      
-      if (cMetronomeOn)
-      lcd.printf("  metronome ON");
-      else
-      lcd.printf("  metronome OFF");
-
-      LCD2;                                     // line 2.
-      
-      if (dMetroBPM == METROMIN)                // BPM, with saturation notification.
-      lcd.printf(" %5.2d BPM  minimum",dMetroBPM);
-      else
-      if (dMetroBPM == METROMAX)
-      lcd.printf(" %5.2d BPM  maximum",dMetroBPM);    
-      else
-      lcd.printf(" %5.2d BPM",dMetroBPM);
-            
-      LCD3;                                     // line 3.
-      
-      lcd.printf("  RTOS HW 4");
-    }
-/*----------------------------------------------//----------------------------*/
-//  this metronome tick ISR will self-adjust to the current user-selected
-//  metronome rate.  that has to be done here, and at the start of the function,
-//  in order to maintain a constant phase and to prevent a beat-skip.
-
-    void interrupt_service_M()                  // metronome tick.
-    {        
-      if (cMetronomeOn)
-      {
-        tickerMetronome.detach();               // only one attachment.  
-        tickerMetronome.attach(&interrupt_service_M,fMetroDelay);      
-        led3_on();
-        timeoutDutyCycle.attach(&led3_off,fMetroDuty);
-      } else led3_off();
-    }
-/*----------------------------------------------//----------------------------*/
-    void turn_off_metronome(void)               // turn off metronome.
-    {
-      cMetronomeOn = 0;
-    }
-/*----------------------------------------------//----------------------------*/
-    void led3_off(void) {led3 = 0;}             // turn off the LED.
-/*----------------------------------------------//----------------------------*/
-    void led3_on( void) {led3 = 1;}             // turn on the led.
-/*----------------------------------------------//----------------------------*/
-    
-    
\ No newline at end of file
+ 
\ No newline at end of file