Zeigt her eure geilen Projekte!

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.

IR_to_I2C1.jpg

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