// sender + receiver
const int led = 13;
const int analogPin = A0;
const int lightThreshold = 100;
const int deltaT = 1000;
const int syncT = 12*deltaT;
void setup() {
// put your setup code here, to run once:
}
void writeSignal(bool s, uint16_t time) {
digitalWrite(led,s);
delay(time);
}
void sendSync() {
writeSignal(true,syncT);
sendBit(false);
}
void sendBit(bool bit) {
writeSignal(bit,deltaT);
}
void sendByte(byte b) {
sendSync();
for( int i = 7; i>=0; i-- ) {
sendBit(bitRead(b,i));
}
}
bool readSignal() {
return analogRead(analogPin) >= lightThreshold;
}
bool receiveBit() {
delay(deltaT/2);
bool s = readSignal();
delay(deltaT);
return s;
}
bool receiveSync() {
while(readSignal()==0) {
delay(syncT/10);
}
long int start = millis();
while(readSignal()==1) {
delay(syncT/10);
}
if ( (millis()-start)>=(12*deltaT) ) {
delay(deltaT); // low-Signal überspringen ohne Überprüfung
return true;
}
return false;
}
byte receiveByte() {
byte b = 0;
if( receiveSync() ) {
for( int i = 7; i>=0; i-- ) {
bitWrite(b,i,receiveBit());
}
}
return b;
}
void loop() {
// put your main code here, to run repeatedly:
sendByte(0b10101010);
}