So about a month ago I started working on my nephews toy made by vtech, seems the microcontroller that was onboard is completely shot.
Being encased in epoxy there is no way to truly check it, So I decided to replace the brain with an atmega8.. The toy has 9 led's and 9 buttons for the interface. I have currently got a few light patterns written but cant seem to get the buttons to function as they should. The pinout is listed in my code below. The buttons are being pulled to ground but as they dont seem to be doing anything... not sure if its in the code or if I have made a mistake on the wiring, Currently I have the buttons disabled because of this. As I dont have a schematic for the device, nor do I for the replaced circuit. It is very hard to figure this out.. Please any guidance in the correct direction would be appreciated. Also the are labeled TODO: change manual loop to random pin trigger... I have no idea how to implement if someone could point me in the right direction for that, would be appreciated as well.. Thanks in advance
/*#############################################################
ATMEGA8 |
TREY'S_TOY |
Brain_Replacement |
Reset |@------|A5Heart
uartRXD | A |A4Star
uartTXD | T |A3Square
Pin4GRN | M |A2Triangle
Pin5O/W | E |A1Rectangle
Pin6Bn/w| G |A0Oval
VCC | A |GND
GND | 8 |AREF
XTAL1 | P |VCC
XTAL2 | U |PIN13/SCK blu/w
MOONpin5| |PIN12/MISO grn/w
Pin3BLU | |PIN11/MOSI grn
Pin2Bl/W| |PIN10/Enter aqua
Pin1gn/w|_______|PIN9/circle blu
#############################################################*/
//######Buttons########
int moon = 5;
int circle = 9;
int enter = 10;
int oval = A0;
int rectangle = A1;
int triangle = A2;
int Square = A3;
int star = A4;
int heart = A5;
int buttonlist[]={moon,circle,enter,oval,rectangle,triangle,Square,star,heart};
//BUTTON SETUP
int buttonState;
int lastButtonState = LOW;
// DEBOUNCE SETUP
long lastDebounceTime = 0;
long debounceDelay = 50;
// cathodes columns
int pin_cols[3]={
6,7,8};
// anode rows
int pin_rows[3]={
2,3,4};
void setup(){
//define columns leds (cathode)
int x;
for (x = 9; x>0; x--){
pinMode(buttonlist[x], INPUT);
}
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
//define rows leds (anode)
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
delay(100);
}
void loop(){
for (int x = 0; x<5; x++){
starPat();
delay(50);
}
delay(100);
alternating();
delay(100);
flash();
delay(100);
flash();
delay(100);
scrolly();
delay(1000);
}
void starPat(){
//STAR Rotating PATTERN
//MIDDLE ROW VERTICAL
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(50);
// DIAG ROW TOP LEFT TO BOTTOM RIGHT
digitalWrite(4, HIGH);
digitalWrite(6, LOW);
delay(10);
digitalWrite(4, LOW);
digitalWrite(6, HIGH);
delay(10);
digitalWrite(3, HIGH);
digitalWrite(7, LOW);
delay(10);
digitalWrite(3, LOW);
digitalWrite(7, HIGH);
delay(10);
digitalWrite(2, HIGH);
digitalWrite(8, LOW);
delay(10);
digitalWrite(2, LOW);
digitalWrite(8, HIGH);
delay(10);
// MIDDLE ROW HORIZONTAL
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
delay(50);
// DIAG ROW BOTTOM LEFT TO TOP RIGHT
digitalWrite(4, HIGH);
digitalWrite(8, LOW);
delay(10);
digitalWrite(4, LOW);
digitalWrite(8, HIGH);
delay(10);
digitalWrite(3, HIGH);
digitalWrite(7, LOW);
delay(10);
digitalWrite(3, LOW);
digitalWrite(7, HIGH);
delay(10);
digitalWrite(2, HIGH);
digitalWrite(6, LOW);
delay(10);
digitalWrite(2, LOW);
digitalWrite(6, HIGH);
delay(10);
}
// Multiple alternating light effect
// TODO: Change manual digitalWrite() to a loop
// with random() generated pin for write()
void alternating(){
for(int x=0; x<3; x++){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
for(int x=0; x<3; x++){
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
for(int x=0; x<3; x++){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
for(int x=0; x<3; x++){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
for(int x=0; x<3; x++){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
for(int x=0; x<3; x++){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
for(int x=0; x<3; x++){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(120);
}
}
void interface(){
//TODO: debounce and interpret button presses for led display function
// 9 buttons - 9 different flash patterns
// if (button press == 0-9){
//do something different each button press}
int button;
if (buttonlist[0] == HIGH){
//MOON
int x=0;
int y=0;
ledOn(x,y);
}
else if (buttonlist[1] == HIGH){
int x=0;
int y=0;
ledOff(x,y);
}
else if (buttonlist[2] == HIGH){
scrolly();
}
else if (buttonlist[3] == HIGH){
alternating();
}
else if (buttonlist[4] == HIGH){
flash();
}
else if (buttonlist[5] == HIGH){
starPat();
}
else{
int x=1;
int y=1;
ledOn(x,y);
delay(150);
ledOff(x,y);
delay(150);
}
}
void flash(){
// Flash a pattern
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(500);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(500);
}
// Use row to enbable led's
void ledOn(int row, int col){
digitalWrite(pin_rows[row], HIGH);
digitalWrite(pin_cols[col], LOW);
}
// Use row to disable led's
void ledOff(int row, int col){
digitalWrite(pin_rows[row], LOW);
digitalWrite(pin_cols[col], LOW);
}
// Scrolling effect left to right then back to left
void scrolly(){
for (int x = 0; x < 5; x++){
for (int x = 2; x > 0; x--){
for (int y = 0; y < 3; y++){
ledOn(x,y);
delay(15);
ledOff(x,y);
delay(15);
}
}
for (int x = 0; x < 3; x++){
for (int y = 0; y < 3; y++){
ledOn(x,y);
delay(15);
ledOff(x,y);
delay(15);
}
}
}
}
Sorry if my code seems to be a mess I am still kinda new to programming and the arduino
Also sorry about the double post