String player1 = \"Hraday\"; String player2 = \"Alex\";<\/code> to your choice.<\/p>\nBasic logic: Listen for presses of buttons, if button pressed, flash relevant LED, up (int) that players score (LCD Screen write) OR check if both players have same score and 1 point away from winning, if so, show option (LCD Screen write) to choose new target score that is either 2 or 4 points higher. Else if the player score matches target, show winning message (LCD Screen write) and flash LED’s.<\/p>\n
\r\n\/\/ Squash Scorer, by @guwii\r\n\/\/ Squash scoring is fairly easy for the most part, however at 10-10 the first player to have reached 10 must decide whether to play until 13 or 15, as the winner must always have a 2 point lead.\r\n\/\/ For this reason we need to include logic to let the players choose what score to play until, always in either incremenets of 2 || 4. EG: 13 || 15, 17 || 19 etc.\r\n\r\n\/\/To Do :\r\n\/\/ * Set\/Games Counter\r\n\/\/ Function for score incrementing to help respect DRY coding\r\n#include <LiquidCrystal.h>\r\nLiquidCrystal lcd(12, 11, 5, 4, 3, 2);\r\n\/\/Setting up Switches, 1 for each player to press.\r\nconst int player1switch = 7;\r\nconst int player2switch = 6;\r\n\/\/Setting up LEDs, 1 representing each player.\r\nconst int led1 = 9;\r\nconst int led2 = 10;\r\n\/\/Players names\r\nString player1 = \"Hraday\";\r\nString player2 = \"Alex\";\r\nint switchStatePlayer1 = 0;\r\nint switchStatePlayer2 = 0;\r\nint targetChosen = 1;\r\nint decideTarget = 1;\r\nint p1score = 0;\r\nint p2score = 0;\r\nint winner;\r\n\/\/ Initial Target score to get to\r\nint target = 11;\r\n\r\nvoid setup() {\r\n\tSerial.begin(9600);\r\n\tlcd.begin(16,2);\r\n\tpinMode(player1switch,INPUT);\r\n\tpinMode(player2switch,INPUT);\r\n\tpinMode(led1,OUTPUT);\r\n\tpinMode(led2,OUTPUT);\r\n\tlcd.print(player1);\r\n\tlcd.print(\" Vs \");\r\n\tlcd.print(player2);\r\n\tlcd.setCursor(0,1);\r\n\tlcd.print(\"SquashScorer 0.1\");\r\n}\r\n\r\nvoid loop() {\r\n\r\n\r\n\r\n\t\/\/ If LED is still on, turn it off.\r\n\tif((digitalRead(led1) == HIGH) || (digitalRead(led2) == HIGH)){\r\n\t\tdelay(200);\r\n digitalWrite(led1, LOW);\r\n digitalWrite(led2, LOW);\r\n\t}\r\n\r\n\r\n\r\n\r\n\t\/\/ If players scores are the same, and it's at the target score to change\r\n\tif (targetChosen == 0){\r\n\t\tlcd.clear();\r\n\t\tlcd.setCursor(0,0);\r\n\t\t\/\/ Give the players the info about which score they can choose\r\n\t\tlcd.print(target + 2);\r\n\t\tlcd.print(\" OR \");\r\n\t\tlcd.print(target + 4);\r\n\t\ttargetChosen = 1;\r\n\t\tdecideTarget = 0;\r\n\t}\r\n\t\/\/ While new target score hasn't been decided, keep checking.\r\n\twhile(decideTarget == 0) {\r\n\t\t\tnewTarget();\r\n\t}\r\n\tif((targetChosen == 1) && (decideTarget == 1)) {\r\n\t\tswitchStatePlayer1 = digitalRead(player1switch);\r\n\t\tif(switchStatePlayer1 == HIGH){\r\n\t\t\tdigitalWrite(led1, HIGH);\r\n\t\t\tp1score = p1score++;\r\n\t\t\tif ((p1score == target - 1) && (p2score == target - 1)) { targetChosen = 0; }\r\n\t\t\t\/\/Deciding if this was winning point\r\n\t\t\tif ((p1score == target) || (p2score == target) && (p1score != p2score)) {\r\n\t\t\t\twinner = whoWins(player1);\r\n\t\t\t}\r\n\t\t\tSerial.println(\"New Score__________\");\r\n\t\t\tSerial.println(p1score);\r\n\t\t\tnewScore();\r\n\t\t}\r\n\t\tswitchStatePlayer2 = digitalRead(player2switch);\r\n\t\tif(switchStatePlayer2 == HIGH){\r\n\t\t\tdigitalWrite(led2, HIGH);\r\n\t\t\tp2score = p2score++;\r\n\t\t\tif ((p1score == target - 1) && (p2score == target - 1)) { targetChosen = 0; }\r\n\t\t\t\/\/Deciding if this was winning point\r\n\t\t\tif ((p1score == target) || (p2score == target) && (p1score != p2score)) {\r\n\t\t\t\twinner = whoWins(player2);\r\n\t\t\t}\r\n\t\t\tSerial.println(\"New Score__________\");\r\n\t\t\tSerial.println(p2score);\r\n\t\t\tnewScore();\r\n\t\t}\r\n\t}\r\n}\r\nint newTarget(){\r\n\tSerial.println(decideTarget);\r\n\tSerial.println(\"Waiting for input...\");\r\n\tif(digitalRead(player1switch) == HIGH){\r\n\t\ttarget = target + 2;\r\n\t\tnewScore();\r\n\t\tdecideTarget = 1;\r\n\t\tdelay(250);\r\n\t}\r\n\tif(digitalRead(player2switch) == HIGH){\r\n\t\ttarget = target + 4;\r\n\t\tnewScore();\r\n\t\tdecideTarget = 1;\r\n\t\tdelay(250);\r\n\t}\r\n}\r\nvoid newScore(){\r\n\tlcd.clear();\r\n\tlcd.setCursor(0,0);\r\n\tlcd.print(player1);\r\n\tlcd.print(\" \");\r\n\tlcd.print(player2);\r\n\tlcd.setCursor(0,1);\r\n\tlcd.print(p1score);\r\n\tlcd.print(\" Target:\");\r\n\tlcd.print(target);\r\n\tlcd.print(\" \");\r\n\tlcd.print(p2score);\r\n\tSerial.println(\"NewScore() Called\");\r\n}\r\nvoid ledflash(){\r\n\tfor (int i=0;i<4;i++){\r\n\t\tdigitalWrite(led1, LOW);\r\n\t\tdigitalWrite(led2, HIGH);\r\n\t\tdelay(500);\r\n\t\tdigitalWrite(led1, HIGH);\r\n\t\tdigitalWrite(led2, LOW);\r\n\t\tdelay(500);\r\n\t}\r\n\tdigitalWrite(led1, LOW);\r\n\tdigitalWrite(led2, LOW);\r\n}\r\nint whoWins(String player){\r\n\tlcd.clear();\r\n\tlcd.setCursor(0,0);\r\n\tlcd.print(player);\r\n\tlcd.setCursor(0,1);\r\n\tlcd.print(\"is the Winner!\");\r\n\tledflash();\r\n\tdelay(3000);\r\n\tp1score = 0;\r\n\tp2score = 0;\r\n\ttarget = 11;\r\n}\r\n<\/code>\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"The game of squash has a fairly easy scoring system, however when you’re in the heat of the game it can be quite easy to forget your score as it’s so fast paced. I created this basic Arduino prototype to enable a very simple score counting system. This started off […]<\/p>\n","protected":false},"author":1,"featured_media":1078,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[51],"tags":[],"acf":[],"yoast_head":"\n
Arduino Squash Scorer - guwii<\/title>\n \n \n \n \n \n \n \n \n \n \n \n \n \n\t \n\t \n\t \n \n \n \n \n \n\t \n\t \n\t \n