#include #include //default delay and output trigger length int length = 4000; bool enabled = false; int wholes = 0; int remain =5000-8; const byte inPin = 2; const byte outPin = 13; void send(){ if (enabled){ //and nwo for some dirty work //delaying microseconds doesnt work well forl longer times //so we will repeatedly wait for shorter times //sorry for(int i = 1; i<=wholes; i++) delayMicroseconds(15000); delayMicroseconds(remain); //digitalWrite was slow //digitalWrite(outPin, HIGH); PORTB = B100000; delayMicroseconds(length); //digitalWrite(outPin, LOW); PORTB = B000000; } } void setup() { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.println("Welcome to arduino trigger system for GOLEM"); attachInterrupt(digitalPinToInterrupt(2), send, RISING); } int incomingByte = 0; void loop() { if (Serial.available() > 0) { // read the incoming line: String incoming; incoming = Serial.readString(); if (incoming.substring(0, 6) == "enable"){ enabled = true; Serial.println("trigger enabled"); } else if (incoming.substring(0, 7) == "disable"){ enabled = false; Serial.println("trigger disabled"); } else if (incoming.substring(0, 3) == "set"){ String text = incoming.substring(4); int trig_delay = text.toInt(); if (trig_delay<5){ Serial.println("minimal delay is 5us"); trig_delay=5; } Serial.print("setting delay time to: "); Serial.print(trig_delay); Serial.println("us"); trig_delay=trig_delay-5; wholes = trig_delay/15000; remain = trig_delay%15000; } else if (incoming.substring(0,1) == "t"){ if(enabled){ Serial.println("TRIGGERED!"); //send(); PORTB = B100000; delayMicroseconds(length); //digitalWrite(outPin, LOW); PORTB = B000000; } } else{ Serial.print("unknown command: "); Serial.println(incoming.substring(0, 5)); } } //delay(500); }