int Trigger = 2;
int Disconnector = 3;
int Selector = A0;
int Motor = 13;
int TriggerStatus = HIGH; //trigger switch
int DiscoStatus = HIGH; //disconnector switch
int BurstNum = 0; //burst shots fired counter
int BurstSet = 3; //3 round burst
int AnalogStatus = 0;
int SelectorStatus = 0; //Selector Position -- 0(Safe), 1(Semi), 2(Burst), 3(Full Auto)
int Block = 1; //Block trigger after disconnector goes LOW
int SelStat = 0; //Selector Analog Status
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(A0, INPUT_PULLUP);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Serial.begin(9600);
}
void loop() {
ReadTrigger();
ReadDisco();
ReadSelector();
//BurstNum = 0;
AnalogStatus = analogRead(Selector); //Diagnostic -- read analog selector pin
//Serial.println(SelectorStatus, DEC);
Serial.println(SelectorStatus);
Serial.println(DiscoStatus);
delay(200);
if(TriggerStatus == LOW) //on trigger pull
{
ReadTrigger();
ReadDisco();
ReadSelector();
Block = 0;
if(SelectorStatus == 0)
{
ReadSelector();
}
else if(SelectorStatus == 1)
{
if(TriggerStatus == LOW && DiscoStatus == HIGH && Block == 0)
{
digitalWrite(13, HIGH);
ReadDisco();
}
else if(TriggerStatus == LOW && DiscoStatus == LOW)
{
Block = 1;
digitalWrite(13,LOW);
Disconnect();
Serial.println(Block); //Diagnostic -- Show Block status
}
ReadTrigger();
}
else
{
digitalWrite(13, LOW);
}
}
else if(SelectorStatus == 2)
{
digitalWrite(13,HIGH);
//BurstMode();
if(TriggerStatus == LOW && DiscoStatus == LOW && Block == 0)
{
++BurstNum;
Serial.println(BurstNum);
while(TriggerStatus == LOW && BurstNum < BurstSet && DiscoStatus == LOW)
{
ReadDisco();
ReadTrigger();
Serial.println(TriggerStatus);
}
}
else if (TriggerStatus == HIGH)
{
BurstNum = 0;
digitalWrite(13,LOW);
}
if(BurstNum >=BurstSet)
{
Block = 1;
Disconnect();
}
/*else if(TriggerStatus == HIGH)
{
BurstNum = 0;
digitalWrite(13, LOW);
}*/
}
else if(SelectorStatus == 3)
{
while(TriggerStatus == LOW)
{
digitalWrite(13,HIGH);
ReadTrigger();
}
digitalWrite(13,LOW);
}
{
}
}
//}
void ReadTrigger()
{
TriggerStatus = digitalRead(Trigger);
}
void ReadDisco()
{
DiscoStatus = digitalRead(Disconnector);
}
void BurstMode()
{
BurstNum = 0;
}
void ReadSelector()
{
SelStat = analogRead(Selector);
if(SelStat >= 000 && SelStat <= 255)
{
SelectorStatus = 0; //Safe
}
else if((SelStat >= 256) && (SelStat <= 500))
{
SelectorStatus = 1; // Semi
}
else if(SelStat >= 501 && SelStat <= 750)
{
SelectorStatus = 2; //Burst
}
else if(SelStat >= 751 && SelStat <= 1000)
{
SelectorStatus = 3; //Full
}
}
void Disconnect()
{
digitalWrite(13,LOW);
while (TriggerStatus == LOW && Block == 1) //Shut off trigger when disconnector goes LOW
{
digitalWrite(13,LOW);
ReadTrigger();
// Serial.println(Block); //Diagnostic, show Block status
}
Block = 0;
BurstNum = 0;
}