Interface class for the Max Botix ultrasonic range finder model 1210. It includes input methods for PWM, Analog, and Serial. A PwmIn class was created to allow the PWM input to be read. Now includes automatic range update via interrupts.

Dependencies:   mbed

Revision:
1:b533b95e807a
Parent:
0:3d969e0b4ca0
Child:
2:997b4057c879
--- a/MB1210.cpp	Sun Aug 22 21:18:20 2010 +0000
+++ b/MB1210.cpp	Mon Aug 23 01:12:57 2010 +0000
@@ -1,7 +1,7 @@
 #include "MB1210.h"
 
-MB1210::MB1210(PinName pw, PinName an, PinName tx, PinName rx) :
-    OperatingMode(0x00), UnitFactor(1), PwmScalingFactor(17014.5), AnalogScalingFactor(1024)
+MB1210::MB1210(PinName pw, PinName an, PinName tx, PinName rx) : OperatingMode(0x00),
+    UnitFactor(1), PwmScalingFactor(17014.5), AnalogScalingFactor(1024), Range(0)
 {
     if (rx != NC)
     {
@@ -105,28 +105,13 @@
         case 2:
             if (SerialInput)
             {
-                if (SerialInput->readable())
+                unsigned char i = 0;
+                while (SerialInput->readable() && !SerialInput->scanf("R%3d", &Range) && (i < 32))
                 {
-                    Workspace[3] = 0;
-                    do
-                    {
-                        Workspace[0] = SerialInput->getc();
-                        Workspace[3]++;
-                    } while (SerialInput->readable() && (Workspace[0] != 'R') && (Workspace[3] < 5));
-                    for (unsigned char i = 0; i < 3; i++)
-                    {
-                        if (SerialInput->readable())
-                        {
-                            Workspace[i] = SerialInput->getc();
-                        }
-                        else
-                        {
-                            Workspace[i] = 0x00;
-                        }
-                    }
-                    Workspace[3] = 0x00;
-                    return atof(Workspace) * UnitFactor;
+                    SerialInput->getc();
+                    i++;
                 }
+                return (float)Range * UnitFactor;
             }
             else
             {
@@ -142,25 +127,11 @@
 {
     if (SerialInput)
     {
-        if (SerialInput->readable())
+        unsigned char i = 0;
+        while (SerialInput->readable() && !SerialInput->scanf("R%3s", Buffer) && (i < 32))
         {
-            Workspace[3] = 0;
-            do
-            {
-                Workspace[0] = SerialInput->getc();
-                Workspace[3]++;
-            } while (SerialInput->readable() && (Workspace[0] != 'R') && (Workspace[3] < 5));
-            for (unsigned char i = 0; i < 3; i++)
-            {
-                if (SerialInput->readable())
-                {
-                    Buffer[i] = SerialInput->getc();
-                }
-                else
-                {
-                    Buffer[i] = 0x00;
-                }
-            }
+            SerialInput->getc();
+            i++;
         }
     }
 }