Pages: [1]   Go Down
Author Topic: Help with 8x8 led matrix pong!  (Read 827 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have a 8x8 led monocolor matrix and arduino uno smd edition as well as some ptoentiometers but when ever I try uploading the code, it keeps saying define this, when its already been defined and keeps highlighting.
Heres his website http://blog.bsoares.com.br/arduino/ping-pong-with-8x8-led-matrix-on-arduino
Heres the code
Code:
/**
  * Ping Pong with 8x8 Led Dot Matrix on Arduino
  *
  * @author  Bruno Soares
  * @website www.bsoares.com.br
  */
 
#include "TimerOne.h"
 
#define PIN_LEFT 4
 #define PIN_RIGHT 5
 
unsigned int left = 0;
 unsigned int right = 0;
 int angle = 0;
 int radians;
 
byte rows[8] = {9, 14, 8, 12, 1, 7, 2, 5};
 byte cols[8] = {13, 3, 4, 10, 6, 11, 15, 16};
 byte pins[16] = {5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6};
 byte screen[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 volatile byte screenRow = 0;
 volatile byte screenCol = 0;
 
int _angle;
 int _px;
 int _py;
 int _w = 7;
 int _h = 7;
 int _wall[] = {3, 3};
 int _count = 0;
 int _speed = 3;
 int _countPoints = 0;
 

void setup() {
   Timer1.initialize(100);
   for (int i = 2; i <= 17; i++)
     pinMode(i, OUTPUT);
   Timer1.attachInterrupt(doubleBuffer);
   
  Serial.begin(9600);
   
  face();
   reset();
 }
 
void doubleBuffer() {
   digitalWrite(translatePin(rows[screenRow]), LOW);
   digitalWrite(translatePin(cols[screenCol]), HIGH);
   
  screenCol++;
   if (screenCol >= 8) {
     screenCol = 0;
     screenRow++;
     if (screenRow >= 8) {
       screenRow = 0;
     }
   }
   
  if((screen[screenRow] >> screenCol) & B1 == B1) {
     digitalWrite(translatePin(rows[screenRow]), HIGH);
     digitalWrite(translatePin(cols[screenCol]), LOW);
   } else {
     digitalWrite(translatePin(rows[screenRow]), LOW);
     digitalWrite(translatePin(cols[screenCol]), HIGH);
   }
 }
 
byte translatePin(byte original) {
   return pins[original - 1];
 }
 
void allOFF() {
   for (int i = 0; i < 8; i++)
     screen[i] = 0;
 }
 
void on(byte row, byte column) {
     screen[column-1] |= (B1 << (row - 1));
 }
 
void off(byte row, byte column) {
     screen[column-1] &= ~(B1 << (row - 1));
 }
 
void calcWall()
 {
   left = analogRead(PIN_LEFT);
   right = analogRead(PIN_RIGHT);
   left = constrain(map(left, 223, 800, 0, 6), 0, 6);
   right = constrain(map(right, 223, 800, 6, 0), 0, 6);
   
  clearWall();
   
  on(1, left + 1);
   on(1, left + 2);
   on(8, right + 1);
   on(8, right + 2);
   
  _wall[0] = left;
   _wall[1] = right;
   show();
 }
 
void clearWall()
 {
   for (int i = 0; i < 8; i++)
     screen[i] &= B01111110;
 }
 
void clearGame()
 {
   for (int i = 0; i < 8; i++)
     screen[i] &= B10000001;
 }
 
void loop() {
   calcWall();
   enterFrameHandler();
   delay(50);
 }
 
void enterFrameHandler()
 {
   if (_count++ < _speed)
     return;
   
  _count = 0;
   checkCollision();
   calcAngleIncrement();
   show();
 }
 
void retorted(int angle)
 {
   Serial.println(angle);
   _angle = angle;
   
  if (++_countPoints % 5 == 0 && _speed > 1)
     _speed--;
 }
 
void resetAnim()
 {
   for (int i = 0; i < 8; i++)
   {
     screen[i] = B11111111;
     delay(25);
   }
   for (int i = 0; i < 8; i++)
   {
     screen[i] = B00000000;
     delay(25);
   }
 }
 
void face()
 {
   on(1, 1);
   on(1, 2);
   on(2, 1);
   on(2, 2);
   on(7, 1);
   on(7, 2);
   on(8, 1);
   on(8, 2);
   on(1, 1);
   on(1, 2);
   on(4, 4);
   on(4, 5);
   on(5, 4);
   on(5, 5);
   on(2, 7);
   on(7, 7);
   on(3, 8);
   on(4, 8);
   on(5, 8);
   on(6, 8);
   delay(5000);
 }
 
void reset()
 {
   resetAnim();
   
  _px = random(3, 5);
   _py = random(3, 5);
   _angle = random(0, 2) == 0 ? 0 : 180;
   _speed = 5;
   _countPoints = 0;
   
  show();
   delay(500);
 }
 
void show()
 {
   clearGame();
   on(_px + 1, _py + 1);
 }
 
void checkCollision()
 {
   if (_px == _w - 1)
   {
     if (_angle == 315 || _angle == 0 || _angle == 45)
     {
       if (_py == _wall[1] || _py == _wall[1] + 1)
       {
         if (_angle == 0 && _py == _wall[1])
           retorted(225);
         else if (_angle == 0 && _py == _wall[1] + 1)
           retorted(135);
         else if (_angle == 45 && _py == _wall[1])
           retorted(135);
         else if (_angle == 45 && _py == _wall[1] + 1)
           retorted(180);
         else if (_angle == 315 && _py == _wall[1])
           retorted(180);
         else if (_angle == 315 && _py == _wall[1] + 1)
           retorted(225);
       }
     }
   }
   else if (_px == 1)
   {
     if (_angle == 225 || _angle == 180 || _angle == 135)
     {
       if (_py == _wall[0] || _py == _wall[0] + 1)
       {
         if (_angle == 180 && _py == _wall[0])
           retorted(315);
         else if (_angle == 180 && _py == _wall[0] + 1)
           retorted(45);
         else if (_angle == 135 && _py == _wall[0])
           retorted(45);
         else if (_angle == 135 && _py == _wall[0] + 1)
           retorted(0);
         else if (_angle == 225 && _py == _wall[0])
           retorted(0);
         else if (_angle == 225 && _py == _wall[0] + 1)
           retorted(315);
       }
     }
   }
   
  if (_px == _w)
   {
     reset();
   }
   else if (_px == 0)
   {
     reset();
   }
   else if (_py == _h)
   {
     if (_angle == 45)
       _angle = 315;
     else if (_angle == 135)
       _angle = 225;
   }
   else if (_py == 0)
   {
     if (_angle == 225)
       _angle = 135;
     else if (_angle == 315)
       _angle = 45;
   }
 }
 
void calcAngleIncrement()
 {
   if (_angle == 0 || _angle == 360)
   {
     _px += 1;
   }
   else if (_angle == 45)
   {
     _px += 1;
     _py += 1;
   }
   else if (_angle == 135)
   {
     _px -= 1;
     _py += 1;
   }
   else if (_angle == 180)
   {
     _px -= 1;
   }
   else if (_angle == 225)
   {
     _px -= 1;
     _py -= 1;
   }
   else if (_angle == 315)
   {
     _px += 1;
     _py -= 1;
   }
 }
Can someone fix  the code or tell me how to fix it?
Thanks!
Logged

Global Moderator
Boston area, metrowest
Online Online
Brattain Member
*****
Karma: 439
Posts: 23744
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Did you copy the TimerOne library into your library area?
Logged

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yes but I'll try it again
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nevermind, I reinstalled TimerOne and it works!
Thanks for the help!
Logged

Pages: [1]   Go Up
Jump to: