Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BSP_DISCO_L476VG COMPASS_DISCO_L476VG mbed vcdLogger vcdSignal
main.cpp
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(¢er_released); 00158 center.rise(¢er_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 }
Generated on Wed Jul 13 2022 21:23:50 by
1.7.2