Files at this revision

API Documentation at this revision

Comitter:
DomiSukic
Date:
Mon Mar 07 11:51:28 2016 +0000
Commit message:

Changed in this revision

bertl.cpp Show annotated file Show diff for this revision Revisions of this file
bertl.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 09cac0d76c5e bertl.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bertl.cpp	Mon Mar 07 11:51:28 2016 +0000
@@ -0,0 +1,109 @@
+/****************************
+Bertl engine&I2C Lib. rework 
+
+2.2.2016
+
+by Dominik Sukic
+with help from Kevin Heinrich
+*****************************/
+
+#include <mbed.h>
+#include "bertl.h"
+// Define Motor Routines
+DigitalOut engineLR(P1_0);      //IN1, EP10, MG1 engine-Pin 2
+DigitalOut engineLF(P1_1);      //IN2, EP11, MG1 engine-Pin 1
+PwmOut engineLEN(p34);          //EN1, P34
+DigitalOut engineRR(P1_4);      //IN4, EP13, MG2 engine-Pin 2
+DigitalOut engineRF(P1_3);      //IN3, EP14, MG2 engine-Pin 1
+PwmOut engineREN(p36);          //EN2, P36
+
+// Define PC9555 Routines
+I2C pc9555(P0_5, P0_4);// SDA, SCL
+
+//Start PC9555 Routines
+void bertl_PC9555_init()
+{
+    char data[2];
+    // I2C-Initialisierung
+    pc9555.frequency(PC9555_FREQUENCY);
+    // Port 0 = Leds, Port 1 = Switches
+    // Adresse, R/W# = 0, Config PORT 0 (6) = 0x00(= Output), Stop
+    data[0] = PC9555_PORT0_DIRCONFIG;
+    data[1] = 0x00;
+    pc9555.write(PC9555_ADDR_W, data, 2);
+    // Adresse, R/W# = 0, Config PORT 1 (7) = 0xFF(= Input), Stop
+    data[0] = PC9555_PORT1_DIRCONFIG;
+    data[1] = 0xFF;
+    pc9555.write(PC9555_ADDR_W, data, 2);
+}
+
+void bertl_PC9555_leds(unsigned char leds)
+{
+    char data[2];   //Two Bytes for Transmitt via I2C
+    // Send leds to PORT0 of PC9555 via I2C:
+    // Start, Address, RW# = 0, CMD PC9555_PORT0_OUT, leds, STOP
+    data[0] = PC9555_PORT0_OUT;
+    data[1] = ~leds;    //bitwise inversion since Hardware is switched on with 0 (inverse logic)
+    pc9555.write(PC9555_ADDR_W, data, 2);
+}
+
+unsigned char bertl_PC9555_switches()
+{
+    char taster;
+
+    pc9555.start();                     // Start PC9555 to write the Adress
+    pc9555.write(PC9555_ADDR_W);    // Write the WRITE-Adress
+    pc9555.write(0x01);             // To define the Switches
+    pc9555.start();                     // Start PC9555 again to read the Values
+    pc9555.write(PC9555_ADDR_R);    // Set the READ_bit
+    taster = pc9555.read(0);        // Read the Value of the Switches
+    pc9555.stop();                      // Stop the I2C
+
+    return taster;                    // Return the value
+
+}
+// END PC9555 Routines
+
+//Experimental
+bool checkbitFront()
+{
+    bool Frontbuttons = CHECK_BIT(bertl_PC9555_switches(), 7) | CHECK_BIT(bertl_PC9555_switches(), 6) | CHECK_BIT(bertl_PC9555_switches(), 2) | CHECK_BIT(bertl_PC9555_switches(), 0); //Checks if a bit of the front buttons is set
+
+    return Frontbuttons; //returns true if set
+}
+bool checkbitBack()
+{
+    bool Backbuttons = CHECK_BIT(bertl_PC9555_switches(), 5) | CHECK_BIT(bertl_PC9555_switches(), 4) | CHECK_BIT(bertl_PC9555_switches(), 1); //Checks if a bit of the back buttons is set
+
+    return Backbuttons; //returns true if set
+}
+
+// Begin Motor Routines
+void bertl_engine(int left, int right)
+{
+    // If the left engines-value is greater than 0, the left engine turn FORWARD
+    if(left > 0) {
+        engineLF=1;
+        engineLR=0;
+    }
+    // Or if the left engines-value is less than 0, the left engine turn REVERSE
+    else if(left < 0) {
+        engineLF=0;
+        engineLR=1;
+        left = left * (-1);         // For PWM the Value have to be positive
+    }
+    // If the right engines-value is greater than 0, the right engine turn FORWARD
+    if(right > 0) {
+        engineRF=1;
+        engineRR=0;
+    }
+    // Or if the right engines-value is less than 0, the right engine turn REVERSE
+    else if(right < 0) {
+        engineRF=0;
+        engineRR=1;
+        right = right * (-1);       // For PWM the Value have to be positive
+    }
+    // Or if the right- or/and the left engines value equals 0, the ENABLE-Pin turn off
+    engineLEN=(left/255.0);
+    engineREN=(right/255.0);
+}
\ No newline at end of file
diff -r 000000000000 -r 09cac0d76c5e bertl.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bertl.h	Mon Mar 07 11:51:28 2016 +0000
@@ -0,0 +1,58 @@
+#include <mbed.h>
+//Checkbit-Defines
+#define CHECK_BIT(var,pos) ((var) & (1<<(pos))) //Checks if bits are set Input: Variable to chaeck adn the position of the bit to check
+//LED-Defines
+#define LED_OFF 0x00            // 0b0000 0000, All Leds are off
+#define LED_FL_WHITE 0x01       // 0b0000 0001, BERTL FORWARD Left-Side WHITE-LED
+#define LED_FL_YELLOW 0x02      // 0b0000 0010, BERTL FORWARD Left-Side YELLOW-LED
+#define LED_FR_WHITE 0x04       // 0b0000 0100, BERTL FORWARD Right-Side WHITE-LED
+#define LED_FR_YELLOW 0x08      // 0b0000 1000, BERTL FORWARD Right-Side YELLOW-LED
+#define LED_BL_RED 0x10         // 0b0001 0000, BERTL BACKWARD Left-Side RED-LED
+#define LED_BL_YELLOW 0x20      // 0b0010 0000, BERTL BACKWARD Left-Side YELLOW-LED
+#define LED_BR_RED 0x40         // 0b0100 0000, BERTL BACKWARD Right-Side RED-LED
+#define LED_BR_YELLOW 0x80      // 0b1000 0000, BERTL BACKWARD Right-Side YELLOW-LED
+#define LED_ON 0xFF             // 0b1111 1111, All Leds are on
+ 
+#define LED_R_YELLOW (LED_FR_YELLOW|LED_BR_YELLOW)          // 0b1000 1000, BERTL Right Side, YELLOW-LEDs are on
+#define LED_L_YELLOW (LED_FL_YELLOW|LED_BL_YELLOW)          // 0b0010 0010, BERTL Left Side, YELLOW-LEDs are on
+#define LED_F_WHITE (LED_FL_WHITE|LED_FR_WHITE)             // 0b0000 0101, BERTL Forward, WHITE-LEDs are on
+#define LED_B_RED (LED_BL_RED|LED_BR_RED)                   // 0b0101 0000, BERTL Backward, RED LEDs are on
+#define LED_B_ALL (LED_B_RED|LED_BL_YELLOW|LED_BR_YELLOW)   // 0b1111 0000, BERTL Backward, All LEDs are on
+#define LED_F_ALL (LED_F_WHITE|LED_FL_YELLOW|LED_FR_YELLOW) // 0b0000 1111, BERTL Forward, All LEDs are on
+
+// Define PC9555 Routines
+#define PC9555_ADDR_W 0x40 //A2 = A1 = A0 = 0, WRITE-ADRESS
+#define PC9555_ADDR_R 0x41 // READ-ADRESS, to set the Read-bit
+#define PC9555_FREQUENCY 100000 // fI2C in Hz
+
+// PC9555 Commands
+#define PC9555_PORT0_IN (0)
+#define PC9555_PORT1_IN (1)
+#define PC9555_PORT0_OUT (2)
+#define PC9555_PORT1_OUT (3)
+#define PC9555_PORT0_INV (4)
+#define PC9555_PORT1_INV (5)
+#define PC9555_PORT0_DIRCONFIG (6)
+#define PC9555_PORT1_DIRCONFIG (7)
+
+// Define Motor Routines
+#define ENGINE_LEFT_BACKWARD P1_0       //IN1, EP10, MG1A => MG1 engine-Pin 2, left_Reverse
+#define ENGINE_LEFT_FORWARD P1_1        //IN2, EP11, MG1B => MG1 engine-Pin 1, left_Forward
+#define ENGINE_ENABLE_LEFT P1_15        //EN1, P34, left_ENABLE
+#define ENGINE_RIGHT_REVERSE P1_4       //IN4, EP13, MG2A => MG2 engine-Pin 2, right_Reverse
+#define ENGINE_RIGHT_FORWARD P1_3       //IN3, EP14, MG2B => MG2 engine-Pin 1, right_Forward
+#define ENGINE_ENABLE_RIGHT P0_21       //EN2, P36, right_ENABLE
+#define MAX_PWM 255                     //Define the MAX Value of the PWM
+
+// Motor Routines
+void bertl_engine(int left, int right);
+void bertl_engine_test();
+ 
+// PC9555 routines
+void bertl_PC9555_init();
+void bertl_PC9555_leds(unsigned char leds);
+unsigned char bertl_PC9555_switches();
+
+//Checkbit Routines
+ bool checkbitFront();
+ bool checkbitBack();