Lab 4CHEL / bertl_libraries

Files at this revision

API Documentation at this revision

Comitter:
DongExpander
Date:
Mon Apr 18 12:30:42 2016 +0000
Parent:
1:b924729b5734
Child:
3:1708f20fd55b
Commit message:
Feature; Added functions_bertl and class_software

Changed in this revision

class_hardware.cpp Show annotated file Show diff for this revision Revisions of this file
class_hardware.h Show annotated file Show diff for this revision Revisions of this file
class_software.cpp Show annotated file Show diff for this revision Revisions of this file
class_software.h Show annotated file Show diff for this revision Revisions of this file
functions_bertl.cpp Show annotated file Show diff for this revision Revisions of this file
functions_bertl.h Show annotated file Show diff for this revision Revisions of this file
pins_bertl.h Show annotated file Show diff for this revision Revisions of this file
--- a/class_hardware.cpp	Mon Apr 18 10:07:53 2016 +0000
+++ b/class_hardware.cpp	Mon Apr 18 12:30:42 2016 +0000
@@ -2,98 +2,99 @@
 #include "class_hardware.h"
 
 Motor::Motor(PinName pin_pwm, PinName pin_fwd, PinName pin_rev) :
-    pwm(pin_pwm), fwd(pin_fwd), rev(pin_rev) {
-        pwm=0;
-        pwm.period(0.001);
-        fwd=0; rev=0;
-    }
+	pwm(pin_pwm), fwd(pin_fwd), rev(pin_rev) {
+		pwm=0;
+		pwm.period(0.001);
+		fwd=0; rev=0;
+	}
 
 void Motor::stop() {
-    pwm=0;
-    fwd=0; rev=0;
+	pwm=0;
+	fwd=0; rev=0;
 }
 
 void Motor::stop(bool powered) {
-    pwm=0;
-    if ( powered )
-        { fwd=1; rev=1; }
-    else
-        { fwd=0; rev=0; }
+	pwm=0;
+	if ( powered )
+		{ fwd=1; rev=1; }
+	else
+		{ fwd=0; rev=0; }
 }
 
 void Motor::set(int speed) {
-    if ( speed > 0 ) {
-        pwm=( (float)(speed) / 100 );
-        fwd=1; rev=0;
-    }
-    else if ( speed < 0 ) {
-        pwm=( (float)(speed) / -100 );
-        fwd=0; rev=1;
-    }
-    else
-        { pwm=0; fwd=0; rev=0; }
+	if ( speed > 0 ) {
+		pwm=( (float)(speed) / 100 );
+		fwd=1; rev=0;
+	}
+	else if ( speed < 0 ) {
+		pwm=( (float)(speed) / -100 );
+		fwd=0; rev=1;
+	}
+	else
+		{ pwm=0; fwd=0; rev=0; }
 }
 
 IRSensor::IRSensor(PinName pin_ir) :
-    ir(pin_ir) {
-        threshold = 500;
-    }
+	ir(pin_ir) {
+		threshold = 500;
+	}
 
 IRSensor::IRSensor(PinName pin_ir, int threshold_black) :
-    ir(pin_ir) {
-        threshold = threshold_black;
-    }
+	ir(pin_ir) {
+		threshold = threshold_black;
+	}
 
 bool IRSensor::is_black() {
-    if ( ir.read_u16()>>6 > threshold )
-        return true;
-    
-    return false;
+	if ( ir.read_u16()>>6 > threshold )
+		return true;
+	
+	return false;
 }
 
 int IRSensor::get_data() {
-    return ( ir.read_u16()>>6 );
+	return ( ir.read_u16()>>6 );
 }
 
 USSensor::USSensor(PinName pin_trigger, PinName pin_echo) :
-    trigger(pin_trigger),echo(pin_echo) {
-        echo.rise(this, &USSensor::on_rise);
-        echo.fall(this, &USSensor::on_fall);
-        
-        distance = 50;
-    }
+	trigger(pin_trigger),echo(pin_echo) {
+		echo.rise(this, &USSensor::on_rise);
+		echo.fall(this, &USSensor::on_fall);
+		
+		distance = 50;
+	}
 
 USSensor::USSensor(PinName pin_trigger, PinName pin_echo, int distance_set_bool) :
-    trigger(pin_trigger),echo(pin_echo) {
-        echo.rise(this, &USSensor::on_rise);
-        echo.fall(this, &USSensor::on_fall);
-        
-        if (distance_set_bool < 4000 && distance_set_bool > 20)
-            distance = distance_set_bool;
-        else
-            distance = 50;
-    }
+	trigger(pin_trigger),echo(pin_echo) {
+		echo.rise(this, &USSensor::on_rise);
+		echo.fall(this, &USSensor::on_fall);
+		
+		if (distance_set_bool < 4000 && distance_set_bool > 20)
+			distance = distance_set_bool;
+		else
+			distance = 50;
+	}
 
 void USSensor::initialize() {
-    ticker.attach(this, &USSensor::measure, 0.06);
-    timer.start();
+	ticker.attach(this, &USSensor::measure, 0.06);
+	timer.start();
 }
 
 void USSensor::measure() {
-    trigger=1;
-    wait_us(10);
-    trigger=0;
+	trigger=1;
+	wait_us(10);
+	trigger=0;
 }
 
 void USSensor::on_rise() {
-    timer.reset();
+	timer.reset();
 }
 
 void USSensor::on_fall() {
-    distance_mm = ( (float)(timer.read_us()) * 1716E-4 );
-    
-    if ( distance_mm < distance )
-        in_distance = true;
-    else
-        in_distance = false;
+	distance_mm = ( (float)(timer.read_us()) * 1716E-4 );
+	
+	if ( distance_mm < distance )
+		in_distance = true;
+	else
+		in_distance = false;
 }
+
--- a/class_hardware.h	Mon Apr 18 10:07:53 2016 +0000
+++ b/class_hardware.h	Mon Apr 18 12:30:42 2016 +0000
@@ -1,53 +1,54 @@
-#ifndef class_hardware
-#define class_hardware
-
-class Motor {
-    //functions
-    public:
-        Motor(PinName pin_pwm, PinName pin_fwd, PinName pin_rev);
-        void stop();
-        void stop(bool powered);
-        void set(int speed);
-    //variables
-    private:
-        PwmOut pwm;
-        DigitalOut fwd;
-        DigitalOut rev;
-};
+#ifndef class_hardware
+#define class_hardware
+
+class Motor {
+	//functions
+	public:
+		Motor(PinName pin_pwm, PinName pin_fwd, PinName pin_rev);
+		void stop();
+		void stop(bool powered);
+		void set(int speed);
+	//variables
+	private:
+		PwmOut pwm;
+		DigitalOut fwd;
+		DigitalOut rev;
+};
+
+class IRSensor {
+	//functions
+	public:
+		IRSensor(PinName pin_ir);
+		IRSensor(PinName pin_ir, int threshold_black);
+		bool is_black();
+		int get_data();
+	//variables
+	private:
+		AnalogIn ir;
+		int threshold;
+};
+
+class USSensor {
+	//functions
+	public:
+		USSensor(PinName pin_trigger, PinName pin_echo);
+		USSensor(PinName pin_trigger, PinName pin_echo, int distance_set_bool);
+		void initialize();
+	private:
+		void on_rise();
+		void on_fall();
+		void measure();
+	//variables
+	public:
+		bool in_distance;
+		int distance_mm;
+	private:
+		DigitalOut trigger;
+		InterruptIn echo;
+		Timer timer;
+		Ticker ticker;
+		int distance;
+};
+
+#endif
 
-class IRSensor {
-    //functions
-    public:
-        IRSensor(PinName pin_ir);
-        IRSensor(PinName pin_ir, int threshold_black);
-        bool is_black();
-        int get_data();
-    //variables
-    private:
-        AnalogIn ir;
-        int threshold;
-};
-
-class USSensor {
-    //functions
-    public:
-        USSensor(PinName pin_trigger, PinName pin_echo);
-        USSensor(PinName pin_trigger, PinName pin_echo, int distance_set_bool);
-        void initialize();
-    private:
-        void on_rise();
-        void on_fall();
-        void measure();
-    //variables
-    public:
-        bool in_distance;
-        int distance_mm;
-    private:
-        DigitalOut trigger;
-        InterruptIn echo;
-        Timer timer;
-        Ticker ticker;
-        int distance;
-};
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/class_software.cpp	Mon Apr 18 12:30:42 2016 +0000
@@ -0,0 +1,41 @@
+#include "mbed.h"
+#include "class_software.h"
+
+Logfile::Logfile() {
+	array_lenght = MAX_LOG;
+	
+	for ( int i = 0; i < array_lenght; i++ )
+		array[i]=0;
+}
+
+Logfile::Logfile(int lenght) {
+	if ( lenght < array_lenght )
+		array_lenght = lenght;
+	else
+		array_lenght = MAX_LOG;
+	
+	for (int i = 0; i < array_lenght; i++)
+		array[i]=0;
+}
+
+void Logfile::push(unsigned char input) {
+	if (input != array[0]) {
+		for (int i = array_lenght; i > 0; i--)
+			array[i]=array[i-1];
+		
+		array[0]=input;
+	}
+}
+
+unsigned char Logfile::last() {
+	return array[0];
+}
+
+unsigned char Logfile::at(int pos) {
+	if( pos < MAX_LOG )
+		return array[pos];
+	
+	return 0;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/class_software.h	Mon Apr 18 12:30:42 2016 +0000
@@ -0,0 +1,22 @@
+#ifndef class_software
+
+#define MAX_LOG 100
+
+#define class_software
+
+class Logfile {
+//functions
+	public:
+		Logfile();
+		Logfile(int lenght);
+		void push(unsigned char input);
+		unsigned char last();
+		unsigned char at(int pos);
+	//variables
+	private:
+		unsigned char array[MAX_LOG];
+		int array_lenght;
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/functions_bertl.cpp	Mon Apr 18 12:30:42 2016 +0000
@@ -0,0 +1,41 @@
+#include "mbed.h"
+#include "class_hardware.h"
+#include "class_software.h"
+#include "functions_bertl.h"
+
+void line_turn(unsigned char linesegment, int speed, Motor left, Motor right) {
+	
+	if ( speed < 30 )
+		speed = 30;
+	
+	switch (linesegment) {
+		case 0b00000: left.set(speed * 0.80); right.set(speed * -0.80); break;
+		case 0b00100: left.set(speed * 1.50); right.set(speed * 1.50); break;
+		
+		// Nach links
+		case 0b01100: left.set(speed * 0.65); right.set(speed * 1.00); break;
+		case 0b01000: left.set(speed * 0.35); right.set(speed * 0.80); break;
+		case 0b11000: left.set(speed * 0.30); right.set(speed * 0.90); break;
+		case 0b10000: left.set(speed * -0.40); right.set(speed * 0.40); break;
+		
+		// Nach rechts
+		case 0b00110: left.set(speed * 1.00); right.set(speed * 0.65); break;
+		case 0b00010: left.set(speed * 0.80); right.set(speed * 0.35); break;
+		case 0b00011: left.set(speed * 0.90); right.set(speed * 0.30); break;
+		case 0b00001: left.set(speed * 0.40); right.set(speed * -0.40); break;
+	}
+}
+
+
+unsigned char sensor_to_byte(IRSensor LL, IRSensor L, IRSensor M, IRSensor R, IRSensor RR) {
+    unsigned char sensor_byte = 0b00000;
+    
+    if (LL.is_black()) sensor_byte += 0b10000;
+    if (L.is_black())  sensor_byte += 0b01000;
+    if (M.is_black())  sensor_byte += 0b00100;
+    if (R.is_black())  sensor_byte += 0b00010;
+    if (RR.is_black()) sensor_byte += 0b00001;
+    
+    return sensor_byte;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/functions_bertl.h	Mon Apr 18 12:30:42 2016 +0000
@@ -0,0 +1,9 @@
+#ifndef functions_bertl
+#define functions_bertl
+
+void line_turn(unsigned char linesegment, int speed, Motor left, Motor right);
+
+unsigned char sensor_to_byte(IRSensor LL, IRSensor L, IRSensor M, IRSensor R, IRSensor RR);
+
+#endif
+
--- a/pins_bertl.h	Mon Apr 18 10:07:53 2016 +0000
+++ b/pins_bertl.h	Mon Apr 18 12:30:42 2016 +0000
@@ -1,27 +1,28 @@
-#ifndef pins
-#define pins
-
-#define IR_LL   p18
-#define IR_L    p16
-#define IR_M    p20
-#define IR_R    p19
-#define IR_RR   p17
-
-#define US_T    p21
-#define US_E    p22
+#ifndef pins
+#define pins
+
+#define	IR_LL	p18
+#define	IR_L	p16
+#define	IR_M	p20
+#define	IR_R	p19
+#define	IR_RR	p17
+
+#define	US_T	p21
+#define	US_E	p22
+
+#define	ML_PWM	p34
+#define	ML_FWD	P1_1
+#define	ML_REV	P1_0
+#define	ML_ENC	P1_12
+
+#define	MR_PWM	p36
+#define	MR_FWD	P1_3
+#define	MR_REV	P1_4
+#define	MR_ENC	P1_13
+
+#define	PW_MOT	p30
+#define	PW_IR	P1_6
+#define PW_ENC	P1_7
+
+#endif
 
-#define ML_PWM  p34
-#define ML_FWD  P1_1
-#define ML_REV  P1_0
-#define ML_ENC  P1_12
-
-#define MR_PWM  p36
-#define MR_FWD  P1_3
-#define MR_REV  P1_4
-#define MR_ENC  P1_13
-
-#define PW_MOT  p30
-#define PW_IR   P1_6
-#define PW_ENC  P1_7
-
-#endif