#include <Arduino.h>
#include <string.h>
//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);
}