BERTL library, Kevin Heinrich
Dependents: BertlPingPong_UEbung3_EB
bertl14.cpp@4:066936e2c097, 2016-04-04 (annotated)
- 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?
User | Revision | Line number | New 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 |