This is the vcdMaker demo project. See http://vcdmaker.org for details. vcdMaker is supposed to help engineers to debug their applications and systems. It transforms text log files into the VCD format which can be easily displayed as a waveform. Use the mbed serial logger at 115200 baud rate.

Dependencies:   BSP_DISCO_L476VG COMPASS_DISCO_L476VG mbed vcdLogger vcdSignal

Revision:
0:936379a8793e
Child:
1:297d1bcaa432
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Mar 05 21:16:10 2016 +0000
@@ -0,0 +1,167 @@
+/*!
+  @file main.cpp
+
+  The main vcdMaker demo file.
+
+  @par Full Description
+  The vcdMaker demo. See http://vcdmaker.org for details.
+
+  @if REVISION_HISTORY_INCLUDED
+  @par Edit History
+  @li [1]    wojciech.rynczuk@wp.pl    04-MAR-2016    Initial file revision.
+  @endif
+
+  @ingroup vcdMakerDemo
+
+  The MIT License (MIT)
+  Copyright (c) 2016 Wojciech Rynczuk
+
+*/
+
+#include "mbed.h"
+#include "serialLogger.hpp"
+#include "magnetometer.hpp"
+#include "accelerometer.hpp"
+#include "button.hpp"
+#include "COMPASS_DISCO_L476VG.h"
+
+#define NO_OF_LINES      ((uint32_t)75)
+#define NO_OF_CHARACTERS ((uint32_t)100)
+
+// Periodic timers
+Ticker timer1;
+Ticker timer2;
+
+// Time reference
+uint32_t time_ref = 0;
+
+// Logger
+SerialLogger  slogger(NO_OF_LINES,NO_OF_CHARACTERS);
+Logger*       uniLogger;
+
+// Compass
+COMPASS_DISCO_L476VG compass;
+
+// Signals
+Magnetometer  magnetometer("Disco.Sensors.Magnetometer.", compass, slogger);
+Accelerometer accelerometer("Disco.Sensors.Accelerometer.", compass, slogger);
+
+// Buttons
+Button        button_center("Disco.Buttons.Center", slogger);
+Button        button_left("Disco.Buttons.Left", slogger);
+Button        button_up("Disco.Buttons.Up", slogger);
+Button        button_right("Disco.Buttons.Right", slogger);
+Button        button_down("Disco.Buttons.Down", slogger);
+
+// Joystick button
+InterruptIn center(JOYSTICK_CENTER);
+InterruptIn left(JOYSTICK_LEFT);
+InterruptIn right(JOYSTICK_RIGHT);
+InterruptIn up(JOYSTICK_UP);
+InterruptIn down(JOYSTICK_DOWN);
+
+// Interrupt handlers
+void center_released() {
+    button_center = 0;
+    button_center.PrintState();
+    if ((uniLogger->GetTime() - time_ref) > 3000000)
+    {
+        if (uniLogger->IsRecording())
+        {
+            uniLogger->StopRecording();
+        }
+        else
+        {
+            uniLogger->StartRecording();
+        }
+    }
+}
+
+void center_pressed() {
+    button_center = 1;
+    button_center.PrintState();
+    time_ref = uniLogger->GetTime();
+}
+
+void left_released() {
+    button_left = 0;
+    button_left.PrintState(); 
+}
+
+void left_pressed() {
+    button_left = 1;
+    button_left.PrintState(); 
+}
+
+void right_released() {
+    button_right = 0;
+    button_right.PrintState();  
+}
+
+void right_pressed() {
+    button_right = 1;
+    button_right.PrintState();   
+}
+
+void up_released() {
+    button_up = 0;
+    button_up.PrintState();   
+}
+
+void up_pressed() {
+    button_up = 1;
+    button_up.PrintState();  
+}
+
+void down_released() {
+    button_down = 0;
+    button_down.PrintState(); 
+}
+
+void down_pressed() {
+    button_down = 1;
+    button_down.PrintState();  
+}
+
+void accelerometer_tick()
+{
+    accelerometer.PrintState();
+}
+
+void magnetometer_tick()
+{
+    magnetometer.PrintState();
+}
+
+int main()
+{    
+    uniLogger = &slogger;
+    
+    // Both rise and fall edges generate an interrupt
+    center.fall(&center_released);
+    center.rise(&center_pressed);
+    left.fall(&left_released);
+    left.rise(&left_pressed);
+    right.fall(&right_released);
+    right.rise(&right_pressed);
+    up.fall(&up_released);
+    up.rise(&up_pressed);
+    down.fall(&down_released);
+    down.rise(&down_pressed);
+
+    // Add pull-down on these pins
+    // Warning: must be done AFTER edges setting
+    left.mode(PullDown);
+    right.mode(PullDown);
+    up.mode(PullDown);
+    down.mode(PullDown);
+        
+    timer1.attach_us(&magnetometer_tick, 50000);
+    timer2.attach_us(&accelerometer_tick, 40000);
+        
+    printf("Press joystick pressed for more than 3 seconds to start/stop logging.\n\r");
+  
+    while(true) {
+        uniLogger->Print();
+    };
+}