Chad Amonn
/
ClassFile
hardware classes
USRF_MB1310.cpp@0:1fc280fa2177, 2010-06-02 (annotated)
- Committer:
- UAVguy
- Date:
- Wed Jun 02 21:40:10 2010 +0000
- Revision:
- 0:1fc280fa2177
Who changed what in which revision?
User | Revision | Line number | New 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 | } |