Arduino digitale airhockey code (concept)

Arduino specifieke Software
Berichten: 2
Geregistreerd: 21 Mrt 2016, 14:58

Arduino digitale airhockey code (concept)

Berichtdoor tomtenberge » 21 Mrt 2016, 15:20

goedendag,

ik heb vandaag een stukje code geschreven voor een arduino.
ik heb hem helaas nog niet kunnen testen, dit hoop ik vanavond te kunnen doen.

echter dacht ik, laat ik hem hier maar eens posten, om te kijken wat jullie er van vinden.
het circuit hier achter bestaat o.a. uit een shift register (4x 4094) wat 4 7-segment displays aanstuurt, en een adafruit 1455: https://www.adafruit.com/products/1455

het gaat hier om een simpel spelletje, geprogrammeerd op een arduino nano.

ik ben wel een beetje benieuwd of ik er nog wat van heb gebakken.
zoals ik al zei, deze code is nog niet getest!

cpp code
//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;
}
}
Code ff erin gezet. mod

Code: http://pastebin.com/Uqp8DGPD

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Arduino digitale airhockey code (concept)

Berichtdoor nicoverduin » 21 Mrt 2016, 18:59

Nou ik weet niet wat je programma precies moet doen, maar wegens gebrek aan commentaar, moet ik gaan uitpluizen.... dus nee dank je.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ovohihifez en 89 gasten