next iteration:
seems to light up correctly...incrementally...etc..
but I cant seem to trigger it to go back down correctly?
#include <SPI.h>
//-----[this is SPI hardware wiring pinout only]-----//
/*
Arduino pin D13 is connected to the DataIn (MAX7221 pin:13)
Arduino pin D11 is connected to the CLK (MAX7221 pin:1)
Arduino pin D10 is connected to LOAD (MAX7221 pin:12)
*/
// define MAX72xx default register addresses
#define DECODE_MODE 0x09 // Code B Decode Digits 0-7: 0xFF / No-Decode Mode: 0x00
#define INTENSITY_ADDRESS 0x0A // 0x07 to start, half intensity. valid from 0x00 (min) to 0x0F (max)
#define SCANLIMIT_ADDRESS 0x0B // All 8 digits on = 0xFF?? FF? Datasheet says 0x07?
#define SHUTDOWN_ADDRESS 0x0C // Normal operation = 0x01 / Shutdown = 0x00 (powers up in shutdown mode)
#define DISPLAYTEST_ADDRESS 0x0F // 0x01 = all lights on full, 0x00 = normal ops
//---[define register addresses ['register/digit x' represent 1 section/grouping of 8 leds]---//
#define register1 0x01 // digit 0
#define register2 0x02 // digit 1
#define register3 0x03 // digit 2
#define register4 0x04 // digit 3
#define register5 0x05 // digit 4
#define register6 0x06 // digit 5
#define register7 0x07 // digit 6
#define register8 0x08 // digit 7
//--[define the SS pin]--//
#define SS 10 //hardware slave select pin on Arduino Due.
//--[deifne custom val]--//
#define totalGroups 8
//--[deifne custom val]--//
#define totalLeds 60
//create var to hold delay tim
int pause = 35;
//create var to hold current led count
int ledCounter = 0;
// create array to hold the register addresses
//byte registerAddress[] = {0,1,2,3,4,5,6,7};
byte registerAddress[] = {
register1, register2, register3, register4, register5, register6, register7, register8};
// initialize array with some data/pattern
//1 on at a time
//byte registerData[] = {B10000000,B01000000,B00100000,B00010000,B00001000,B00000100,B00000010,B00000001};
//incrmentally on, 1, then 2, then 3...all staying light after
byte registerData[] = {B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111};
//stay on pattern/array
byte ledIn[] = {B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111};
byte ledOut[] = {B11111110, B11111100, B11111000, B11110000, B11100000, B11000000, B10000000, B00000000};
//byte ledOut[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
void setup() {
Serial.begin(9600);
Serial.println("--SET UP CHIP--");
//define 'SS' pin as output (needed for SPI....even if other devices use other pins as their SS/CS pins...correct?
pinMode (SS, OUTPUT);
// start the SPI library
SPI.begin();
//set MAX7221 defaults
digitalWrite (SS, LOW);
SPI.transfer (DECODE_MODE);
SPI.transfer (0x00); // 0x00 - no-decode mode
digitalWrite (SS, HIGH);
digitalWrite (SS, LOW);
SPI.transfer (INTENSITY_ADDRESS);
SPI.transfer (0x0F); // 0x0F - max on/brightness
digitalWrite (SS, HIGH);
digitalWrite (SS, LOW);
SPI.transfer (SCANLIMIT_ADDRESS);
SPI.transfer (0x07); // 0xFF or 0x07? 0x07 - all display digits on
digitalWrite (SS, HIGH);
digitalWrite (SS, LOW);
SPI.transfer (SHUTDOWN_ADDRESS);
SPI.transfer (0x01); // 0x01 - normal operation mode
digitalWrite (SS, HIGH);
digitalWrite (SS, LOW);
SPI.transfer(DISPLAYTEST_ADDRESS);
SPI.transfer(0x00); // 0x00 - normal operation mode
digitalWrite (SS, HIGH);
//clear display
for(int group=0; group<totalGroups; group++){
digitalWrite (SS,LOW);
SPI.transfer (registerAddress[group]); // register to write to
SPI.transfer (B00000000); // and value
digitalWrite (SS,HIGH);
}
}
void loop() {
//clear display
//for(int group=0; group<totalGroups; group++){
//digitalWrite (SS,LOW);
//SPI.transfer (registerAddress[group]); // register to write to
//SPI.transfer (B00000000); // and value
//digitalWrite (SS,HIGH);
//}
for(int group=0; group<totalGroups; group++){
for(int led=0; led<8; led++){
digitalWrite (SS,LOW);
SPI.transfer (registerAddress[group]); // register to write to
SPI.transfer (ledIn[led]); // and value
digitalWrite (SS,HIGH);
delay(pause);
ledCounter++;
if(ledCounter >= 60){
//count backwards
for(int group2=totalGroups; group2>0; group2--){
for(int led2=0; led2<8; led2++){
digitalWrite (SS,LOW);
SPI.transfer (registerAddress[group2-1]); // register to write to
SPI.transfer (ledOut[led2]); // and value
digitalWrite (SS,HIGH);
delay(pause);
ledCounter--;
}
}
}
}
}
}
(sorta of the same problem I had which started this thread!?? hahaha..
seems to be a bug in the COUNT down...
any ideas?
thanks