particle-accelerator/code/arduino/coilDriver/coilDriver.ino
2019-06-14 19:54:00 +02:00

106 lines
2.2 KiB
C++

#include <SoftwareSerial.h>
#define coil1pin 10
#define coil2pin 12
#define coil3pin 11
#define swSerialRX 4
#define swSerialTX 5
#define sensor1pin 4
#define sensor2pin 3
#define sensor3pin 2
int impulsDelay = 1;
int impulsLength = 5;
int potValue = 1;
unsigned long previouscoil2trigger = 0;
unsigned long lastcoil2trigger = 0;
unsigned long lastdisplaywrite = 0;
int ballspeed = 0;
SoftwareSerial mySerial(swSerialRX, swSerialTX); // RX, TX
void setup() {
// coil triggers
pinMode(coil1pin,OUTPUT);
pinMode(coil2pin,OUTPUT);
pinMode(coil3pin,OUTPUT);
// pulling them HIGH
digitalWrite(coil1pin,HIGH);
digitalWrite(coil2pin,HIGH);
digitalWrite(coil3pin,HIGH);
// ball sensors
pinMode(sensor1pin,INPUT_PULLUP);
pinMode(sensor2pin,INPUT_PULLUP);
pinMode(sensor3pin,INPUT_PULLUP);
// preparing Serial connections
Serial.begin(9600);
Serial.flush();
mySerial.begin(4800);
mySerial.flush();
}
void loop() {
unsigned long currentMillis = millis();
// getting the pulse length from the pot
potValue = analogRead(A0);
impulsLength = map(potValue, 0, 1023, 0, 100);
// sending data to the displayDriver every 1s
if (currentMillis - lastdisplaywrite >= 1000) {
lastdisplaywrite = currentMillis;
mySerial.print(impulsLength);
mySerial.print(",");
mySerial.print(lastcoil2trigger-previouscoil2trigger);
mySerial.print('\n');
}
// checking if ball detected, if yes then fire the pulse
if (digitalRead(sensor1pin)) {
impuls1();
} else if (digitalRead(sensor2pin)) {
impuls2();
} else if (digitalRead(sensor3pin)) {
impuls3();
}
}
void impuls1() {
delay(impulsDelay);
digitalWrite(coil1pin, LOW);
delay(impulsLength);
digitalWrite(coil1pin, HIGH);
Serial.println(millis());
delay(50);
}
void impuls2() {
delay(impulsDelay);
digitalWrite(coil2pin, LOW);
delay(impulsLength);
digitalWrite(coil2pin, HIGH);
Serial.println(millis());
delay(50);
previouscoil2trigger = lastcoil2trigger;
lastcoil2trigger = millis();
}
void impuls3() {
delay(impulsDelay);
digitalWrite(coil3pin, LOW);
delay(impulsLength);
digitalWrite(coil3pin, HIGH);
Serial.println(millis());
delay(50);
}