Gugus

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
EHess
Date:
Tue Mar 21 14:57:54 2017 +0000
Commit message:
Hallo ka

Changed in this revision

IRSensor.cpp Show annotated file Show diff for this revision Revisions of this file
IRSensor.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 96f88638114b IRSensor.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IRSensor.cpp	Tue Mar 21 14:57:54 2017 +0000
@@ -0,0 +1,67 @@
+/*
+ * IRSensor.cpp
+ * Copyright (c) 2016, ZHAW
+ * All rights reserved.
+ */
+
+#include <cmath>
+#include "IRSensor.h"
+
+
+/**
+ * Creates an IRSensor object.
+ * @param distance an analog input object to read the voltage of the sensor.
+ * @param bit0 a digital output to set the first bit of the multiplexer.
+ * @param bit1 a digital output to set the second bit of the multiplexer.
+ * @param bit2 a digital output to set the third bit of the multiplexer.
+ * @param number the number of the sensor, either 0, 1, 2, 3, 4 or 5.
+ */
+IRSensor::IRSensor(AnalogIn* distance, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number)
+{
+    init(distance, bit0, bit1, bit2, number);
+}
+
+
+IRSensor::IRSensor()
+{
+}
+
+void IRSensor::init(AnalogIn* distance, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number)
+{
+
+    this->distance = distance;  // set local references to objects
+    this->bit0 = bit0;
+    this->bit1 = bit1;
+    this->bit2 = bit2;
+
+    this->number = number;
+}
+
+
+/**
+ * Deletes the IRSensor object.
+ */
+IRSensor::~IRSensor() {}
+
+/**
+ * Gets the distance measured with the IR sensor in [m].
+ * @return the distance, given in [m].
+ */
+float IRSensor::read()
+{
+    *bit0 = (number >> 0) & 1;
+    *bit1 = (number >> 1) & 1;
+    *bit2 = (number >> 2) & 1;
+
+    float d = -0.38f*sqrt(distance->read())+0.38f;  // calculate the distance in [m]
+    return d;
+}
+
+/**
+ * The empty operator is a shorthand notation of the <code>read()</code> method.
+ */
+IRSensor::operator float()
+{
+
+    return read();
+}
diff -r 000000000000 -r 96f88638114b IRSensor.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IRSensor.h	Tue Mar 21 14:57:54 2017 +0000
@@ -0,0 +1,40 @@
+/*
+ * IRSensor.h
+ * Copyright (c) 2016, ZHAW
+ * All rights reserved.
+ */
+
+#ifndef IR_SENSOR_H_
+#define IR_SENSOR_H_
+
+#include <cstdlib>
+#include <mbed.h>
+
+/**
+ * This is a device driver class to read the distance measured with a Sharp IR sensor.
+ */
+class IRSensor
+{
+
+public:
+
+    IRSensor(AnalogIn* distance, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number);
+    IRSensor();
+    
+    void        init(AnalogIn* distance, DigitalOut* bit0, DigitalOut* bit1, DigitalOut* bit2, int number);
+    virtual     ~IRSensor();
+    float       read();
+
+    operator float();
+
+private:
+
+    AnalogIn*       distance;
+    DigitalOut*     bit0;
+    DigitalOut*     bit1;
+    DigitalOut*     bit2;
+
+    int             number;
+};
+
+#endif /* IR_SENSOR_H_ */
diff -r 000000000000 -r 96f88638114b main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 21 14:57:54 2017 +0000
@@ -0,0 +1,75 @@
+#include "mbed.h"
+#include "IRSensor.h"
+
+//E. Hess
+//Robotterbewegungen
+
+DigitalOut led(LED1);
+
+//Erstellt In- / Outputs
+AnalogIn distance(PB_1); 
+DigitalOut enable(PC_1);
+DigitalOut bit0(PH_1);
+DigitalOut bit1(PC_2);
+DigitalOut bit2(PC_3);
+IRSensor sensors[6];        //-> Was
+
+//LED Indikatoren rund um Roboter
+DigitalOut leds[] = { PC_8, PC_6, PB_12, PA_7, PC_0, PC_9 };
+
+//Timer-Objekt für LED- und Distanzsensor
+Ticker t1;
+
+//Motoren
+DigitalOut enableMotorDriver(PB_2); //Erstellt das Objekt
+PwmOut pwmL(PA_8);
+PwmOut pwmR(PA_9);
+
+//DistanzLEDs ->Was
+void ledDistance(){
+    for( int ii = 0; ii<6; ++ii)
+        sensors[ii]< 0.1f ? leds[ii] = 1 : leds[ii] = 0;
+}
+
+//Blinkt beim Start und startet die DistanzLEDs
+void ledShow(){
+    static int timer = 0;
+    for( int ii = 0; ii<6; ++ii)
+        leds[ii] = !leds[ii];
+
+    //Beendet den Ticker und startet die DistanzLED-Show
+    if( ++timer > 10) {
+        t1.detach();
+        t1.attach( &ledDistance, 0.01f );
+    }
+}
+
+int main()
+{
+    pwmL.period(0.00005f); // Setzt die Periode auf 50 μs -> f speichert float anstatt double (schneller)
+    pwmR.period(0.00005f);
+    pwmL = 0.5f; // Setzt die Duty-Cycle auf 50%
+    pwmR = 0.5f;
+    enableMotorDriver = 1;
+
+    t1.attach( &ledShow, 0.05f ); //->Was
+
+    //Initialisiert Distanzsensoren
+    for( int ii = 0; ii<6; ++ii)
+        sensors[ii].init(&distance, &bit0, &bit1, &bit2, ii);
+
+    enable = 1;
+
+    while(1) {
+        wait( 0.2f );
+        if(sensors[0].read() < 0.2f){
+            pwmL = 0.55f;
+            pwmR = 0.55f;
+        }
+        else{
+            pwmL = 0.6f;
+            pwmR = 0.4f;
+        }
+//float x = sensor[0];
+    }
+}
diff -r 000000000000 -r 96f88638114b mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Mar 21 14:57:54 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e1686b8d5b90
\ No newline at end of file