hardware classes

Dependencies:   mbed

Committer:
UAVguy
Date:
Wed Jun 02 21:40:10 2010 +0000
Revision:
0:1fc280fa2177

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UAVguy 0:1fc280fa2177 1 #include "USRF_MB1310.h"
UAVguy 0:1fc280fa2177 2
UAVguy 0:1fc280fa2177 3 USRF_MB1310::USRF_MB1310(PinName an, PinName tx, PinName rx)
UAVguy 0:1fc280fa2177 4 {
UAVguy 0:1fc280fa2177 5 if (an != NC)
UAVguy 0:1fc280fa2177 6 {
UAVguy 0:1fc280fa2177 7 AnalogInput = new AnalogIn(an);
UAVguy 0:1fc280fa2177 8 }
UAVguy 0:1fc280fa2177 9 if (tx != NC)
UAVguy 0:1fc280fa2177 10 {
UAVguy 0:1fc280fa2177 11 SerialOutput = new DigitalOut(tx);
UAVguy 0:1fc280fa2177 12 }
UAVguy 0:1fc280fa2177 13 if (rx != NC)
UAVguy 0:1fc280fa2177 14 {
UAVguy 0:1fc280fa2177 15 SerialInput = new Serial(NC, rx);
UAVguy 0:1fc280fa2177 16 }
UAVguy 0:1fc280fa2177 17 operatingvoltage = 3.3;
UAVguy 0:1fc280fa2177 18 unitfactor = 1;
UAVguy 0:1fc280fa2177 19 scalingfactor = 3.3 / 1000 * 1024 / operatingvoltage * unitfactor;//range, millivolts, device, units
UAVguy 0:1fc280fa2177 20 //set defaults
UAVguy 0:1fc280fa2177 21 }
UAVguy 0:1fc280fa2177 22
UAVguy 0:1fc280fa2177 23 void USRF_MB1310::setoperatingvoltage(float input)
UAVguy 0:1fc280fa2177 24 {
UAVguy 0:1fc280fa2177 25 operatingvoltage = input;
UAVguy 0:1fc280fa2177 26 scalingfactor = 3.3 / 1000 * 1024 / operatingvoltage * unitfactor;
UAVguy 0:1fc280fa2177 27 }
UAVguy 0:1fc280fa2177 28
UAVguy 0:1fc280fa2177 29 void USRF_MB1310::selectunit(int unit)
UAVguy 0:1fc280fa2177 30 {
UAVguy 0:1fc280fa2177 31 switch(unit)
UAVguy 0:1fc280fa2177 32 {
UAVguy 0:1fc280fa2177 33 case 0:
UAVguy 0:1fc280fa2177 34 unitfactor = 1;
UAVguy 0:1fc280fa2177 35 scalingfactor = 3.3 / 1000 * 1024 / operatingvoltage * unitfactor;
UAVguy 0:1fc280fa2177 36 break;
UAVguy 0:1fc280fa2177 37 case 1:
UAVguy 0:1fc280fa2177 38 unitfactor = 1 / 100;
UAVguy 0:1fc280fa2177 39 scalingfactor = 3.3 / 1000 * 1024 / operatingvoltage * unitfactor;
UAVguy 0:1fc280fa2177 40 break;
UAVguy 0:1fc280fa2177 41 case 2:
UAVguy 0:1fc280fa2177 42 unitfactor = 1 / 2.54;
UAVguy 0:1fc280fa2177 43 scalingfactor = 3.3 / 1000 * 1024 / operatingvoltage * unitfactor;
UAVguy 0:1fc280fa2177 44 break;
UAVguy 0:1fc280fa2177 45 case 3:
UAVguy 0:1fc280fa2177 46 unitfactor = 1 / 2.54 / 12;
UAVguy 0:1fc280fa2177 47 scalingfactor = 3.3 / 1000 * 1024 / operatingvoltage * unitfactor;
UAVguy 0:1fc280fa2177 48 break;
UAVguy 0:1fc280fa2177 49 }
UAVguy 0:1fc280fa2177 50 }
UAVguy 0:1fc280fa2177 51
UAVguy 0:1fc280fa2177 52 void USRF_MB1310::requestserialquery()
UAVguy 0:1fc280fa2177 53 {
UAVguy 0:1fc280fa2177 54 if (SerialOutput != 0)
UAVguy 0:1fc280fa2177 55 {
UAVguy 0:1fc280fa2177 56 SerialOutput->write(1);
UAVguy 0:1fc280fa2177 57 wait_us(50);
UAVguy 0:1fc280fa2177 58 SerialOutput->write(0);
UAVguy 0:1fc280fa2177 59 }
UAVguy 0:1fc280fa2177 60 }
UAVguy 0:1fc280fa2177 61 //hold pin high for at least 20 us to signal a serial query
UAVguy 0:1fc280fa2177 62
UAVguy 0:1fc280fa2177 63 float USRF_MB1310::query()
UAVguy 0:1fc280fa2177 64 {
UAVguy 0:1fc280fa2177 65 if (AnalogInput != 0)
UAVguy 0:1fc280fa2177 66 {
UAVguy 0:1fc280fa2177 67 distance = AnalogInput->read() * scalingfactor;
UAVguy 0:1fc280fa2177 68 }
UAVguy 0:1fc280fa2177 69 else if ((SerialInput != 0) && (SerialInput->readable()))
UAVguy 0:1fc280fa2177 70 {
UAVguy 0:1fc280fa2177 71 SerialInput->scanf("R%f\r", &distance);
UAVguy 0:1fc280fa2177 72 distance = distance * unitfactor;
UAVguy 0:1fc280fa2177 73 }
UAVguy 0:1fc280fa2177 74 else
UAVguy 0:1fc280fa2177 75 {
UAVguy 0:1fc280fa2177 76 distance = 0;
UAVguy 0:1fc280fa2177 77 }
UAVguy 0:1fc280fa2177 78 return distance;
UAVguy 0:1fc280fa2177 79 }
UAVguy 0:1fc280fa2177 80 float USRF_MB1310::query(int mode)
UAVguy 0:1fc280fa2177 81 {
UAVguy 0:1fc280fa2177 82 switch (mode)
UAVguy 0:1fc280fa2177 83 {
UAVguy 0:1fc280fa2177 84 case 0:
UAVguy 0:1fc280fa2177 85 if (AnalogInput != 0)
UAVguy 0:1fc280fa2177 86 {
UAVguy 0:1fc280fa2177 87 distance = AnalogInput->read() * scalingfactor;
UAVguy 0:1fc280fa2177 88 }
UAVguy 0:1fc280fa2177 89 else
UAVguy 0:1fc280fa2177 90 {
UAVguy 0:1fc280fa2177 91 distance = 0;
UAVguy 0:1fc280fa2177 92 }
UAVguy 0:1fc280fa2177 93 break;
UAVguy 0:1fc280fa2177 94 case 1:
UAVguy 0:1fc280fa2177 95 if ((SerialInput != 0) && (SerialInput->readable()))
UAVguy 0:1fc280fa2177 96 {
UAVguy 0:1fc280fa2177 97 SerialInput->scanf("R%f\r", &distance);
UAVguy 0:1fc280fa2177 98 distance = distance * unitfactor;
UAVguy 0:1fc280fa2177 99 }
UAVguy 0:1fc280fa2177 100 else
UAVguy 0:1fc280fa2177 101 {
UAVguy 0:1fc280fa2177 102 distance = 0;
UAVguy 0:1fc280fa2177 103 }
UAVguy 0:1fc280fa2177 104 break;
UAVguy 0:1fc280fa2177 105 }
UAVguy 0:1fc280fa2177 106 return distance;
UAVguy 0:1fc280fa2177 107 }
UAVguy 0:1fc280fa2177 108
UAVguy 0:1fc280fa2177 109 USRF_MB1310& USRF_MB1310::operator =(float assignment)
UAVguy 0:1fc280fa2177 110 {
UAVguy 0:1fc280fa2177 111 unitfactor = assignment;
UAVguy 0:1fc280fa2177 112 *this = assignment;
UAVguy 0:1fc280fa2177 113 return *this;
UAVguy 0:1fc280fa2177 114 }
UAVguy 0:1fc280fa2177 115
UAVguy 0:1fc280fa2177 116 USRF_MB1310::operator float()
UAVguy 0:1fc280fa2177 117 {
UAVguy 0:1fc280fa2177 118 if (AnalogInput != 0)
UAVguy 0:1fc280fa2177 119 {
UAVguy 0:1fc280fa2177 120 distance = AnalogInput->read() * scalingfactor;
UAVguy 0:1fc280fa2177 121 }
UAVguy 0:1fc280fa2177 122 else if ((SerialInput != 0) && (SerialInput->readable()))
UAVguy 0:1fc280fa2177 123 {
UAVguy 0:1fc280fa2177 124 SerialInput->scanf("R%f\r", &distance);
UAVguy 0:1fc280fa2177 125 distance = distance * unitfactor;
UAVguy 0:1fc280fa2177 126 }
UAVguy 0:1fc280fa2177 127 else
UAVguy 0:1fc280fa2177 128 {
UAVguy 0:1fc280fa2177 129 distance = 0;
UAVguy 0:1fc280fa2177 130 }
UAVguy 0:1fc280fa2177 131 return distance;
UAVguy 0:1fc280fa2177 132 }