Gottfried Enenkel
/
_B15_T3_Line
B15 LINE Sensor Test
main.cpp@1:d646fe79bc6c, 2015-05-31 (annotated)
- Committer:
- Enenkel
- Date:
- Sun May 31 16:34:40 2015 +0000
- Revision:
- 1:d646fe79bc6c
- Parent:
- 0:a8a0195ed7dc
- Child:
- 2:90c675f0505a
B15 Line Sensor Test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Enenkel | 0:a8a0195ed7dc | 1 | /*********************************** |
Enenkel | 1:d646fe79bc6c | 2 | name: BERTL15_LINE SENSOR_TEST |
Enenkel | 1:d646fe79bc6c | 3 | author: Enenkel |
Enenkel | 0:a8a0195ed7dc | 4 | description: |
Enenkel | 0:a8a0195ed7dc | 5 | Die Taster vom I2C Expander werden direkt auf die LED's des Expander geschalten |
Enenkel | 0:a8a0195ed7dc | 6 | ***********************************/ |
Enenkel | 0:a8a0195ed7dc | 7 | #include "mbed.h" |
Enenkel | 1:d646fe79bc6c | 8 | |
Enenkel | 1:d646fe79bc6c | 9 | DigitalOut Von (P1_2); // Motor Spannung ON |
Enenkel | 1:d646fe79bc6c | 10 | DigitalOut LineON (P1_16);// Line Sensor aktivieren |
Enenkel | 1:d646fe79bc6c | 11 | DigitalIn OSI1 (P0_14); // OSI1 |
Enenkel | 1:d646fe79bc6c | 12 | DigitalIn OSI2 (P0_12); |
Enenkel | 1:d646fe79bc6c | 13 | DigitalIn OSI3 (P0_16); |
Enenkel | 1:d646fe79bc6c | 14 | DigitalIn OSI4 (P0_13); |
Enenkel | 1:d646fe79bc6c | 15 | DigitalIn OSI5 (P0_22); // OSI5 |
Enenkel | 0:a8a0195ed7dc | 16 | I2C i2c(p28, p27); // die Adressen des I2C Busses am uP |
Enenkel | 0:a8a0195ed7dc | 17 | // p28 -> SDA |
Enenkel | 0:a8a0195ed7dc | 18 | // p27 -> SCL |
Enenkel | 1:d646fe79bc6c | 19 | |
Enenkel | 1:d646fe79bc6c | 20 | char anzeige; |
Enenkel | 1:d646fe79bc6c | 21 | |
Enenkel | 0:a8a0195ed7dc | 22 | int main() { |
Enenkel | 1:d646fe79bc6c | 23 | anzeige = 0x00; // Anzeige der LED's |
Enenkel | 0:a8a0195ed7dc | 24 | char btn = 0; |
Enenkel | 0:a8a0195ed7dc | 25 | // **** Config PCA9555 I0 as output ******* |
Enenkel | 0:a8a0195ed7dc | 26 | i2c.start(); |
Enenkel | 0:a8a0195ed7dc | 27 | i2c.write(0x40); // Adresse des PCA9555 = 40 |
Enenkel | 0:a8a0195ed7dc | 28 | // das letzte Bit = 0 -> schreiben 0040 0000 |
Enenkel | 0:a8a0195ed7dc | 29 | i2c.write(0x06); // Befehl für das IO Port 0 -> siehe SCHEMA des PCA9555 |
Enenkel | 0:a8a0195ed7dc | 30 | i2c.write(0x00); // Schalte alle Pins des Ports als OUTPUT |
Enenkel | 0:a8a0195ed7dc | 31 | i2c.stop(); |
Enenkel | 0:a8a0195ed7dc | 32 | |
Enenkel | 0:a8a0195ed7dc | 33 | while(1) { |
Enenkel | 1:d646fe79bc6c | 34 | anzeige = 0x00; // Anzeige LED'y auf 0 setzen |
Enenkel | 0:a8a0195ed7dc | 35 | // Einlesen der Taster und speichern unter btn |
Enenkel | 0:a8a0195ed7dc | 36 | i2c.start(); |
Enenkel | 1:d646fe79bc6c | 37 | /* Das letzte Bit der Adresse entscheidet |
Enenkel | 0:a8a0195ed7dc | 38 | ob geschrieben oder gelesen wird. |
Enenkel | 0:a8a0195ed7dc | 39 | 0 => schreiben; 1 => lesen */ |
Enenkel | 1:d646fe79bc6c | 40 | i2c.write(0x40); //Adresse & schreiben 0100 0000 |
Enenkel | 1:d646fe79bc6c | 41 | i2c.write(0x01); //aktivate Port 1 |
Enenkel | 0:a8a0195ed7dc | 42 | |
Enenkel | 0:a8a0195ed7dc | 43 | i2c.start(); |
Enenkel | 1:d646fe79bc6c | 44 | i2c.write(0x41); // Adresse & LESEN 0100 0001 |
Enenkel | 1:d646fe79bc6c | 45 | btn = i2c.read(0); // Einlesen des Ports 1 und speichern unter btn |
Enenkel | 0:a8a0195ed7dc | 46 | i2c.stop(); |
Enenkel | 1:d646fe79bc6c | 47 | // Auswertung der LINE SENSOREN |
Enenkel | 1:d646fe79bc6c | 48 | if (OSI1 == 1 ) // Line Sensor ganz LINKS |
Enenkel | 1:d646fe79bc6c | 49 | { |
Enenkel | 1:d646fe79bc6c | 50 | anzeige = anzeige & 0x80; |
Enenkel | 1:d646fe79bc6c | 51 | } |
Enenkel | 1:d646fe79bc6c | 52 | if (OSI2 == 1) // Line Sensor LINKS |
Enenkel | 1:d646fe79bc6c | 53 | { |
Enenkel | 1:d646fe79bc6c | 54 | anzeige = anzeige & 0x40; |
Enenkel | 1:d646fe79bc6c | 55 | } |
Enenkel | 1:d646fe79bc6c | 56 | if (OSI3 == 1) // Line Sensor RECHTS |
Enenkel | 1:d646fe79bc6c | 57 | { |
Enenkel | 1:d646fe79bc6c | 58 | anzeige = anzeige & 0x20; |
Enenkel | 1:d646fe79bc6c | 59 | } |
Enenkel | 1:d646fe79bc6c | 60 | if (OSI4 == 1) // Line Sensor ganz RECHT |
Enenkel | 1:d646fe79bc6c | 61 | { |
Enenkel | 1:d646fe79bc6c | 62 | anzeige = anzeige & 0x08; |
Enenkel | 1:d646fe79bc6c | 63 | } |
Enenkel | 1:d646fe79bc6c | 64 | if (OSI5 == 1) // Line Sensor MITTE |
Enenkel | 1:d646fe79bc6c | 65 | { |
Enenkel | 1:d646fe79bc6c | 66 | anzeige = anzeige & 0x40; |
Enenkel | 1:d646fe79bc6c | 67 | } |
Enenkel | 1:d646fe79bc6c | 68 | |
Enenkel | 0:a8a0195ed7dc | 69 | // Schreiben auf Port 0 und damit auf die LED's |
Enenkel | 0:a8a0195ed7dc | 70 | i2c.start(); |
Enenkel | 1:d646fe79bc6c | 71 | i2c.write(0x40); // Adresse & schreiben |
Enenkel | 1:d646fe79bc6c | 72 | i2c.write(0x02); // |
Enenkel | 1:d646fe79bc6c | 73 | i2c.write(~anzeige); // schriebn auf Port 0 den INVERSEN Wert von btn |
Enenkel | 0:a8a0195ed7dc | 74 | i2c.stop(); |
Enenkel | 0:a8a0195ed7dc | 75 | } |
Enenkel | 0:a8a0195ed7dc | 76 | } |
Enenkel | 0:a8a0195ed7dc | 77 |