Hier ist er nun, der Zwilling des IR_UART, der IR_to_I2C1.
Im ATtiny85 erfolgt eine Umsetzung des IR-Codes auf die I2C Schnittstelle.
Der ATtiny85 arbeitet als Slave und gibt ein LOW-Signal an den Master, wenn ein korrekter IR-Code detektiert wurde. Danach holt der Master den I2C-Code vom Slave ab.
Hier meine kleine Platine.

Im Vordergrund der Steckplatz für den IR-Empfänger, dahinter der ATtiny85 und die Stiftleiste zum Anschluss an die zu steuernde Technik.
Schaltung zum IR_to_UART, IR_to_I2C und beide Sketche.
IR to UART:
* ATtiny85 Slave IR to UART * 09.03.2017
*
* Belegung des Attiny85:
* (SS)PB5 - 1 | \/ | 8 - Vcc
* PB3 - 2 | | 7 - PB2 (SCK) + SCL
* PB4 - 3 | | 6 - PB1 (MISO)
* GND - 4 | | 5 - PB0 (MOSI) + SDA
*
* RX = PB4 / Pin3
* TX = PB3 / Pin2
* IRr = PB2 / Pin7
*
*/
#include <IRremote.h> // IRremote für ATtiny - http://gammon.com.au/Arduino/IRremote_Attiny.zip
#include <SoftwareSerial.h> // https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/libraries/SoftwareSerial/src/SoftwareSerial.h
SoftwareSerial mySerial(4, 3); // (4=RX / 3=TX) (Pin3, Pin2)
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
mySerial.begin(57600);
mySerial.print(F("1111"));
mySerial.print('\n');
irrecv.enableIRIn(); // Start IR-Receiver
}
void loop()
{
IRDecode(); // start IR-Code empfangen und dekodieren
}
void IRDecode()
{
if (irrecv.decode(&results)) {
switch (results.value)
{
case 16625743:
mySerial.print(F("9100")); // = 0
mySerial.print('\n');
break;
case 16580863:
mySerial.print(F("9101")); // = 1
mySerial.print('\n');
break;
case 16613503:
mySerial.print(F("9102")); // = 2
mySerial.print('\n');
break;
case 16597183:
mySerial.print(F("9103")); // = 3
mySerial.print('\n');
break;
case 16589023:
mySerial.print(F("9104")); // = 4
mySerial.print('\n');
break;
case 16621663:
mySerial.print(F("9105")); // = 5
mySerial.print('\n');
break;
case 16605343:
mySerial.print(F("9106")); // = 6
mySerial.print('\n');
break;
case 16584943:
mySerial.print(F("9107")); // = 7
mySerial.print('\n');
break;
case 16617583:
mySerial.print(F("9108")); // = 8
mySerial.print('\n');
break;
case 16601263:
mySerial.print(F("9109")); // = 9
mySerial.print('\n');
break;
case 16593103:
mySerial.print(F("9110")); // = *
mySerial.print('\n');
break;
case 16609423:
mySerial.print(F("9111")); // = #
mySerial.print('\n');
break;
case 16591063:
mySerial.print(F("9112")); // = <
mySerial.print('\n');
break;
case 16607383:
mySerial.print(F("9113")); // = >
mySerial.print('\n');
break;
case 16615543:
mySerial.print(F("9114")); // = ^
mySerial.print('\n');
break;
case 16619623:
mySerial.print(F("9115")); // = v
mySerial.print('\n');
break;
case 16623703:
mySerial.print(F("9116")); // = ok
mySerial.print('\n');
break;
}
irrecv.resume(); // Receive the next value
}
}
IR to I2C:
* ATtiny85 Slave IR to I2C * 14.03.2017
*
* Belegung des Attiny85:
(SS)PB5 - 1 | \/ | 8 - Vcc
PB3 - 2 | | 7 - PB2 (SCK) + SCL
PB4 - 3 | | 6 - PB1 (MISO)
GND - 4 | | 5 - PB0 (MOSI) + SDA
*
* SCL = PB2 / Pin7
* SDA = PB0 / Pin5
* IRr = PB3 / Pin2
* IRQ = PB1 / Pin6
* Led = PB4 / Pin3
*/
#include "TinyWireS.h" // I2C-Slave für ATTiny - https://github.com/rambo/TinyWire/tree/master/TinyWireS
#include <IRremote.h> // IRremote für ATtiny - http://gammon.com.au/Arduino/IRremote_Attiny.zip
#define I2C_ADDR 0x26 // i2c slave address
#define IRRec_PIN 3 // Pin2
#define IRQ_PIN 1 // Pin6
#define Led_PIN 4 // Pin3
byte i2cByte[] = { 200, 201, 202, 203, 204, 205, 206 , 207, 208, 209, 210, 211, 212, 213, 214, 215, 216 };
byte sendByte = 0;
byte byteRcvd = 0;
unsigned int irDecoded = 0;
IRrecv irrecv(IRRec_PIN);
decode_results results;
void setup()
{
irrecv.enableIRIn(); // Start IR-Receiver
TinyWireS.begin(I2C_ADDR); // init I2C Slave mode
digitalWrite(IRQ_PIN, HIGH); // Outpu to HIGH
pinMode(IRQ_PIN, OUTPUT); // IRQ LOW
pinMode(Led_PIN, OUTPUT); // Send I2C-Led
}
void loop()
{
byteRcvd = 0;
readIRcode(); // start IR-Code empfangen und dekodieren
I2CReceived(); // I2C Code empfangen und senden
}
void I2CReceived()
{
if (TinyWireS.available()) { // receive I2C
byteRcvd = TinyWireS.receive(); // read byte from master
digitalWrite(Led_PIN, HIGH);
TinyWireS.send(sendByte); // send I2C-byte
delay(20);
digitalWrite(Led_PIN, LOW);
}
}
void readIRcode()
{
if (irrecv.decode(&results)) {
switch (results.value)
{
case 16625743:
sendi2cIRQ(i2cByte[0]);
break;
case 16580863:
sendi2cIRQ(i2cByte[1]);
break;
case 16613503:
sendi2cIRQ(i2cByte[2]);
break;
case 16597183:
sendi2cIRQ(i2cByte[3]);
break;
case 16589023:
sendi2cIRQ(i2cByte[4]);
break;
case 16621663:
sendi2cIRQ(i2cByte[5]);
break;
case 16605343:
sendi2cIRQ(i2cByte[6]);
break;
case 16584943:
sendi2cIRQ(i2cByte[7]);
break;
case 16617583:
sendi2cIRQ(i2cByte[8]);
break;
case 16601263:
sendi2cIRQ(i2cByte[9]);
break;
case 16593103:
sendi2cIRQ(i2cByte[10]);
break;
case 16609423:
sendi2cIRQ(i2cByte[11]);
break;
case 16591063:
sendi2cIRQ(i2cByte[12]);
break;
case 16607383:
sendi2cIRQ(i2cByte[13]);
break;
case 16615543:
sendi2cIRQ(i2cByte[14]);
break;
case 16619623:
sendi2cIRQ(i2cByte[15]);
break;
case 16623703:
sendi2cIRQ(i2cByte[16]);
break;
}
irrecv.resume(); // Receive the next value
}
}
void sendi2cIRQ(byte x) // IR-Signal wurde dekodiert, an Master senden
{
digitalWrite(IRQ_PIN, LOW);
delay(10);
digitalWrite(IRQ_PIN, HIGH);
sendByte = x;
}

