This project will enable remote control of a motorised turntable via a WiFi enabled TCP link using ACKme's (http://ack.me/) Wi-Fi enablement platform

Dependencies:   mbed

Revision:
2:a73037a7d85d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TurntableControl.cpp	Wed Aug 27 12:28:48 2014 +0000
@@ -0,0 +1,97 @@
+#include "TurntableControl.h"
+
+TurntableControl::TurntableControl()
+    : encoder(PA_13, PullDown), limitSW(PA_15, PullUp), ttdriver(PA_14, PullDown)
+{
+    encoderMax = 0;
+    encoderCurrent = 0;
+}
+
+TurntableControl::TurntableControl(PinName en, PinName lSW, PinName ttd)
+    : encoder(en, PullDown), limitSW(lSW, PullUp), ttdriver(ttd, PullDown)
+{
+    encoderMax = 0;
+    encoderCurrent = 0;
+}
+
+void TurntableControl::initialise()
+{
+    ttdriver = 1; // Start motor
+    while (limitSW.read()) // Continue until limit switch reached
+    {}
+    while (!limitSW.read()) // Wait for limit switch to reset
+    {}
+    ttdriver = 0; // Stop motor
+}
+
+int TurntableControl::calibrate()
+{
+    int lastVal = encoder.read(); // Start at a known encoder sample
+    ttdriver = 1; // Start motor
+    
+    while (limitSW.read()) // Continue until limit switch reached
+    {
+        if (lastVal != encoder.read()) // Check for edge
+        {
+            encoderMax++; // Increment on edge
+        }
+        lastVal = encoder.read(); // Update current sample
+    }
+    while (!limitSW.read()) // Continue until limit switch reached
+    {
+        if (lastVal != encoder.read()) // Check for edge
+        {
+            encoderMax++; // Increment on edge
+        }
+        lastVal = encoder.read(); // Update current sample
+    }
+    ttdriver = 0; // Stop motor
+    return encoderMax;
+}
+
+void TurntableControl::incrementTurntable(int edges)
+{
+    ttdriver = 1;
+    int lastVal = encoder.read();
+    int target = encoderCurrent + edges;
+    while(target >= encoderCurrent) // Cycle through number of edges 
+    {
+        if(lastVal != encoder.read()) // Check and wait for edge
+        {
+            encoderCurrent++;
+        }
+        lastVal = encoder.read();
+    }
+    ttdriver = 0;
+}
+
+void TurntableControl::reset()
+{
+    encoderMax = 0;
+    encoderCurrent = 0;
+    initialise();
+}
+
+int TurntableControl::getEncoderCurrent()
+{
+    return encoderCurrent;
+}
+
+int TurntableControl::getEncoderMax()
+{
+    return encoderMax;
+}
+
+int TurntableControl::getEncoder()
+{
+    return encoder.read();
+}
+
+void TurntableControl::quarterTurns(int n) // Turn the turntable a quarter rotation, n times
+{
+    int quaterEdges = getEncoderMax()/4;
+    for(int i = 0; i < n; i++)
+    {
+        incrementTurntable(quaterEdges);
+    }
+}
\ No newline at end of file