Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacion 8x8x8x Cubo
Programacion 8x8x8x Cubo
*************
* FIME
* Proyecto Cubo de LED 8x8x8 74HC595
***************************************************************************
*************/
#include <TimerOne.h>
#include <string.h>
#define AXIS_X 1
#define AXIS_Y 2
#define AXIS_Z 3
//--- 74HC595
int latchPin = 10;
//--- 74HC595
int clockPin = 13;
//--- 74HC595
int dataPin = 11;
int latchPinPORTB = latchPin - 8;
//Valores pins, [x][y][z]
byte cube[8][8];
//Contador layers
int current_layer = 0;
//---Control PWM
void iProcess(){
//last layer store
int oldLayerBit = current_layer + 2;
//Incremento contador
current_layer++;
if(current_layer >= 8){
current_layer = 0;
}
latchOff();
for (int i = 0 ; i < 8 ; i++){
spi_transfer(cube[current_layer][i]);
}
digitalWrite(oldLayerBit, LOW);
latchOn();
digitalWrite(current_layer + 2, HIGH);
}
//---Port latching
void latchOn(){
bitSet(PORTB,latchPinPORTB);
}
void latchOff(){
bitClear(PORTB,latchPinPORTB);
}
void setupSPI(){
byte clr;
//
//
//
//
//
//
|
|
|
|
|
|
|
|
|
|
|
|
// 1 :
// 2 :
// 3 :
// 4 :
// 5 :
// 6 :
//
//
//
//
//
//
|
*** |
| ***** |
| ******* |
| ***** |
|
*
|
|
*** |
// 7 :
// 8 :
// 9 :
// 10 :
//
//
//
//
//
//
//
//
|
|
|
|
|
|
|
|
********
********
*** **
** *** *
** *** *
** *** *
*** **
********
|
|
|
|
|
|
|
|
// 11 :
// 12 :
//
//
//
//
//
//
//
//
|
|
|
|
|
|
|
|
*
*****
*
***
* *
* *
***
|
|
|
|
|
|
|
|
|
|
**
|
* *
|
*
|
*
| **
| ***
| **
// 13 :
|
|
|
|
|
|
|
|
// 14 :
// 15 :
// 16 :
// 17 :
// 18 :
// 19 :
// 20 :
// 21 :
// 22 :
// 23 :
// 24 :
// 25 :
// 26 :
// 27 :
// 28 :
// 29 :
// 30 :
// 31 :
// 32 :
// 33 : !
// 34 : "
// 35 : #
// 36 : $
// 37 : %
// 38 : &
// 39 : '
// 40 : (
// 41 : )
// 42 : *
// 43 : +
// 44 : ,
// 45 : -
// 46 : .
// 47 : /
// 48 : 0
// 49 : 1
// 50 : 2
// 51 : 3
// 52 : 4
// 53 : 5
// 54 : 6
// 55 : 7
// 56 : 8
// 57 : 9
// 58 : :
// 59 : ;
// 60 : <
// 61 : =
// 62 : >
// 63 : ?
// 64 : @
// 65 : A
// 66 : B
// 67 : C
// 68 : D
// 69 : E
// 70 : F
// 71 : G
// 72 : H
// 73 : I
// 74 : J
// 75 : K
// 76 : L
// 77 : M
// 78 : N
// 79 : O
// 80 : P
// 81 : Q
// 82 : R
// 83 : S
// 84 : T
// 85 : U
// 86 : V
// 87 : W
// 88 : X
// 89 : Y
// 90 : Z
// 91 : [
// 92 : \
// 93 : ]
// 94 : ^
// 95 : _
// 96 : `
// 97 : a
// 98 : b
// 99 : c
// 100 : d
// 101 : e
// 102 : f
// 103 : g
// 104 : h
// 105 : i
// 106 : j
// 107 : k
// 108 : l
// 109 : m
// 110 : n
// 111 : o
// 112 : p
// 113 : q
// 114 : r
// 115 : s
// 116 : t
// 117 : u
// 118 : v
// 119 : w
// 120 : x
// 121 : y
// 122 : z
// 123 : {
// 124 : |
// 125 : }
// 126 : ~
// 127 :
};
// Matriz de letras a mostrar
const int charNum = 7;
char string[charNum] = {'E','V','A','N','D','R','O',};
void effect_text(int delayt){
fill(0x00);
for (int ltr = 0; ltr < charNum; ltr++){// Matriz de cadena
for(int dist = 0; dist < 8; dist++) {
fill(0x00);//blank last row
int rev = 0;
for (int rw = 7; rw >= 0; rw--) {//copia de filas
cube[rev][dist] = bitswap(font_data[string[ltr]][rw]);
rev++;
}
delay_ms(delayt);
}
}
}
unsigned char bitswap (unsigned char x)//Reverses a byte (so letters aren't
backwards);
{ byte result;
asm("mov __tmp_reg__, %[in] \n\t"
"lsl __tmp_reg__ \n\t" /* bit */
"ror %[out] \n\t" /* rotar bit */
"lsl __tmp_reg__ \n\t" /* 2 */
"ror %[out] \n\t"
"lsl __tmp_reg__ \n\t" /* 3 */
"ror %[out] \n\t"
"lsl __tmp_reg__ \n\t" /* 4 */
"ror %[out] \n\t"
"lsl __tmp_reg__ \n\t"
"ror %[out] \n\t"
/* 5 */
6 */
7 */
8 */
"r" (x));