Schaltet die LINE Sensoren ein -> die Sensoren sind auf LED gelegt. Durch anheben bzw am Tisch aufsetzen können die LED geschalten werden. Kannst auch mit dem Finger über die LINE Sensoren fahren. Durch drehen der MONTIERTEN Räder blinken die 4 INCREMENT LED's

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();
    }
}