Tastendruckabfrage in der ISR an einem PCF8574

Hallo pylon!

Ja, den Code habe ich ohne Interrupt getestet. Ohne Interrupt kann ich jede Taste abfragen, solbald ich es mit dem Interrupt probiere hägt sich der µC.

Hier der Code ohne Interrupt:

#include <Wire.h>

#define I2C_Adresse 0x20

byte tmp_data;
int i =3;
byte current_data;
byte read_data;
static char Key = '\0';
int row_select= 0;
int c;
int v;


// Daten für jede Zeile der Tastatur vom PCF8574
const int pcf8574_row_data[4] = 
{
  B01101111, B01011111, B00111111 
};
const char KeyCode[4][5] =
{
  "026",
  "7S3",
  "48E",
  "159"
};

void setup()
{
  Wire.begin();        )
  Serial.begin(9600);  // start serial for output
  
   pinMode(PIN2, INPUT);
  digitalWrite(PIN2, HIGH);
  
}

void loop()
{
 
  
  if (Key != '\0')
     {
     
     Serial.print("\n Key = ");
     Serial.print(Key);
    
    Key= '\0';
     
     }
  
 

  
for(c=0;c<3;c++)
{
  
  				
  i2c_write(pcf8574_row_data[c]);
  
  
     
  
  read_data = i2c_read();    // receive a byte as character
    
    // UM XOR zu erhalten und die aktuellen Daten zu vergleichen und um zu erkennen, 
    // wenn eine Spalte LOW ist
    
  tmp_data = read_data ^ current_data; // current_data = Aktuelle daten
    
    
    tmp_data = tmp_data >>i;
  
     if (tmp_data == 1)
     {
      Key = KeyCode[row_select][c];
      
      delay(500);
      tmp_data = '0/';
     }
    
  i--;
     if(i < 0) 
  {  
    i = 3;
  }
   
   }
       //Nächste Zeile
      row_select++;
     if(row_select == 4) 
  {                               // Wenn du bei der letzten Zeile angekommen bist, 
    row_select = 0;	     // beginnne wieder bei der ersten Zeile
  }
 
}


 void i2c_write(int data)
{
  current_data = data;

  Wire.beginTransmission(I2C_Adresse);  //Beginnt eine Übertragung vom Master zum Slave.							
  Wire.write(data);			//Speichert die Daten in einer Warteschleife, die dann an eine Slave-
				//Adresse gesendet wird. Wire.write								
  Wire.endTransmission();		//Beendet den Übertragungsblock
}

int i2c_read()
{
  Wire.requestFrom(I2C_Adresse, 1);	//Fordert von einem Gerät Informationen an. 
				//dabei die 7-Bit-Geräteadresse, quantity die Anzahl von Bytes, 								              //die erwartet werden.
  return Wire.read();		//Empfängt das nächste Byte, das auf dem Bus für das Gerät vorliegt
				//und gibt dieses als »Byte« zurück.
}