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.
Fork of bertl14 by
bertl14.cpp@2:d9f2452ba88d, 2016-01-31 (annotated)
- Committer:
- heinrich_kevin
- Date:
- Sun Jan 31 16:44:34 2016 +0000
- Revision:
- 2:d9f2452ba88d
- Parent:
- 1:01bc0c86f111
- Child:
- 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 | 0:f40ab7184c3f | 5 | DigitalOut engineLR(P1_0); //IN1, EP10, MG1A => MG1 engine-Pin 2, left_Reverse |
heinrich_kevin | 0:f40ab7184c3f | 6 | DigitalOut engineLF(P1_1); //IN2, EP11, MG1B => MG1 engine-Pin 1, left_Forward |
heinrich_kevin | 0:f40ab7184c3f | 7 | PwmOut engineLEN(p34); //EN1, P34, left_ENABLE |
heinrich_kevin | 0:f40ab7184c3f | 8 | DigitalOut engineRR(P1_4); //IN4, EP13, MG2A => MG2 engine-Pin 2, right_Reverse |
heinrich_kevin | 0:f40ab7184c3f | 9 | DigitalOut engineRF(P1_3); //IN3, EP14, MG2B => MG2 engine-Pin 1, right_Forward |
heinrich_kevin | 0:f40ab7184c3f | 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 | |
heinrich_kevin | 1:01bc0c86f111 | 34 | void bertl_PC9555_leds(unsigned char leds) |
heinrich_kevin | 1:01bc0c86f111 | 35 | { |
heinrich_kevin | 1:01bc0c86f111 | 36 | char data[2]; //Two Bits for Transmitt via I2C |
heinrich_kevin | 1:01bc0c86f111 | 37 | // Send leds to PORT0 of PC9555 via I2C: |
heinrich_kevin | 1:01bc0c86f111 | 38 | // Start, Address, RW# = 0, CMD PC9555_PORT0_OUT, leds, STOP |
heinrich_kevin | 1:01bc0c86f111 | 39 | data[0] = PC9555_PORT0_OUT; |
heinrich_kevin | 1:01bc0c86f111 | 40 | data[1] = ~leds; //bitwise inversion since Hardware is switched on with 0 (inverse logic) |
heinrich_kevin | 2:d9f2452ba88d | 41 | pc9555.write(PC9555_ADDR_W, data, 2); |
heinrich_kevin | 1:01bc0c86f111 | 42 | } |
heinrich_kevin | 1:01bc0c86f111 | 43 | |
heinrich_kevin | 1:01bc0c86f111 | 44 | unsigned char bertl_PC9555_switches() |
heinrich_kevin | 1:01bc0c86f111 | 45 | { |
heinrich_kevin | 2:d9f2452ba88d | 46 | int taster; |
heinrich_kevin | 2:d9f2452ba88d | 47 | |
heinrich_kevin | 2:d9f2452ba88d | 48 | pc9555.start(); // Start PC9555 to write the Adress |
heinrich_kevin | 2:d9f2452ba88d | 49 | pc9555.write(PC9555_ADDR_W); // Write the WRITE-Adress |
heinrich_kevin | 2:d9f2452ba88d | 50 | pc9555.write(0x01); // To define the Switches => 0x02: LEDs |
heinrich_kevin | 2:d9f2452ba88d | 51 | pc9555.start(); // Start PC9555 again to read the Values |
heinrich_kevin | 2:d9f2452ba88d | 52 | pc9555.write(PC9555_ADDR_R); // Set the READ_bit |
heinrich_kevin | 2:d9f2452ba88d | 53 | taster = pc9555.read(0); // Read the Value of the Switches |
heinrich_kevin | 2:d9f2452ba88d | 54 | pc9555.stop(); // Stop the I2C |
heinrich_kevin | 2:d9f2452ba88d | 55 | |
heinrich_kevin | 2:d9f2452ba88d | 56 | return (taster); // Return the value |
heinrich_kevin | 2:d9f2452ba88d | 57 | |
heinrich_kevin | 1:01bc0c86f111 | 58 | } |
heinrich_kevin | 1:01bc0c86f111 | 59 | // END PC9555 Routines |
heinrich_kevin | 1:01bc0c86f111 | 60 | //********************************************************************************** |
heinrich_kevin | 1:01bc0c86f111 | 61 | |
heinrich_kevin | 2:d9f2452ba88d | 62 | |
heinrich_kevin | 2:d9f2452ba88d | 63 | |
heinrich_kevin | 2:d9f2452ba88d | 64 | //********************************************************************************** |
heinrich_kevin | 1:01bc0c86f111 | 65 | // Begin Motor Routines |
heinrich_kevin | 0:f40ab7184c3f | 66 | void bertl_engine(int left, int right) |
heinrich_kevin | 0:f40ab7184c3f | 67 | { |
heinrich_kevin | 0:f40ab7184c3f | 68 | // If the left engines-value is greater than 0, the left engine turn FORWARD |
heinrich_kevin | 0:f40ab7184c3f | 69 | if(left > 0) |
heinrich_kevin | 0:f40ab7184c3f | 70 | { |
heinrich_kevin | 0:f40ab7184c3f | 71 | engineLF=1; |
heinrich_kevin | 0:f40ab7184c3f | 72 | engineLR=0; |
heinrich_kevin | 0:f40ab7184c3f | 73 | } |
heinrich_kevin | 0:f40ab7184c3f | 74 | // Or if the left engines-value is less than 0, the left engine turn REVERSE |
heinrich_kevin | 0:f40ab7184c3f | 75 | else if(left < 0) |
heinrich_kevin | 0:f40ab7184c3f | 76 | { |
heinrich_kevin | 0:f40ab7184c3f | 77 | engineLF=0; |
heinrich_kevin | 0:f40ab7184c3f | 78 | engineLR=1; |
heinrich_kevin | 0:f40ab7184c3f | 79 | left = left * (-1); // For PWM the Value have to be positive |
heinrich_kevin | 0:f40ab7184c3f | 80 | } |
heinrich_kevin | 0:f40ab7184c3f | 81 | // If the right engines-value is greater than 0, the right engine turn FORWARD |
heinrich_kevin | 0:f40ab7184c3f | 82 | if(right > 0) |
heinrich_kevin | 0:f40ab7184c3f | 83 | { |
heinrich_kevin | 0:f40ab7184c3f | 84 | engineRF=1; |
heinrich_kevin | 0:f40ab7184c3f | 85 | engineRR=0; |
heinrich_kevin | 0:f40ab7184c3f | 86 | } |
heinrich_kevin | 0:f40ab7184c3f | 87 | // Or if the right engines-value is less than 0, the right engine turn REVERSE |
heinrich_kevin | 0:f40ab7184c3f | 88 | else if(right < 0) |
heinrich_kevin | 0:f40ab7184c3f | 89 | { |
heinrich_kevin | 0:f40ab7184c3f | 90 | engineRF=0; |
heinrich_kevin | 0:f40ab7184c3f | 91 | engineRR=1; |
heinrich_kevin | 0:f40ab7184c3f | 92 | right = right * (-1); // For PWM the Value have to be positive |
heinrich_kevin | 0:f40ab7184c3f | 93 | } |
heinrich_kevin | 0:f40ab7184c3f | 94 | //pc.printf("left: %4d\r\n", left); |
heinrich_kevin | 0:f40ab7184c3f | 95 | //pc.printf("right: %4d\r\n", right); |
heinrich_kevin | 0:f40ab7184c3f | 96 | // 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 | 97 | engineLEN=(left/255.0); // PWM Value : 0 ... 1 |
heinrich_kevin | 0:f40ab7184c3f | 98 | engineREN=(right/255.0); // PWM Value : 0 ... 1 |
heinrich_kevin | 0:f40ab7184c3f | 99 | } |
heinrich_kevin | 0:f40ab7184c3f | 100 | //Begin Testing bertl-engines |
heinrich_kevin | 0:f40ab7184c3f | 101 | void bertl_engine_test() |
heinrich_kevin | 0:f40ab7184c3f | 102 | { |
heinrich_kevin | 0:f40ab7184c3f | 103 | bertl_engine(100, 0); //The left engine must turn FORWARD for 2 seconds |
heinrich_kevin | 0:f40ab7184c3f | 104 | wait(2); |
heinrich_kevin | 0:f40ab7184c3f | 105 | bertl_engine(0, 100); //The right engine must turn FORWARD for 2 seconds |
heinrich_kevin | 0:f40ab7184c3f | 106 | wait(2); |
heinrich_kevin | 0:f40ab7184c3f | 107 | bertl_engine(-100, 0); //The left engine must turn REVERSE for 2 seconds |
heinrich_kevin | 0:f40ab7184c3f | 108 | wait(2); |
heinrich_kevin | 0:f40ab7184c3f | 109 | bertl_engine(0, -100); //The right engine must turn REVERSE for 2 seconds |
heinrich_kevin | 0:f40ab7184c3f | 110 | wait(2); |
heinrich_kevin | 0:f40ab7184c3f | 111 | } |
heinrich_kevin | 1:01bc0c86f111 | 112 | //End Testing bertl-engines |
heinrich_kevin | 1:01bc0c86f111 | 113 | // END Motor Routines |