//pinball machine V1.00 #include //capacitive sensing library CapacitiveSensor f1Cap = CapacitiveSensor(4, 2); //wire from pin 2 to left side of res w/ 10MOHM res - ABOVE FLIPPERS CapacitiveSensor f2Cap = CapacitiveSensor(5, 3); //wire from pin 5 to left side of res - BOTTOM OF PLAY FIELD CapacitiveSensor b1Cap = CapacitiveSensor(6, 7); //wire from pin 6 to left side of res - FIRST SOLENOID BUMPER CapacitiveSensor b2Cap = CapacitiveSensor(8, 9); //wire from pin 8to left side of res - SECJOND SOLENOID BUMPER bool game = true; bool touchedBOTTOM = false; const int solenoid1 = 10; const int solenoid2 = 11; const int threshold = 500; unsigned long csSum; // for eliminating random errors const int upperSens = 30; //sensitivity for upper capacitive sensor for rapid debugging const int lowerSens = 30; //sensitivity for lower capacitive sensor for rapid debugging const int lThreshold = 20; //threshold for sensor above capacitive sensor const int uThreshold = 20; //threshold for sensor below capacitive sensor //SCORING VARS const int flipAmount = 50; const int backAmount = 100; int finalScore = 0; int balls = 1; //start balls int score = 0; void setup() { const int neoPin = 0; //placeholder for neopixel pin f1Cap.set_CS_AutocaL_Millis(0xFFFFFFFF); f2Cap.set_CS_AutocaL_Millis(0xFFFFFFFF); b1Cap.set_CS_AutocaL_Millis(0xFFFFFFFF); b2Cap.set_CS_AutocaL_Millis(0xFFFFFFFF); Serial.begin(9600); //initialize serial monitor for debugging //Serial.print("pinball machine"); pinMode(neoPin, OUTPUT); // initialize pin for neopixel lighting pinMode(solenoid1, OUTPUT); pinMode(solenoid2, OUTPUT); } void loop() { while(game == true){ touchedBOTTOM = false; aboveFlipRead(); //always want to check this first because i said so checkBalls(); //check if balls are still in play, if not end the game checkb1Cap(); //check first solenoid capacitive sensor checkb2Cap(); //check second solenoid capacitive sensor Serial.println(score); // send score data to pi }//while }//main void aboveFlipRead() { long flipperRead = f1Cap.capacitiveSensor(upperSens); //read top capacitiveSensor, break if normal value //Serial.print(flipperRead); if(flipperRead >= uThreshold) { flipCount(); //need to see if capacitive sensor above flippers is triggered again or if sensor below capacitive is triggered, meaning the ball is dead return; //back to main } else{ return; //back to main } } void flipCount() { long start = millis(); while(((millis() - start) < 1000) && (touchedBOTTOM == false)){ //TIME FOR EITHER SENS TO TRIGGER //Serial.print(f1Cap.capacitiveSensor(upperSens)); //Serial.print(f2Cap.capacitiveSensor(lowerSens)); if(f1Cap.capacitiveSensor(upperSens) > uThreshold){ score += flipAmount; touchedBOTTOM = true; return; } else if(f2Cap.capacitiveSensor(lowerSens) > lThreshold){ balls = balls - 1; touchedBOTTOM = true; return; } } return; } void checkBalls(){ if(balls >= 1){ return; //return to main } else{ game = false; //end the game if balls !>= 1 endGameProcedure(); //DOESN'T EXIST YET!!!! } } void checkb1Cap(){ long flipperRead = b1Cap.capacitiveSensor(upperSens); //read capacitive sensor next to first solenoid //Serial.print(flipperRead); if(flipperRead >= uThreshold){ digitalWrite(solenoid1, HIGH); digitalWrite(solenoid1, LOW); score += backAmount; return; } else{ return; } } void checkb2Cap(){ long flipperRead = b2Cap.capacitiveSensor(30); //read capacitive sensor next to first solenoid //Serial.print(flipperRead); if(flipperRead >= uThreshold){ digitalWrite(solenoid2, HIGH); digitalWrite(solenoid2, LOW); score += backAmount; return; } else{ return; } } void endGameProcedure(){ finalScore = score; //Serial.print(finalScore); finalScoreLogic(); //determine if new final score exceeds old highscores... } void finalScoreLogic(){ //LOGIC }