I Downloaded counting program from Github but it would not compile. A friend helped with the program but did not have an Arduino to run it. I loaded it. It complied but ran ball numbers into negative values and would not stop. When I triggered a score it would take it, drop the ball number by one then say nine balls available again. It may be the void reset line in the code.
First post and any help will be appreciated.
Dave
#include <SoftwareSerial.h>
#include <Servo.h>
//Name servo
Servo ballReturn;
// declare serial displays.
SoftwareSerial scoreDisp(A0,12);
SoftwareSerial ballDisp(A1,13);
// Pin declarations
int sensors[8] = {9,8,7,6,5,4,3,2}; //create an array of sensors
int resetButton = 10;
int servoPin = 11;
int resetDisplay = 10;
// General declarations
int score = 0;
int balls = 9;
int n = 0;
int result;
int s;
// Buffer Declaration
char ballTemp[10];
char scoreTemp[10];
// Debounce delays
int sensDelay = 500;
int resetDelay = 500;
// Servo declaration
int open = 90;
int close =180;
void setup() {
// using a for loop to designate each input pinas an INPUT.
for (int eachSensor = 2; eachSensor <= 9; eachSensor++) {
pinMode(sensors[eachSensor] ,INPUT);
}
pinMode(resetButton, INPUT);
ballReturn.attach(servoPin);
Serial.begin(9600);
ballDisp.begin(9600);
scoreDisp.begin(9600);
resetDisplays();
updateDisplays();
}
void loop() {
while (balls > 0) {
// returnControl(close);
for(int s = 2; s <= 9; s++){ //check sensor array.
result = digitalRead(sensors[s]);
if (result == LOW) {
if (s == 2) {
n = 100;
} else if (s == 3) {
n = 100;
} else if (s == 4) {
n = 50;
} else if (s == 5) {
n = 40;
} else if (s == 6) {
n = 30;
} else if (s == 7) {
n = 20;
} else if (s == 8) {
n = 10;
} else if (s == 9) {
n = 0;
}
addpoints(n);
}
}
//add line: a break attached to button to reset inc, without resetting arduino.
startOver();
}//end of while loop
startOver();
} //end of primary loop
void addpoints(int n){
score = score + n;
balls = balls - 1;
updateDisplays();
Serial.print("your score is: ");
Serial.println(score);
Serial.print("balls remaining: ");
Serial.println(balls);
delay(sensDelay);
}
void reset(){
returnControl(open);
score = 0;
balls = 9;
updateDisplays();
Serial.print("balls remaining: ");
Serial.println(balls);
delay(1500);
returnControl(close);
}
void startOver(){
int resetState = digitalRead(resetButton);
if (resetState == HIGH){
reset();
delay(resetDelay);
}
}
void returnControl(int x){
ballReturn.write(x);
}
void updateDisplays(){
resetDisplays();
sprintf(ballTemp, "%4d", balls);
sprintf(scoreTemp, "%04d", score);
ballDisp.print(ballTemp);
scoreDisp.print(score);
}
void resetDisplays(){
ballDisp.write('v');
scoreDisp.write('v');
}