Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:4a9ed5ca8a9a, committed 2016-04-18
- 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
--- 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