Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //include pwm display
- #include "Adafruit_TLC59711.h"//pwm control board driver
- #include <SPI.h>//hardware serial port
- //define pins
- #define s_latch 10//latch/update pin for score board
- #define s_data 9//data pin for score board
- #define s_clock 8//clock pin for scoreboard
- #define L_dataPin 11//data pin for pwm control board
- #define L_clockPin 13//clock pin for pwm control board
- #define p1Button 2//button for player 1
- #define p2Button 3//button for player 2
- #define rstButton 4//reset button
- #define p1scorepoint 2//deflection point for player 1
- #define p2scorepoint 11//deflection point for player 2
- //define different numerical characters for the score display
- #define s_blank 255
- #define s_0 3
- #define s_1 159
- #define s_2 37
- #define s_3 13
- #define s_4 153
- #define s_5 73
- #define s_6 65
- #define s_7 31
- #define s_8 1
- #define s_9 9
- #define s_e 97
- //init global variables
- //settings
- int t_delay = 50;// set time delay / 5
- //internal use
- int currentlednumber = 1;
- bool direc = false;
- bool runnin = false;
- bool p1deflect = false;
- bool p2deflect = false;
- int p1score = 0;
- int p2score = 0;
- //set pwm var
- Adafruit_TLC59711 tlc = Adafruit_TLC59711(1, L_clockPin, L_dataPin);
- void setup() {
- // put your setup code here, to run once:
- pinMode(s_latch, OUTPUT);
- pinMode(s_data, OUTPUT);
- pinMode(s_clock, OUTPUT);
- pinMode(p1Button, INPUT);
- pinMode(p2Button, INPUT);
- pinMode(rstButton, INPUT);
- attachInterrupt(digitalPinToInterrupt(p1Button), button_p1, FALLING);
- attachInterrupt(digitalPinToInterrupt(p2Button), button_p2, FALLING);
- screen_init();
- tlc.begin();
- tlc.write();
- }
- void loop() {
- // put your main code here, to run repeatedly:
- for (uint8_t i = 0; i < 10; i++) {
- deflect();
- delay(t_delay);
- }
- if (runnin) {
- if (direc) {
- currentlednumber--;
- if (currentlednumber < 0) {
- score(1);
- direc = false;
- }
- }
- else {
- currentlednumber++;
- if (currentlednumber > 12) {
- score(2);
- direc = true;
- }
- }
- updateleds();
- }
- }
- void updateleds() {
- for (uint16_t i = 0; i < 12; i++) {
- if (i == currentlednumber) {
- tlc.setPWM(i, 4095);
- }
- else {
- tlc.setPWM(i, 0);
- }
- }
- tlc.write();
- }
- void deflect() {
- if (p1deflect || p2deflect) {
- if (!runnin) {
- runnin = true;
- }
- else {
- if (p1deflect && (currentlednumber == p1scorepoint) && direc) {
- direc = false;
- p1deflect = false;
- }
- if (p2deflect && (currentlednumber == p2scorepoint) && !direc) {
- direc = true;
- p2deflect = false;
- }
- }
- }
- upd();
- }
- void score(int player) {
- if (player == 1) {
- for (uint8_t i = 0; i < 5; i++) {
- for (uint8_t j = 0; j < 2; j++) {
- tlc.setPWM(j, 4095);
- }
- for (uint8_t j = 2; j < 12; j++) {
- tlc.setPWM(j, 0);
- }
- tlc.write();
- delay(100);
- }
- if (p1score >! 99) {
- p1score++;
- }
- }
- if (player == 2) {
- for (uint8_t i = 0; i < 5; i++) {
- for (uint8_t j = 0; j < 10; j++) {
- tlc.setPWM(j, 0);
- }
- for (uint8_t j = 10; j < 12; j++) {
- tlc.setPWM(j, 4095);
- }
- tlc.write();
- delay(100);
- }
- if (p2score >! 99) {
- p2score++;
- }
- }
- setscore(p1score, p2score);
- }
- //<<------ screen functions ------->>
- void screen_init() {
- digitalWrite(s_data, HIGH);
- for (uint16_t i = 0; i < 32; i++) {
- digitalWrite(s_clock, HIGH);
- digitalWrite(s_clock, LOW);
- }
- digitalWrite(s_latch, HIGH);
- digitalWrite(s_latch, LOW);
- }
- void setscore(uint16_t score1, uint16_t score2) {
- uint8_t score_1 = finddigit((score1 / 10));
- uint8_t score_2 = finddigit((score1 % 10));
- uint8_t score_3 = finddigit((score2 / 10));
- uint8_t score_4 = finddigit((score2 % 10));
- if ((score_1 > 9) || (score_2 > 9) || (score_3 > 9) || (score_4 > 9)){
- writedigit(10);
- writedigit(10);
- writedigit(10);
- writedigit(10);
- }
- else {
- writedigit(score_4);
- writedigit(score_3);
- writedigit(score_1);
- writedigit(score_2);
- }
- digitalWrite(s_latch, HIGH);
- digitalWrite(s_latch, LOW);
- }
- void writedigit(uint8_t data) {//for internal use
- for (uint16_t i = 0; i < 8; i++) {
- digitalWrite(s_data, bitRead(data, i));
- digitalWrite(s_clock, HIGH);
- digitalWrite(s_clock, LOW);
- }
- }
- uint8_t finddigit(uint16_t number) { //for internal use
- switch (number) {
- case 0:
- return s_0;
- break;
- case 1:
- return s_1;
- break;
- case 2:
- return s_2;
- break;
- case 3:
- return s_3;
- break;
- case 4:
- return s_4;
- break;
- case 5:
- return s_5;
- break;
- case 6:
- return s_6;
- break;
- case 7:
- return s_7;
- break;
- case 8:
- return s_8;
- break;
- case 9:
- return s_9;
- break;
- case 10:
- return s_e;
- break;
- default:
- return s_e;
- break;
- }
- }
- //<<------ end of screen functions ------->>
- //<<------ several interrupts ------------>>
- void button_p1() { //interrupt for pin 2
- p1deflect = true;
- }
- void button_p2() { //interrupt for pin 3
- p2deflect = true;
- }
- //<<------ end of several interrupts ----->>
- //<<------ MISC ------>>
- void upd() {//RESET!
- if (digitalRead(rstButton) == LOW) {
- for (uint16_t i = 0; i < 12; i++) {
- tlc.setPWM(i, 0);
- }
- p1score = 0;
- p2score = 0;
- runnin = false;
- for (uint16_t i = 0; i < 12; i++) {
- tlc.setPWM(i, 0);
- }
- tlc.write();
- setscore(0,0);
- currentlednumber = 1;
- direc = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement