-
Notifications
You must be signed in to change notification settings - Fork 1
/
ProgrammingModule.ino
66 lines (56 loc) · 1.65 KB
/
ProgrammingModule.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <EEPROM.h>;
//!!!!!!!
// * =EEPROM address
//!!!!!!!
int rof=255; //influences the rpm , *0
bool activeBreak=true; //stops the motor after it finishes firing , *1
bool preCocking=false; //stops the motor in a cocked position , improves trigger response , *2
bool binaryTrigger=false; //fires on both pressing and releasing the trigger , *3
bool smartTrigger=false; //first shot's rpm is max speed the next is the ROF's value ,better trigger response , *4
//inp
int triggerPin = PIN_PC0;
int cyclePin = PIN_PA1;
//out
int NmosOutput = PIN_PA5;
int firstPos=1; //Firing mode positions , *5
int secondPos=2; //1=Semi-Auto,2=Full-Auto,3=Burst , *6
int burstAmount=3; //number of bb's shot in a burst,MAX=5, *7
int rps=0;
bool shooting=false;
unsigned long int startTime;
void setup() {
EEPROM.put(0,rof);
EEPROM.put(1,activeBreak);
EEPROM.put(2,preCocking);
EEPROM.put(3,binaryTrigger);
EEPROM.put(4,smartTrigger);
EEPROM.put(5,firstPos);
EEPROM.put(6,secondPos);
EEPROM.put(7,burstAmount);
Serial.println("Settings have been saved!");
attachInterrupt(digitalPinToInterrupt(triggerPin), Start_shoot, FALLING);
attachInterrupt(digitalPinToInterrupt(cyclePin), Cycle_finish, RISING);
Serial.begin(9600);
}
//Code for Rounds per Second
|
\ | /
\_/
void Start_shoot(){
detachInterrupt(digitalPinToInterrupt(triggerPin));
shooting=true;
analogWrite(NmosOutput,rps);
}
void Cycle_finish(){
if(rps==0)
startTime=millis();
rps++;
}
void loop() {
if((millis()-startTime>=1000) && shooting == true){
EEPROM.put(8,rps);
Serial.println(rps);
analogWrite(NmosOutput,0);
shooting=false;
}
}