BERTL library, Kevin Heinrich

Dependents:   BertlPingPong_UEbung3_EB

Committer:
heinrich_kevin
Date:
Mon Apr 04 12:17:24 2016 +0000
Revision:
4:066936e2c097
Parent:
3:4326e2654adb
NEW VERSION

Who changed what in which revision?

UserRevisionLine numberNew contents of line
heinrich_kevin 0:f40ab7184c3f 1 #include <mbed.h>
heinrich_kevin 0:f40ab7184c3f 2 #include "bertl14.h"
heinrich_kevin 1:01bc0c86f111 3 //*********************************************************************************
heinrich_kevin 1:01bc0c86f111 4 // Define Motor Routines
heinrich_kevin 3:4326e2654adb 5 DigitalOut engineLR(P1_0); //IN1, EP10, MG1A => MG1 engine-Pin 2, left_Reverse
heinrich_kevin 3:4326e2654adb 6 DigitalOut engineLF(P1_1); //IN2, EP11, MG1B => MG1 engine-Pin 1, left_Forward
heinrich_kevin 3:4326e2654adb 7 PwmOut engineLEN(p34); //EN1, P34, left_ENABLE
heinrich_kevin 3:4326e2654adb 8 DigitalOut engineRR(P1_4); //IN4, EP13, MG2A => MG2 engine-Pin 2, right_Reverse
heinrich_kevin 3:4326e2654adb 9 DigitalOut engineRF(P1_3); //IN3, EP14, MG2B => MG2 engine-Pin 1, right_Forward
heinrich_kevin 3:4326e2654adb 10 PwmOut engineREN(p36); //EN2, P36, right_ENABLE
heinrich_kevin 1:01bc0c86f111 11 //**********************************************************************************
heinrich_kevin 1:01bc0c86f111 12 // Define PC9555 Routines
heinrich_kevin 2:d9f2452ba88d 13 I2C pc9555(P0_5, P0_4);// SDA, SCL
heinrich_kevin 0:f40ab7184c3f 14
heinrich_kevin 1:01bc0c86f111 15 //**********************************************************************************
heinrich_kevin 1:01bc0c86f111 16 //Start PC9555 Routines
heinrich_kevin 1:01bc0c86f111 17 void bertl_PC9555_init()
heinrich_kevin 1:01bc0c86f111 18 {
heinrich_kevin 1:01bc0c86f111 19 char data[2];
heinrich_kevin 1:01bc0c86f111 20 // I2C-Initialisierung
heinrich_kevin 1:01bc0c86f111 21 pc9555.frequency(PC9555_FREQUENCY);
heinrich_kevin 1:01bc0c86f111 22 // Port 0 = Leds, Port 1 = Switches
heinrich_kevin 1:01bc0c86f111 23 // Adresse, R/W# = 0, Config PORT 0 (6) = 0x00(= Output), Stop
heinrich_kevin 1:01bc0c86f111 24 data[0] = PC9555_PORT0_DIRCONFIG;
heinrich_kevin 1:01bc0c86f111 25 data[1] = 0x00;
heinrich_kevin 2:d9f2452ba88d 26 pc9555.write(PC9555_ADDR_W, data, 2);
heinrich_kevin 1:01bc0c86f111 27 // Adresse, R/W# = 0, Config PORT 1 (7) = 0xFF(= Input), Stop
heinrich_kevin 1:01bc0c86f111 28 data[0] = PC9555_PORT1_DIRCONFIG;
heinrich_kevin 1:01bc0c86f111 29 data[1] = 0xFF;
heinrich_kevin 2:d9f2452ba88d 30 pc9555.write(PC9555_ADDR_W, data, 2);
heinrich_kevin 1:01bc0c86f111 31 }
heinrich_kevin 1:01bc0c86f111 32
heinrich_kevin 1:01bc0c86f111 33 void bertl_PC9555_leds(unsigned char leds)
heinrich_kevin 1:01bc0c86f111 34 {
heinrich_kevin 1:01bc0c86f111 35 char data[2]; //Two Bits for Transmitt via I2C
heinrich_kevin 1:01bc0c86f111 36 // Send leds to PORT0 of PC9555 via I2C:
heinrich_kevin 1:01bc0c86f111 37 // Start, Address, RW# = 0, CMD PC9555_PORT0_OUT, leds, STOP
heinrich_kevin 1:01bc0c86f111 38 data[0] = PC9555_PORT0_OUT;
heinrich_kevin 1:01bc0c86f111 39 data[1] = ~leds; //bitwise inversion since Hardware is switched on with 0 (inverse logic)
heinrich_kevin 2:d9f2452ba88d 40 pc9555.write(PC9555_ADDR_W, data, 2);
heinrich_kevin 1:01bc0c86f111 41 }
heinrich_kevin 1:01bc0c86f111 42
heinrich_kevin 1:01bc0c86f111 43 unsigned char bertl_PC9555_switches()
heinrich_kevin 1:01bc0c86f111 44 {
heinrich_kevin 4:066936e2c097 45 char taster[1];
heinrich_kevin 2:d9f2452ba88d 46
heinrich_kevin 2:d9f2452ba88d 47 pc9555.start(); // Start PC9555 to write the Adress
heinrich_kevin 2:d9f2452ba88d 48 pc9555.write(PC9555_ADDR_W); // Write the WRITE-Adress
heinrich_kevin 2:d9f2452ba88d 49 pc9555.write(0x01); // To define the Switches => 0x02: LEDs
heinrich_kevin 2:d9f2452ba88d 50 pc9555.start(); // Start PC9555 again to read the Values
heinrich_kevin 2:d9f2452ba88d 51 pc9555.write(PC9555_ADDR_R); // Set the READ_bit
heinrich_kevin 4:066936e2c097 52 taster[0] = pc9555.read(0); // Read the Value of the Switches (HEX_MASK)
heinrich_kevin 2:d9f2452ba88d 53 pc9555.stop(); // Stop the I2C
heinrich_kevin 2:d9f2452ba88d 54
heinrich_kevin 4:066936e2c097 55 return (taster[0]); // Return the value
heinrich_kevin 2:d9f2452ba88d 56
heinrich_kevin 1:01bc0c86f111 57 }
heinrich_kevin 1:01bc0c86f111 58 // END PC9555 Routines
heinrich_kevin 1:01bc0c86f111 59 //**********************************************************************************
heinrich_kevin 2:d9f2452ba88d 60 //**********************************************************************************
heinrich_kevin 1:01bc0c86f111 61 // Begin Motor Routines
heinrich_kevin 0:f40ab7184c3f 62 void bertl_engine(int left, int right)
heinrich_kevin 0:f40ab7184c3f 63 {
heinrich_kevin 0:f40ab7184c3f 64 // If the left engines-value is greater than 0, the left engine turn FORWARD
heinrich_kevin 0:f40ab7184c3f 65 if(left > 0)
heinrich_kevin 0:f40ab7184c3f 66 {
heinrich_kevin 0:f40ab7184c3f 67 engineLF=1;
heinrich_kevin 0:f40ab7184c3f 68 engineLR=0;
heinrich_kevin 0:f40ab7184c3f 69 }
heinrich_kevin 0:f40ab7184c3f 70 // Or if the left engines-value is less than 0, the left engine turn REVERSE
heinrich_kevin 0:f40ab7184c3f 71 else if(left < 0)
heinrich_kevin 0:f40ab7184c3f 72 {
heinrich_kevin 0:f40ab7184c3f 73 engineLF=0;
heinrich_kevin 0:f40ab7184c3f 74 engineLR=1;
heinrich_kevin 0:f40ab7184c3f 75 left = left * (-1); // For PWM the Value have to be positive
heinrich_kevin 0:f40ab7184c3f 76 }
heinrich_kevin 0:f40ab7184c3f 77 // If the right engines-value is greater than 0, the right engine turn FORWARD
heinrich_kevin 0:f40ab7184c3f 78 if(right > 0)
heinrich_kevin 0:f40ab7184c3f 79 {
heinrich_kevin 0:f40ab7184c3f 80 engineRF=1;
heinrich_kevin 0:f40ab7184c3f 81 engineRR=0;
heinrich_kevin 0:f40ab7184c3f 82 }
heinrich_kevin 0:f40ab7184c3f 83 // Or if the right engines-value is less than 0, the right engine turn REVERSE
heinrich_kevin 0:f40ab7184c3f 84 else if(right < 0)
heinrich_kevin 0:f40ab7184c3f 85 {
heinrich_kevin 0:f40ab7184c3f 86 engineRF=0;
heinrich_kevin 0:f40ab7184c3f 87 engineRR=1;
heinrich_kevin 0:f40ab7184c3f 88 right = right * (-1); // For PWM the Value have to be positive
heinrich_kevin 0:f40ab7184c3f 89 }
heinrich_kevin 0:f40ab7184c3f 90 //pc.printf("left: %4d\r\n", left);
heinrich_kevin 0:f40ab7184c3f 91 //pc.printf("right: %4d\r\n", right);
heinrich_kevin 0:f40ab7184c3f 92 // Or if the right- or/and the left engines value equals 0, the ENABLE-Pin turn off (ENABLE Pin equals 0)
heinrich_kevin 0:f40ab7184c3f 93 engineLEN=(left/255.0); // PWM Value : 0 ... 1
heinrich_kevin 0:f40ab7184c3f 94 engineREN=(right/255.0); // PWM Value : 0 ... 1
heinrich_kevin 0:f40ab7184c3f 95 }
heinrich_kevin 0:f40ab7184c3f 96 //Begin Testing bertl-engines
heinrich_kevin 0:f40ab7184c3f 97 void bertl_engine_test()
heinrich_kevin 0:f40ab7184c3f 98 {
heinrich_kevin 0:f40ab7184c3f 99 bertl_engine(100, 0); //The left engine must turn FORWARD for 2 seconds
heinrich_kevin 0:f40ab7184c3f 100 wait(2);
heinrich_kevin 0:f40ab7184c3f 101 bertl_engine(0, 100); //The right engine must turn FORWARD for 2 seconds
heinrich_kevin 0:f40ab7184c3f 102 wait(2);
heinrich_kevin 0:f40ab7184c3f 103 bertl_engine(-100, 0); //The left engine must turn REVERSE for 2 seconds
heinrich_kevin 0:f40ab7184c3f 104 wait(2);
heinrich_kevin 0:f40ab7184c3f 105 bertl_engine(0, -100); //The right engine must turn REVERSE for 2 seconds
heinrich_kevin 0:f40ab7184c3f 106 wait(2);
heinrich_kevin 0:f40ab7184c3f 107 }
heinrich_kevin 1:01bc0c86f111 108 //End Testing bertl-engines
heinrich_kevin 1:01bc0c86f111 109 // END Motor Routines