These are the core files for the Robot at Team conception.

Dependencies:   mbed UniServ

Committer:
obrie829
Date:
Wed Jun 07 11:35:59 2017 +0000
Revision:
17:ec52258b9472
Parent:
15:4efc66de795a
v18

Who changed what in which revision?

UserRevisionLine numberNew contents of line
obrie829 0:eba74e7a229b 1 /*
obrie829 0:eba74e7a229b 2 * IRSensor.cpp
obrie829 0:eba74e7a229b 3 * Copyright (c) 2016, ZHAW
obrie829 0:eba74e7a229b 4 * All rights reserved.
obrie829 0:eba74e7a229b 5 */
obrie829 0:eba74e7a229b 6
obrie829 0:eba74e7a229b 7 #include <cmath>
obrie829 0:eba74e7a229b 8 #include "IRSensor.h"
obrie829 0:eba74e7a229b 9
obrie829 0:eba74e7a229b 10
obrie829 0:eba74e7a229b 11 /**
obrie829 0:eba74e7a229b 12 * Creates an IRSensor object.
obrie829 0:eba74e7a229b 13 * @param distance an analog input object to read the voltage of the sensor.
obrie829 0:eba74e7a229b 14 * @param bit0 a digital output to set the first bit of the multiplexer.
obrie829 0:eba74e7a229b 15 * @param bit1 a digital output to set the second bit of the multiplexer.
obrie829 0:eba74e7a229b 16 * @param bit2 a digital output to set the third bit of the multiplexer.
obrie829 0:eba74e7a229b 17 * @param number the number of the sensor, either 0, 1, 2, 3, 4 or 5.
obrie829 0:eba74e7a229b 18 */
obrie829 15:4efc66de795a 19 IRSensor::IRSensor(AnalogIn* distance, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number) // * is pointer to the address
obrie829 0:eba74e7a229b 20 {
obrie829 0:eba74e7a229b 21 init(distance, bit0, bit1, bit2, number);
obrie829 0:eba74e7a229b 22 }
obrie829 0:eba74e7a229b 23
obrie829 0:eba74e7a229b 24
obrie829 0:eba74e7a229b 25 IRSensor::IRSensor()
obrie829 0:eba74e7a229b 26 {
obrie829 0:eba74e7a229b 27 }
obrie829 0:eba74e7a229b 28
obrie829 0:eba74e7a229b 29 void IRSensor::init(AnalogIn* distance, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number)
obrie829 0:eba74e7a229b 30 {
obrie829 0:eba74e7a229b 31
obrie829 0:eba74e7a229b 32 this->distance = distance; // set local references to objects
obrie829 0:eba74e7a229b 33 this->bit0 = bit0;
obrie829 0:eba74e7a229b 34 this->bit1 = bit1;
obrie829 0:eba74e7a229b 35 this->bit2 = bit2;
obrie829 0:eba74e7a229b 36
obrie829 0:eba74e7a229b 37 this->number = number;
obrie829 0:eba74e7a229b 38 }
obrie829 0:eba74e7a229b 39
obrie829 0:eba74e7a229b 40
obrie829 0:eba74e7a229b 41 /**
obrie829 0:eba74e7a229b 42 * Deletes the IRSensor object.
obrie829 0:eba74e7a229b 43 */
obrie829 0:eba74e7a229b 44 IRSensor::~IRSensor() {}
obrie829 0:eba74e7a229b 45
obrie829 0:eba74e7a229b 46 /**
obrie829 0:eba74e7a229b 47 * Gets the distance measured with the IR sensor in [m].
obrie829 0:eba74e7a229b 48 * @return the distance, given in [m].
obrie829 0:eba74e7a229b 49 */
obrie829 0:eba74e7a229b 50 float IRSensor::read()
obrie829 0:eba74e7a229b 51 {
obrie829 0:eba74e7a229b 52 *bit0 = (number >> 0) & 1;
obrie829 0:eba74e7a229b 53 *bit1 = (number >> 1) & 1;
obrie829 0:eba74e7a229b 54 *bit2 = (number >> 2) & 1;
obrie829 0:eba74e7a229b 55
obrie829 0:eba74e7a229b 56 float d = -0.58f*sqrt(distance->read())+0.58f; // calculate the distance in [m]
obrie829 0:eba74e7a229b 57 return d;
obrie829 0:eba74e7a229b 58 }
obrie829 0:eba74e7a229b 59
obrie829 0:eba74e7a229b 60 /**
obrie829 0:eba74e7a229b 61 * The empty operator is a shorthand notation of the <code>read()</code> method.
obrie829 0:eba74e7a229b 62 */
obrie829 0:eba74e7a229b 63 IRSensor::operator float()
obrie829 0:eba74e7a229b 64 {
obrie829 0:eba74e7a229b 65
obrie829 0:eba74e7a229b 66 return read();
obrie829 0:eba74e7a229b 67 }