// https://forum.arduino.cc/t/auslesen-der-easymeter-q3m-d0-schnittstelle/548183 int invertirpin = 6; // Phasenanschnitt bool nulldurchgang; int ausgpin = 3; unsigned long startn; unsigned long istn; unsigned long anschnitt = 6000; unsigned long solln; bool phasenanschnitt; bool phasenanschnittvorher; bool triactrigger; bool ausg; // aktiviert den Phasenanschnitt // Testpins int ledgelbpin = 4; int ledgruenpin = 5; void setup() { Serial.begin(9600); pinMode(invertirpin,OUTPUT); digitalWrite(invertirpin,HIGH); // HIGH non inv; low inv 74LS02 als xor vor Reciver-Pin pinMode(ledgelbpin,OUTPUT); pinMode(ledgruenpin,OUTPUT); ausg = HIGH; pinMode (ausgpin, OUTPUT); } byte incomingByte; String sMessage = ""; void loop() { while (Serial.available() > 0) { incomingByte = Serial.read(); if (incomingByte < 0x10) sMessage += "0"; sMessage += String(incomingByte, HEX); sMessage += " "; } if(sMessage != ""){ Serial.println(sMessage); sMessage = ""; } // Dimmer, Phasenanschnitt if(analogRead(3) < 10){ nulldurchgang = HIGH; digitalWrite(ledgruenpin,HIGH); } else{ nulldurchgang = LOW; digitalWrite(ledgruenpin,LOW); } if(solln < micros()){ phasenanschnitt = LOW; } if((phasenanschnittvorher != phasenanschnitt) && !phasenanschnitt){ triactrigger = HIGH; } else{ triactrigger = LOW; } phasenanschnittvorher = phasenanschnitt; digitalWrite(ausgpin,(triactrigger && ausg)); if(nulldurchgang == HIGH){ if(phasenanschnitt == LOW){ phasenanschnitt = HIGH; solln = micros() + anschnitt; } } }