BERTL16 Line Test

Dependencies:   mbed

main.cpp

Committer:
Enenkel
Date:
2015-05-31
Revision:
1:d646fe79bc6c
Parent:
0:a8a0195ed7dc
Child:
2:90c675f0505a

File content as of revision 1:d646fe79bc6c:

/***********************************
name:   BERTL15_LINE SENSOR_TEST
author: Enenkel 
description:
    Die Taster vom I2C Expander werden direkt auf die LED's des Expander geschalten
***********************************/
#include "mbed.h"

DigitalOut Von (P1_2);    // Motor Spannung ON 
DigitalOut LineON (P1_16);// Line Sensor aktivieren
DigitalIn OSI1 (P0_14);   // OSI1
DigitalIn OSI2 (P0_12);
DigitalIn OSI3 (P0_16);
DigitalIn OSI4 (P0_13);
DigitalIn OSI5 (P0_22);   // OSI5
I2C i2c(p28, p27);        // die Adressen des I2C Busses am uP 
                          // p28 -> SDA
                          // p27 -> SCL 
                        
char anzeige;                          
                          
int main() {
    anzeige = 0x00;       // Anzeige der LED's 
    char btn = 0;
    //     ****  Config PCA9555 I0 as output *******
    i2c.start();
       i2c.write(0x40);   // Adresse des PCA9555 = 40 
                          // das letzte Bit = 0 -> schreiben  0040 0000
       i2c.write(0x06);   // Befehl für das IO Port 0 -> siehe SCHEMA des PCA9555
       i2c.write(0x00);   // Schalte alle Pins des Ports als OUTPUT
    i2c.stop();    
    
    while(1) {
        anzeige = 0x00;        // Anzeige LED'y auf 0 setzen
        // Einlesen der Taster und speichern unter btn
        i2c.start();
                               /* Das letzte Bit der Adresse entscheidet 
                               ob geschrieben oder gelesen wird. 
                               0 => schreiben;   1 => lesen  */
        i2c.write(0x40);       //Adresse & schreiben   0100 0000 
        i2c.write(0x01);       //aktivate Port 1        
       
        i2c.start();
          i2c.write(0x41);     // Adresse & LESEN    0100 0001  
          btn = i2c.read(0);   // Einlesen des Ports 1 und speichern unter btn
        i2c.stop();
        // Auswertung der LINE SENSOREN
        if (OSI1 == 1 )        // Line Sensor ganz LINKS
           {
              anzeige = anzeige & 0x80; 
           }          
        if (OSI2 == 1)         // Line Sensor LINKS
           {
              anzeige = anzeige & 0x40; 
           }                 
        if (OSI3 == 1)         // Line Sensor RECHTS
           {
              anzeige = anzeige & 0x20;
           }
        if (OSI4 == 1)         // Line Sensor ganz RECHT
           {
              anzeige = anzeige & 0x08;    
           }   
        if (OSI5 == 1)         // Line Sensor MITTE
           {
              anzeige = anzeige & 0x40;    
           }  
           
        // Schreiben auf Port 0 und damit auf die LED's
        i2c.start();
          i2c.write(0x40);      // Adresse & schreiben
          i2c.write(0x02);      // 
          i2c.write(~anzeige);  // schriebn auf Port 0 den INVERSEN Wert von btn
        i2c.stop();
    }
}