Etape 5: Programmation d’une heure !
J’ai trouvé ce programme génial ici :http://www.stationinthemetro.com/index.php/Archives/2008/01/19/makedc-LED-cube-Workshop/
Je vais vous faire économiser un voyage et le code postal ici. Ceci chargez jusqu'à arduino via l’environnement arduino, que vous pouvez télécharger sur arduino.cc (site).
Basé sur ledcube.c de marque: 7 septembre 2007 week-end podcast
http://blog.Makezine.com/archive/2007/09/make_a_pocket_led_cube_we.html
Animation personnalisée programmée par Mark Boszko, http://stationinthemetro.com
*/
#include < avr/pgmspace.h > / / permet d’utiliser PROGMEM pour stocker les modèles dans flash
#define CUBESIZE 3
#define PLANESIZE CUBESIZE * CUBESIZE
#define PLANETIME 3333 / / heure chaque plan est affichée en nous -> rafraîchissement de 100 Hz
#define TIMECONST 20 / / multiplie DisplayTime pour obtenir ms - pourquoi ne pas = 100 ?
Table modèle LED dans PROGMEM - dernière colonne est affichage de l’heure en unités de 100 ms
TODO, cela pourrait être beaucoup plus compact, mais pas avec la représentation binaire de modèle
prog_uchar PROGMEM PatternTable [] = {}
cligner des yeux sous et hors tension
B111 B111, B111, B111, B111, B111, B111, B111, B111, 5,
B000, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 5,
B000, B000, B000, B000, B000, B000, B000, B000, B000, 1,
chaque LED du flash en séquence :
Gauche -> colonne de droite, puis haut -> rangée du bas, puis haut -> plan inférieur
B100, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B010, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B001, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B000 B100, B000, B000, B000, B000, B000, B000, B000, 1,
B000, B010, B000, B000, B000, B000, B000, B000, B000, 1,
B000 B001, B000, B000, B000, B000, B000, B000, B000, 1,
B000, B000, B100, B000, B000, B000, B000, B000, B000, 1,
B000, B000, B010, B000, B000, B000, B000, B000, B000, 1,
B000, B000, B001, B000, B000, B000, B000, B000, B000, 1,
B000, B000, B000, B100, B000, B000, B000, B000, B000, 1,
B000, B000, B000, B010, B000, B000, B000, B000, B000, 1,
B000, B000, B000, B001, B000, B000, B000, B000, B000, 1,
B000, B000, B000, B000, B100, B000, B000, B000, B000, 1,
B000, B000, B000, B000, B010, B000, B000, B000, B000, 1,
B000, B000, B000, B000, B001, B000, B000, B000, B000, 1,
B000, B000, B000, B000, B000, B100, B000, B000, B000, 1,
B000, B000, B000, B000, B000, B010, B000, B000, B000, 1,
B000, B000, B000, B000, B000, B001, B000, B000, B000, 1,
B000, B000, B000, B000, B000, B000, B100, B000, B000, 1,
B000, B000, B000, B000, B000, B000, B010, B000, B000, 1,
B000, B000, B000, B000, B000, B000, B001, B000, B000, 1,
B000, B000, B000, B000, B000, B000, B000, B100, B000, 1,
B000, B000, B000, B000, B000, B000, B000, B010, B000, 1,
B000, B000, B000, B000, B000, B000, B000, B001, B000, 1,
B000, B000, B000, B000, B000, B000, B000, B000, B100, 1,
B000, B000, B000, B000, B000, B000, B000, B000, B010, 1,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 10,
Quelques petit cube - plaisir de gros cube
B000, B000, B000, B000, B011, B011, B000, B011, B011, 10,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 10,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 5,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 2,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 2,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 2,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 2,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 2,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 2,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 1,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 1,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B100, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 1,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 1,
B000, B000, B000, B000, B011, B011, B000, B011, B011, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B100, B000, B000, B000, B000, B000, B000, B000, B000, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B011, B011, B000, B011, B011, B000, B000, B000, 1,
B000, B000, B001, B000, B000, B000, B000, B000, B000, 1,
B000 B011, B011, B000, B011, B011, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000, B000, B000, B110, B110, B000, B110, B110, B000, 1,
B000, B000, B000, B000, B000, B000, B100, B000, B000, 1,
B000, B000, B000, B110, B110, B000, B110, B110, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000 B011, B011, B000, B011, B011, B000, B000, B000, 1,
B000, B000, B001, B000, B000, B000, B000, B000, B000, 1,
B000 B011, B011, B000, B011, B011, B000, B000, B000, 1,
B111 B111, B111, B111, B111, B111, B111, B111, B111, 1,
B000, B000, B000, B110, B110, B000, B110, B110, B000, 1,
B000, B000, B000, B000, B000, B000, B100, B000, B000, 1,
B000, B000, B000, B110, B110, B000, B110, B110, B000, 1,
Lingette diagonale, à partir du centre
B111 B111, B111, B111, B111, B111, B111, B111, B111, 5,
B111 B111, B111, B111, B111, B111, B111, B101, B111, 1,
B111 B111, B111, B111, B101, B111, B111, B101, B111, 1,
B111 B111, B111, B111, B101, B111, B111, B100, B111, 1,
B111 B101, B111, B111, B100, B111, B111, B100, B110, 1,
B111 B101, B111, B111, B100, B111, B111, B100, B110, 1,
B111 B011, B111, B111, B100, B110, B111, B100, B100, 1,
B111 B100, B110, B111, B100, B100, B111, B100, B000, 1,
B111 B100, B100, B111, B100, B000, B111, B000, B000, 1,
B111 B100, B000, B111, B000, B000, B011, B000, B000, 1,
B111, B000, B000, B011, B000, B000, B001, B001, B000, 1,
2-LED diaginal large bande qui gravite autour du cube
B011, B000, B000, B001, B001, B000, B000, B001, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001, B001, B000, B000, B011, B000, B000, B110, 1,
B000, B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000, B000, B110, B000, B100, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B100, B000, B110, B000, B000, B011, B000, B000, 1,
B110, B000, B000, B011, B000, B000, B001, B001, B000, 1,
Maintenant, avec le centre flashies, pour donner du goût
B011, B000, B000, B001, B001, B000, B000, B011, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001, B001, B000, B000, B011, B000, B010, B110, 1,
B000, B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000, B000, B110, B000, B100, B100, B100, B110, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B100, B000, B110, B000, B000, B011, B010, B000, 1,
B110, B000, B000, B011, B000, B000, B001, B001, B000, 1,
B011, B000, B000, B001, B011, B000, B000, B001, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001, B001, B000, B010, B011, B000, B000, B110, 1,
B000, B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000, B000, B110, B000, B110, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B100, B000, B110, B010, B000, B011, B000, B000, 1,
B110, B000, B000, B011, B000, B000, B001, B001, B000, 1,
B011, B010, B000, B001, B001, B000, B000, B001, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B011, 1,
B000 B011, B001, B000, B000, B011, B000, B000, B110, 1,
B000, B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000, B010, B110, B000, B100, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100, B110, B000, B110, B000, B000, B011, B000, B000, 1,
B110, B000, B000, B011, B000, B000, B001, B001, B000, 1,
Jaquette en haut
B001 B001, B000, B000, B001, B001, B000, B000, B001, 1,
B001 B001, B000, B000, B001, B001, B000, B000, B001, 1,
B000 B001, B001, B000, B000, B001, B000, B000, B001, 1,
B000, B000, B001, B000, B000, B001, B000, B000, B001, 1,
B000, B000, B000, B000, B000, B001, B000, B000, B001, 1,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 5,
B000, B000, B000, B000, B000, B000, B000, B000, B000, 3,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 5,
B000, B000, B000, B000, B000, B000, B000, B000, B000, 3,
B000, B000, B000, B000, B000, B000, B000, B000, B001, 5,
B000, B000, B000, B000, B000, B000, B000, B000, B000, 3,
Il s’agit d’un élément factice pour fin de tableau (durée = 0)
B000, B000, B000, B000, B000, B000, B000, B000, B000, 0
};
/*
** Définition des broches dans tableau rend plus facile réorganiser la façon dont le cube est câblé
** Ajuster les chiffres ici jusqu'à ce que les LEDs clignotent dans l’ordre - de gauche à droite, T à B
** Notez que les entrées analogiques 0-5 sont également sorties numériques 14-19 !
** DigitalOut0 de pin (série RX) et AnalogIn5 sont laissés ouverts pour les applications futures
*/
int [] LEDPin = {16, 3, 1, 15, 4, 6, 14, 5, 7} ;
int [] PlanePin = {19, 18, 17} ;
initialisation
void setup()
{
tige d’int ; compteur de boucle
mettre en place broches de la LED en sortie (HIGH active)
pour (broche = 0; broche < PLANESIZE ; pin ++) {}
pinMode (LEDPin [pin], sortie) ;
}
mettre en place des goupilles d’avion comme sorties (peu actif)
pour (broche = 0; broche < CUBESIZE ; pin ++) {}
pinMode (PlanePin [pin], sortie) ;
}
}
afficher le motif dans le tableau jusqu'à DisplayTime est égal à zéro (puis répétez)
void loop()
{
déclarer des variables
octet PatternBuf [PLANESIZE] ; sauve le modèle actuel de PatternTable
int PatternIdx ;
octet DisplayTime ; temps * 100ms pour afficher motif
unsigned long EndTime ;
plan d’int ; compteur de boucle pour refresh cube
int patbufidx ; index de l’octet de mémoire tampon de motifs
int ledrow ; nombre de LEDs dans boucle de rafraîchissement
int ledcol ; nombre de LEDs dans boucle de rafraîchissement
int ledpin ; nombre de LEDs dans boucle de rafraîchissement
Initialiser le PatternIdx au début de la table de schéma
PatternIdx = 0 ;
boucle sur entrées de table de modèle - tout DisplayTime > 0
{}
lire modèle PROGMEM et l’enregistrer dans le tableau
memcpy_P (PatternBuf, PatternTable + PatternIdx, PLANESIZE) ;
PatternIdx += PLANESIZE ;
lu DisplayTime entre PROGMEM et incrément index
DisplayTime = pgm_read_byte_near (PatternTable + PatternIdx ++) ;
calculer EndTime de temps actuelle (ms) et DisplayTime
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST ;
boucle en DisplayTime > 0 et actuel temps < EndTime
tandis que (millis() < EndTime) {}
patbufidx = 0 ; réinitialiser le compteur indice au début du tampon
boucle sur plans
pour (avion = 0; avion < CUBESIZE ; plan ++) {}
désactiver le plan précédent
Si (avion == 0) {}
digitalWrite (PlanePin [CUBESIZE-1], élevé) ;
} else {}
digitalWrite (PlanePin [plan-1], élevé) ;
}
charger des données de modèle de plan actuel dans les ports
ledpin = 0 ;
pour (ledrow = 0; ledrow < CUBESIZE ; ledrow ++) {}
pour (ledcol = 0; ledcol < CUBESIZE ; ledcol ++) {}
digitalWrite (LEDPin [ledpin ++], PatternBuf [patbufidx] & (1 << ledcol)) ;
}
patbufidx ++ ;
}
Allumez le plan en cours
digitalWrite (PlanePin [plan], faible) ;
retarder le PLANETIME nous
delayMicroseconds (PLANETIME) ;
} / / avion
} / / alors que < EndTime
} tandis que (DisplayTime > 0) ; lire les modèles jusqu'à l’heure = 0, qui signale la fin
}
{6 commentaires & lire ci-dessous ou ajouter un}