92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
// need 0.1uf cap between vcc and ground for proper operation
|
|
// need 10k pull up resistor on scl and sda for i2c to work correctly
|
|
|
|
// Pin Mappings (Per TinyCore)
|
|
// ATTiny Pin -- Arduino Pin
|
|
// 01 17/PA2/RESET
|
|
// 02 0/PD0/RXD
|
|
// 03 1/PD1/TXD
|
|
// 04 2/PA1/XTAL2
|
|
// 05 3/PA0/XTAL1
|
|
// 06 4/PD2/INT0
|
|
// 07 5/PD3/INT1
|
|
// 08 6/PD4
|
|
// 09 7/PD5
|
|
// 10 GND
|
|
// 11 8/PD6
|
|
// 12 9/PB0/PCINT0
|
|
// 13 10/PB1/PCINT1
|
|
// 14 11/PB2/PCINT2/OC0A
|
|
// 15 12/PB3/PCINT3/OC1A
|
|
// 16 13/PB4/PCINT4/OC1B
|
|
// 17 14/PB5/PCINT5/MOSI/DI/SDA
|
|
// 18 15/PB6/PCINT6/MISO/DO
|
|
// 19 16/PB7/PCINT7/SCK/SCL
|
|
// 20 VCC
|
|
|
|
// i2c ATTiny Pins
|
|
// sda: 17
|
|
// scl: 19
|
|
|
|
// DIP Switch 1 ATTiny Pins
|
|
// 2 - 9
|
|
|
|
// DIP Switch 2 ATTiny Pins
|
|
// 1
|
|
// 11-16
|
|
// 18
|
|
|
|
#define I2C_ADDRESS 0x65
|
|
|
|
#include <Wire.h>
|
|
|
|
void setup() {
|
|
pinMode(0, INPUT);
|
|
pinMode(1, INPUT);
|
|
pinMode(2, INPUT);
|
|
pinMode(3, INPUT);
|
|
pinMode(4, INPUT);
|
|
pinMode(5, INPUT);
|
|
pinMode(6, INPUT);
|
|
pinMode(7, INPUT);
|
|
pinMode(17, INPUT);
|
|
pinMode(8, INPUT);
|
|
pinMode(9, INPUT);
|
|
pinMode(10, INPUT);
|
|
pinMode(11, INPUT);
|
|
pinMode(12, INPUT);
|
|
pinMode(13, INPUT);
|
|
pinMode(15, INPUT);
|
|
|
|
Wire.begin(I2C_ADDRESS);
|
|
Wire.onRequest(requestEvent);
|
|
}
|
|
|
|
void loop() {
|
|
delay(100);
|
|
}
|
|
|
|
// function that executes whenever data is requested by master
|
|
// this function is registered as an event, see setup()
|
|
byte dip_switches[] = {0b00000000, 0b00000000};
|
|
void requestEvent() {
|
|
bitWrite(dip_switches[0], 7, digitalRead(0));
|
|
bitWrite(dip_switches[0], 6, digitalRead(1));
|
|
bitWrite(dip_switches[0], 5, digitalRead(2));
|
|
bitWrite(dip_switches[0], 4, digitalRead(3));
|
|
bitWrite(dip_switches[0], 3, digitalRead(4));
|
|
bitWrite(dip_switches[0], 2, digitalRead(5));
|
|
bitWrite(dip_switches[0], 1, digitalRead(6));
|
|
bitWrite(dip_switches[0], 0, digitalRead(7));
|
|
|
|
bitWrite(dip_switches[1], 0, digitalRead(15));
|
|
bitWrite(dip_switches[1], 1, digitalRead(13));
|
|
bitWrite(dip_switches[1], 2, digitalRead(12));
|
|
bitWrite(dip_switches[1], 3, digitalRead(11));
|
|
bitWrite(dip_switches[1], 4, digitalRead(10));
|
|
bitWrite(dip_switches[1], 5, digitalRead(9));
|
|
bitWrite(dip_switches[1], 6, digitalRead(8));
|
|
bitWrite(dip_switches[1], 7, digitalRead(17));
|
|
Wire.write(dip_switches, sizeof(dip_switches));
|
|
}
|