Wojciech Rynczuk / Mbed 2 deprecated vcdMaker_Demo_DISCO_L476

Dependencies:   BSP_DISCO_L476VG COMPASS_DISCO_L476VG mbed vcdLogger vcdSignal

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

Go to the documentation of this file.
00001 /*!
00002   @file main.cpp
00003 
00004   The main vcdMaker demo file.
00005 
00006   @par Full Description
00007   The vcdMaker demo. See http://vcdmaker.org for details.
00008 
00009   @if REVISION_HISTORY_INCLUDED
00010   @par Edit History
00011   @li [0]    wojciech.rynczuk@wp.pl    04-MAR-2016    Initial file revision.
00012   @li [1]    wojciech.rynczuk@wp.pl    22-APR-2016    Sync line added.
00013   @endif
00014 
00015   @ingroup vcdMakerDemo
00016 
00017   The MIT License (MIT)
00018   Copyright (c) 2016 Wojciech Rynczuk
00019 
00020 */
00021 
00022 #include "mbed.h"
00023 #include "serialLogger.hpp "
00024 #include "magnetometer.hpp "
00025 #include "accelerometer.hpp "
00026 #include "button.hpp "
00027 #include "sync.hpp"
00028 #include "COMPASS_DISCO_L476VG.h"
00029 
00030 #define NO_OF_LINES      ((uint32_t)75)
00031 #define NO_OF_CHARACTERS ((uint32_t)100)
00032 
00033 // Periodic timers
00034 Ticker timer1;
00035 Ticker timer2;
00036 
00037 // Time reference
00038 uint32_t time_ref = 0;
00039 
00040 // Logger
00041 SerialLogger  slogger(NO_OF_LINES,NO_OF_CHARACTERS);
00042 Logger*       uniLogger;
00043 
00044 // Compass
00045 COMPASS_DISCO_L476VG compass;
00046 
00047 // Signals
00048 Magnetometer  magnetometer("Disco.Sensors.Magnetometer.", compass, slogger);
00049 Accelerometer accelerometer("Disco.Sensors.Accelerometer.", compass, slogger);
00050 
00051 // Buttons
00052 Button        button_center("Disco.Buttons.Center", slogger);
00053 Button        button_left("Disco.Buttons.Left", slogger);
00054 Button        button_up("Disco.Buttons.Up", slogger);
00055 Button        button_right("Disco.Buttons.Right", slogger);
00056 Button        button_down("Disco.Buttons.Down", slogger);
00057 
00058 //Synchronization
00059 Sync          sync_signal("Disco.Sync", slogger);
00060 
00061 // Joystick button
00062 InterruptIn center(JOYSTICK_CENTER);
00063 InterruptIn left(JOYSTICK_LEFT);
00064 InterruptIn right(JOYSTICK_RIGHT);
00065 InterruptIn up(JOYSTICK_UP);
00066 InterruptIn down(JOYSTICK_DOWN);
00067 InterruptIn sync(PE_11);
00068 
00069 // Interrupt handlers
00070 void center_released() {
00071     button_center = 0;
00072     button_center.PrintState();
00073     if ((uniLogger->GetTime() - time_ref) > 3000000)
00074     {
00075         if (uniLogger->IsRecording())
00076         {
00077             uniLogger->StopRecording();
00078         }
00079         else
00080         {
00081             uniLogger->StartRecording();
00082         }
00083     }
00084 }
00085 
00086 void center_pressed() {
00087     button_center = 1;
00088     button_center.PrintState();
00089     time_ref = uniLogger->GetTime();
00090 }
00091 
00092 void left_released() {
00093     button_left = 0;
00094     button_left.PrintState(); 
00095 }
00096 
00097 void left_pressed() {
00098     button_left = 1;
00099     button_left.PrintState(); 
00100 }
00101 
00102 void right_released() {
00103     button_right = 0;
00104     button_right.PrintState();  
00105 }
00106 
00107 void right_pressed() {
00108     button_right = 1;
00109     button_right.PrintState();   
00110 }
00111 
00112 void up_released() {
00113     button_up = 0;
00114     button_up.PrintState();   
00115 }
00116 
00117 void up_pressed() {
00118     button_up = 1;
00119     button_up.PrintState();  
00120 }
00121 
00122 void down_released() {
00123     button_down = 0;
00124     button_down.PrintState(); 
00125 }
00126 
00127 void down_pressed() {
00128     button_down = 1;
00129     button_down.PrintState();  
00130 }
00131 
00132 void sync_released() {
00133     sync_signal = 0;
00134     sync_signal.PrintState(); 
00135 }
00136 
00137 void sync_pressed() {
00138     sync_signal = 1;
00139     sync_signal.PrintState();  
00140 }
00141 
00142 void accelerometer_tick()
00143 {
00144     accelerometer.PrintState();
00145 }
00146 
00147 void magnetometer_tick()
00148 {
00149     magnetometer.PrintState();
00150 }
00151 
00152 int main()
00153 {    
00154     uniLogger = &slogger;
00155     
00156     // Both rise and fall edges generate an interrupt
00157     center.fall(&center_released);
00158     center.rise(&center_pressed);
00159     left.fall(&left_released);
00160     left.rise(&left_pressed);
00161     right.fall(&right_released);
00162     right.rise(&right_pressed);
00163     up.fall(&up_released);
00164     up.rise(&up_pressed);
00165     down.fall(&down_released);
00166     down.rise(&down_pressed);
00167     sync.fall(&sync_pressed);
00168     sync.rise(&sync_released);
00169 
00170     // Add pull-down on these pins
00171     // Warning: must be done AFTER edges setting
00172     left.mode(PullDown);
00173     right.mode(PullDown);
00174     up.mode(PullDown);
00175     down.mode(PullDown);
00176     sync.mode(PullUp);
00177         
00178     timer1.attach_us(&magnetometer_tick, 50000);
00179     timer2.attach_us(&accelerometer_tick, 40000);
00180         
00181     printf("Press joystick pressed for more than 3 seconds to start/stop logging.\n\r");
00182   
00183     while(true) {
00184         uniLogger->Print();
00185     };
00186 }