CENTER 3D

Dependencies:   EFM32_CapSenseSlider EFM32_SegmentLCD mbed

Revision:
0:ed973aca7da6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 25 13:08:48 2016 +0000
@@ -0,0 +1,94 @@
+#include "EFM32_SegmentLCD.h"
+#include "EFM32_CapSenseSlider.h"
+
+/******************** Define I/O *****************************/
+InterruptIn in(PB9);
+
+silabs::EFM32_SegmentLCD segmentDisplay;
+silabs::EFM32_CapSenseSlider capSlider;
+
+/******************** Define Timers *****************************/
+LowPowerTicker refreshTicker;
+
+/***************** Define global variables **********************/
+#define INIT_SECONDS		17600
+#define TEST_DURATION		10
+
+volatile uint32_t count = 0, seconds = INIT_SECONDS;
+
+
+/***************** Define callback handlers *********************/
+void tickerCallback(void);
+void in_handler();
+void touchCallback(void);
+void slideCallback(void);
+
+/**
+ * Callback for pushbutton interrupt
+ */
+void in_handler() {
+    count++;
+    segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0);
+}
+
+/**
+ * Callback for 1 second timebase
+ */
+void tickerCallback(void) {
+	seconds++;
+	uint32_t clockValue = ((seconds / 60) % 60) * 100 + (seconds % 60);
+	segmentDisplay.Number(clockValue);
+	segmentDisplay.Symbol(LCD_SYMBOL_COL10, seconds & 0x1);
+}
+
+/**
+ * Callback for touching/untouching the cap slider
+ */
+void touchCallback(void) {
+    segmentDisplay.Symbol(LCD_SYMBOL_EFM32, capSlider.isTouched());
+
+    if(!capSlider.isTouched()) {
+        segmentDisplay.Write("Hello");
+    }
+}
+
+/**
+ * Callback for sliding the cap slider
+ */
+void slideCallback(void) {
+    segmentDisplay.LowerNumber(capSlider.get_position());
+}
+
+/*************************** MAIN *******************************/
+int main() {
+	// Initialize pushbutton handler
+	in.rise(NULL);
+	in.fall(in_handler);
+
+	// Enable the capacitive slider
+	capSlider.start();
+	capSlider.attach_touch(touchCallback);
+	capSlider.attach_untouch(touchCallback);
+	capSlider.attach_slide(-1, slideCallback);
+
+	// Start generating the 1Hz timebase
+	refreshTicker.attach(&tickerCallback, 1.0f);
+
+	printf("Initialization done! \n");
+	wait(0.01f); //Need to delay slightly to give the serial transmission a chance to flush out its buffer
+	segmentDisplay.Write("Hello");
+
+	// Go into sleeping mode
+	while(1)
+	{
+		sleep();
+		if(count >= 8) {
+		    // Go to 'completely dead' mode to show power consumption
+		    refreshTicker.detach();
+		    capSlider.stop();
+		    in.disable_irq();
+		    delete &segmentDisplay;
+		}
+	}
+}
+