Test application to demonstrate MCP4xxxx_SPI library

Dependencies:   DebugLibrary MCP4xxxx_SPI mbed

Revision:
0:62020bd58748
Child:
1:a463807bf483
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jan 25 16:13:03 2013 +0000
@@ -0,0 +1,92 @@
+#include <string>
+#include <iostream>
+#include <iomanip>
+
+#include "MCP4xxxx_SPI.h"
+
+struct UserChoice {
+    char choice;
+    unsigned char moduleId;
+};
+
+/*
+ * Declare functions
+ */
+void AvailableIndicator(); // LED1 flashing for program while program is alive
+UserChoice DisplayMenuAndGetChoice(); // Display and get the user choice
+
+/*
+ * Declare statics
+ */
+DigitalOut g_availableLed(LED1); // To verify if program in running
+Ticker g_available; // LED1 will flash with a period of 2s
+DigitalOut g_chipSelect(p8); // /CS to select MCP4xxxx device
+CMCP4xxxx_SPI g_digitalPot(p5, p6, p7, NC, NC); // Create an instance of the class CMCP4xxxx_SPI, p5/p6/p7: SPI#1, /RESET input not connected, , /SHDN input not connected
+UserChoice g_userChoice; // Used to store user choice from displayed menu
+
+int main() {
+
+    unsigned char potLevel = 0x80; // Initial digital potentiometer value
+    
+    g_chipSelect = 1; // Device is disabled 
+
+    // Launch available indicator
+    g_available.attach(&AvailableIndicator, 2.0);
+    
+    while (true) {
+    
+        g_userChoice = DisplayMenuAndGetChoice(); // Retrieve the user selection
+         switch (g_userChoice.choice) {
+            case 'a':
+                potLevel += 1;
+                g_chipSelect.write(0);
+                g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot1, potLevel);
+                g_chipSelect.write(1);
+                break;
+            case 'b':
+                potLevel += 1;
+                g_chipSelect.write(0);
+                g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot2, potLevel);
+                g_chipSelect.write(1);
+               break;
+            case 'c':
+                potLevel -= 1;
+                g_chipSelect.write(0);
+                g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot1, potLevel);
+                g_chipSelect.write(1);
+                break;
+            case 'd':
+                potLevel -= 1;
+                g_chipSelect.write(0);
+                g_digitalPot.Write(CMCP4xxxx_SPI::WriteToPot2, potLevel);
+                g_chipSelect.write(1);
+                break;
+            default:
+                std::cout << "Invalid user choice\r" << std::endl;
+                break;
+         } // End of 'switch' statement
+       
+    } // End of 'while' statement
+} // End of program - nerver reached
+
+void AvailableIndicator() {
+    g_availableLed = !g_availableLed;
+} // End of AvailableIndicator
+
+UserChoice DisplayMenuAndGetChoice() {
+    static UserChoice userChoice;
+
+    // Display the title
+    std::cout << "\r" << std::endl << "MCP4xxxx_SPI v0.1\r" << std::endl;
+
+    // Display the menu
+    std::cout << "\tIncrease level on pot #1:\t\t\ta\r" << std::endl;
+    std::cout << "\tIncrease level on pot #2:\t\t\tb\r" << std::endl;
+    std::cout << "\tDecrease level on pot #1:\t\t\tc\r" << std::endl;
+    std::cout << "\tDecrease level on pot #2:\t\t\td\r" << std::endl;
+    std::cout << "Enter your choice: " << std::flush;
+    userChoice.choice = getchar();
+    // Display the menu
+    std::cout << "\r" << std::endl << std::flush;
+    return userChoice;
+}