Arduino digitale airhockey code (concept)
2 berichten
• Pagina 1 van 1
- tomtenberge
- Berichten: 2
- Geregistreerd: 21 Mrt 2016, 14:58
Arduino digitale airhockey code (concept)
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
Code: http://pastebin.com/Uqp8DGPD
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 displayCode ff erin gezet. mod
#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: http://pastebin.com/Uqp8DGPD
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino digitale airhockey code (concept)
Nou ik weet niet wat je programma precies moet doen, maar wegens gebrek aan commentaar, moet ik gaan uitpluizen.... dus nee dank je.
2 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: ovohihifez en 89 gasten