I'm currently building a launch controller for air rockets/model rockets. As of now, I have almost all of the hardware connected with the exception of powering everything. I also have some code done, but am having issues with code resets.
First question, how would I go about powering this? I have an Arduino with a relay shield on it, requiring 9v. When I hooked the Arduino up to the bench supply, it seemed to pull around 0.3A maximum. Should I just tie multiple 9v batteries in parallel, or use a larger 12v battery and regulate it down?
Next, I am having trouble with my code and software restarts. I have the code working, but I want it to be so once someone presses the button to launch, they have to release the arm button and the launch button in order to launch again.
This is my current code with something I found to restart the code, but I am not sure how to require the buttons to be released.
int const armButton = 52;
int const fireButton = 53;
int const relayPin1 = 2;
int const relayPin2 = 3;
int const relayPin3 = 4;
int const relayPin4 = 5;
boolean armPrinted = false;
boolean firePrinted = false;
void setup() {
//Begin serial for debugging
Serial.begin(9600);
//Set buttons as inputs and log to serial
pinMode(armButton, INPUT);
Serial.println("Arm Button, INPUT");
pinMode(fireButton, INPUT);
Serial.println("Fire Button, INPUT");
//Enable internal pull-ups
digitalWrite(armButton, HIGH);
digitalWrite(fireButton, HIGH);
Serial.println("Pullups ENABLED");
//Ser relay pins as outputs
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
Serial.println("Relays set");
}
void loop() {
while(digitalRead(armButton) == LOW) {
alertWarning();
armPrint(); //while the arm button is pressed, log to serial armed, and stay ready.
if(digitalRead(fireButton) == LOW) {
launch(); //Run routine to launch, (Pull 1st relay high.
}
else {
armedWaiting(); //If armed, but button not pressed, log to serial
}
}
}
void armPrint() {
if(!armPrinted){ //Check to see if arming message has already been printed
Serial.println("ARMED"); //If not, print arming message
armPrinted = true; /* Set arming message to be printed */ }
}
void armedWaiting() {
Serial.println("Waiting");
delay(500);
}
void(* resetFunc) (void) = 0; //declare reset function @ address 0
void launch() {
Serial.println("LAUNCHING");
digitalWrite(relayPin1, HIGH);
delay(500);
digitalWrite(relayPin1, LOW);
resetFunc(); //call reset
}
void alertWarning() {
digitalWrite(relayPin4, HIGH);
delay(500);
digitalWrite(relayPin4, LOW);
delay(500);
}