38 lines
1.1 KiB
Arduino
38 lines
1.1 KiB
Arduino
// ==================================================== interlock, second arduino, returns only inputs over wire
|
|
|
|
#include <Wire.h>
|
|
|
|
#define IMIN 22
|
|
#define IMAX 46
|
|
|
|
int byte_return_arr[4];
|
|
|
|
void setup() { // ---------------------------------------------------------------------------------------- setup
|
|
Wire.begin(0x55);
|
|
Wire.onReceive(calculate_bytes);
|
|
Wire.onRequest(send_bytes);
|
|
for (int pinnr = IMIN; pinnr <= IMAX; pinnr++){
|
|
pinMode(pinnr, INPUT_PULLUP);
|
|
}
|
|
Serial.begin(9600);
|
|
}
|
|
|
|
|
|
void calculate_bytes(int numBytes) { // ------------------------------------------ command from controller event
|
|
while (Wire.available()) Wire.read();
|
|
for (int i = 0; i < 4; i++) byte_return_arr[i] = 0;
|
|
for (int j=IMIN;j<=IMAX;j++) byte_return_arr[(j-IMIN)/8]+=(!digitalRead(j)*1<<((j-IMIN)%8));
|
|
}
|
|
|
|
void send_bytes(){
|
|
for (int i = 0; i < 4; i++){
|
|
Wire.write(byte_return_arr[i]);
|
|
}
|
|
}
|
|
|
|
void loop() { // ------------------------------------------------------------------------------------------ loop
|
|
|
|
}
|
|
|
|
// ========================================================================================================= END
|