Bureau Cube Hour Glass (3 / 4 étapes)

Étape 3: logiciel

Le logiciel est écrit en traitement et téléchargé par le biais de l’IDE Arduino.  Le code contient une boucle qui dure 9 heures pour compléter, bien 10 à mettre l’écran retour en position initiale. Mais si tout va bien, vous quitterez le « Office » après la deuxième boucle de quatre heures et pouvoir le gadget au large. Dès la mise sous tension, il se remettra le servo à la position d’origine. À l’intérieur de cette boucle principale, qui est configurée pour exécuter pour toujours, sont les deux boucles de quatre heures et deux boucles d’une heure.

Panne de code : code réel en italique, commentaires dans "BOLD". Voici un lien vers le code si vous n’avez pas à copier / coller si vous souhaitez l’utiliser.

https://github.com/robboz4/Hour-Glass/Tree/July-Entry

Si vous décidez d’utiliser les codes s’il vous plaît incluent toutes les instructions concernant l’utilisation des bibliothèques Adafruit.

#include < SoftwareSerial.h >
#include < Servo.h >
#include < Wire.h >

Base comprend des instructions de débogage pour le port série, la bibliothèque de Servo et la bibliothèque I2C.

#include « Adafruit_LEDBackpack.h »
#include « Adafruit_GFX.h »

Ces deux sont les bibliothèques pour la matrice de LED Adafruit et sac à dos. Il y a un bloc de texte décrivant l’utilisation de ces bibliothèques qui est répertoriée dans le code.

#define matin 0
#define après-midi 1
#define MAX_SEQ_NUM 17

Matrice de Adafruit_8x8matrix = Adafruit_8x8matrix() ;

Servo myservo ;
int pos = 0 ;
intervalle d’int ;
const int buttonPin = 2 ;     le nombre de la tige poussoir
const int ledPin = 13 ;      le nombre de l’axe de la LED
buttonState int = 0 ;

Définitions pour l’utiliser plus tard dans le code.

void setup() {}

Serial.Begin(9600) ;


Serial.println ("8 x 8 LED matrice Test mod par robbo ») ;

Matrix.Begin(0x70) ;  transmettez l’adresse de l’I2C

matrix.setBrightness(2) ;
Matrix.Clear() ;
myservo.Attach(9,544,2300) ; Mettre en place le Servo
myservo.Write(POS) ;

initialiser les broches de la LED en tant que sortie :
pinMode (ledPin, sortie) ;
initialiser la tige poussoir comme entrée :
pinMode (buttonPin, entrée) ;
digitalWrite(buttonPin,HIGH) ;
}

Mettre en place la matrice, le servo, bouton-poussoir et serial port (pour les instructions de débogage).

typedef struct _led
{
ordre de char ;
int x ;
int y ;
} led_t ;

Un tableau pour définir la disposition de LED (un code PIN de 0 ne signifie aucune LED)
Chaque membre du groupe a un numéro de séquence et un numéro d’identification de LED.
Le numéro de séquence détermine l’ordre dans lequel ils activer ou désactiver

const led_t ledArray [8] [7] = {}
/ * elem 0 * / {{6, 0, 0}, {4, 0, 1}, {2, 0, 2}, {1, 0, 3}, {3, 0, 4}, {5, 0, 5}, {7, 0, 6}},
/ * elem 1 * / {{0, 1, 0}, {11, 1, 1}, {9, 1, 2}, {8, 1, 3}, {10, 1, 4}, {12, 1, 5}, {0, 1, 6}},
/ * elem 2 * / {{0, 2, 0}, {0, 2, 1}, {14, 2, 2}, {13, 2, 3}, {15, 2, 4}, {0, 2, 5}, {0, 2, 6}},
/ * elem 3 * / {{0, 3, 0}, {0, 3, 1}, {0, 3, 2}, {3, 16, 3}, {0, 3, 4}, {0, 3, 5}, {0, 3, 6}},
/ * elem 4 * / {{0, 4, 0}, {0, 4, 1}, {0, 4, 2}, {16, 4, 3}, {0, 4, 4}, {0, 4, 5}, {0, 4, 6}},
/ * elem 5 * / {{0, 5, 0}, {0, 5, 1}, {15, 5, 2}, {9, 5, 3}, {14, 5, 4}, {0, 5, 5}, {0, 5, 6}},
/ * elem 6 * / {{0, 6, 0}, {12, 6, 1}, {8, 6, 2}, {4, 6, 3}, {7, 6, 4}, {13, 6, 5}, {0, 6, 6}},
/ * elem 7 * / {{11, 7, 0}, {5, 7, 1}, {3, 7, 2}, {1, 7, 3}, {2, 7, 4}, {6, 7, 5}, {10, 7, 6}}
};

la routine de la boucle s’exécute maintes et maintes fois pour toujours :
void loop()
{

intervalle de char = matin ;
seqNum int = 0;
/ / seqNum 0 initialiser le tableau LED d’avoir la moitié supérieure sur.
int i, j, k, limite ;
int delay_mult = 60 ; option de mode démo.
Matrix.Clear() ;
matrix.blinkRate(0) ;
matrix.writeDisplay() ;

//Demo bouton de mode d’essai
buttonState = digitalRead(buttonPin) ;

Vérifiez si le bouton est appuyé.
Si c’est le cas, le buttonState est haute :

Si (buttonState == HIGH) {}
allumer la LED :
digitalWrite (ledPin, basse) ;
Serial.println ("Cube sablier! \n") ;  matrix.setTextSize(1) ;
matrix.setTextWrap(false) ;  Nous ne voulons pas envelopper afin qu’il défile joliment du texte
matrix.setTextColor(LED_ON) ;
pour (int8_t x = 0; x > =-36; x--) {}
Matrix.Clear() ;
matrix.setCursor(x,0) ;
Matrix.Print("Club") ;
matrix.writeDisplay() ;
Delay(100) ;
}
matrix.setRotation(3) ;
pour (int8_t x = 7; x > =-36; x--) {}
Matrix.Clear() ;
matrix.setCursor(x,0) ;
Matrix.Print("Robbo") ;
matrix.writeDisplay() ;
Delay(100) ;
}
matrix.setRotation(0) ;
}
else {}
désactiver la LED :
digitalWrite (ledPin, HIGH) ;
delay_mult = 60 ;
Serial.println ("Cube Hour Glass démo! \n") ;
matrix.setTextSize(1) ;
matrix.setTextWrap(false) ;  Nous ne voulons pas envelopper afin qu’il défile joliment du texte
matrix.setTextColor(LED_ON) ;
pour (int8_t x = 0; x > =-36; x--) {}
Matrix.Clear() ;
matrix.setCursor(x,0) ;
Matrix.Print("Demo") ;
matrix.writeDisplay() ;
Delay(100) ;
}
matrix.setRotation(3) ;

pour (int8_t x = 7; x > =-36; x--) {}
Matrix.Clear() ;
matrix.setCursor(x,0) ;
Matrix.Print("mode") ;
matrix.writeDisplay() ;
Delay(100) ;
}
matrix.setRotation(0) ;
}

//End de test bouton. Elle met en place l’écran pour imprimer un message disant que le Mode démo si pressé. Aussi, je me suis tourné sur le bord LED

tout en //do (1) cela a mordu pour toujours !
{
pour (k = 0; k < MAX_SEQ_NUM; k ++)
{
Si (intervalle == le matin)
{
pour (i = 0; i < 4; i ++)
{
pour (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] .ordonner > seqNum)
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_ON) ;
matrix.writeDisplay() ;
}
d’autre
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_OFF) ;
matrix.writeDisplay() ;
}
}
}
pour (i = 4; i < 8; i ++)
{
pour (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] .ordonner < = seqNum & & ledArray [i] [j] .ordonner! = 0)
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_ON) ;
matrix.writeDisplay() ;
}
d’autre
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_OFF) ;
matrix.writeDisplay() ;
}
}
}
}
d’autre
{

pour (i = 4; i < 8; i ++)
{
pour (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] .ordonner > seqNum)
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_ON) ;
matrix.writeDisplay() ;
}
d’autre
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_OFF) ;
matrix.writeDisplay() ;
}
}
}
pour (i = 0; i < 4; i ++)
{
pour (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] .ordonner < = seqNum & & ledArray [i] [j] .ordonner! = 0)
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_ON) ;
matrix.writeDisplay() ;
}
d’autre
{
matrix.drawPixel (ledArray [i] [j] .x, ledArray [i] [j] .y, LED_OFF) ;
matrix.writeDisplay() ;
}
}
}
}
//Depending le matin ou l’après-midi variable, lit le tableau au numéro de séquence et activer la LED dans la matrice (x, y position) ou désactiver en conséquence.
seqNum ++ ;
Si (buttonState == HIGH)
{
retarder ((3750 * delay_mult * 4)/16);// ressemble à proximité d’une minute. C’est pourquoi les multiples de 60 pour une heure ~ = 225 000.
Delay(900000) ;
}
d’autre
{
Delay(3750) ; Mode démo.
}
}

Faire pivoter l’écran
intervalle de = (intervalle == matin) ? APRÈS-MIDI : MATIN ;

Si (intervalle == l’après-midi)
{
POS = 180 ;
myservo.Write(POS) ;
Delay(1000) ;
pour (pos = 0; pos < 180; pos += 3) / / va de 0 degrés à 180 degrés
{/ / pas de degré 3
myservo.Write(POS) ;                dire de servo pour aller à positionner dans la variable « pos »
attend 1 minute(debug) pour le servo atteindre la position utiliser l’heure multiplier 225k
Si (buttonState == HIGH)
{
Delay(3750 * delay_mult);// ressemble à proximité d’une minute. C’est pourquoi les multiples de 60 pour une heure ~ = 225 000.
Delay(60000) ;
}
d’autre
{
retard (1000), mode de //demo.
}
}
}
d’autre
{

pour (pos = 179; pos > 0; pos = 3) / / va de 180 degrés à 0 degrés
{/ / pas de-3 degrés
myservo.Write(POS) ;                dire de servo pour aller à positionner dans la variable « pos »
1m (débogage) pour le servo atteindre la position d’attente utilise l’heure multiplier 225k
Si (buttonState == HIGH)
{

Delay(60000) ;
}
d’autre
{
Delay(1000) ; mode démo.
}
}
}

seqNum = 0 ;
}

}

Articles Liés

Faire une pédale pour la rotation du cube de Linux

Faire une pédale pour la rotation du cube de Linux

que j'ai posté récemment une instructable sur une pédale pour masquer toutes les fenêtres dans Windows XP, mais je passe la plupart du temps sous Linux programmation sites drupal, alors j'ai fait celui-ci pour servir "au travail aussi" = PL'autr
IPhone Binder Clip Stand Ver 2.0

IPhone Binder Clip Stand Ver 2.0

I se souvenait avoir vu un iPhone se construit hors de pinces pour reliures sur Lifehacker et figuré qui fonctionnerait bien à mon bureau au travail. J'ai fait une recherche rapide et trouvé le message original au Culte de Mac , mais les détails ont
Comment faire pour activer compizfusion sur Ubuntu

Comment faire pour activer compizfusion sur Ubuntu

Salut tout le monde ! Dans ce Instructable, je vais vous montrer les utilisateurs d'Ubuntu comment activer et utiliser compiz fusion(compiz fusion est un jeu d'animations pour ubuntu.)J'utilise 9,0.4 JauntyÉtape 1: première Donc, tout d'abord, aller
BRICOLAGE Auto arrosage chien plat

BRICOLAGE Auto arrosage chien plat

Voici un moyen facile de garder votre chien plat ou un bol rempli d'eau afin qu'il ou elle ne va pas soif ! Récemment, j'étais à la quincaillerie et avait un coupleur 4" PVC dans ma main et avait un ah-ha moment ! J'ai réalisé tout de suite comment j
Cube de bureau (Windows uniquement)

Cube de bureau (Windows uniquement)

avez-vous jamais voulu faire de votre bureau ont un petit quelque chose de spécial ? Avoir plus d'un ordinateur de bureau ? Ou juste montrer votre bureau d'awesomeful à vos amis. Eh bien, vous avez de la chance !Cette instructable vous fera avoir un
LED Cube 8 x 8 x 8

LED Cube 8 x 8 x 8

affichage 3-dimensionnelle de créer votre propre 8 x 8 x 8 LED Cube !Nous croyons que ce Instructable est le plus complet guide étape par étape pour construire un 8 x 8 x 8 que LED Cube jamais publié sur l'intertubes. Il vous apprendra tout de princi
K ' NEX Cube (avec des bords arrondis)

K ' NEX Cube (avec des bords arrondis)

c'est pas cool d'avoir un cube de K'nex ? Oui, très cool. À une minutes, vous pouvez avoir un sur votre bureau. Nous allons donc commencer.Étape 1: Comptez les pièces Ce sont les « ingrédients » dont vous avez besoin.vous pouvez remplacer toutes les
Pont à poutre triangulée Cube de mousse

Pont à poutre triangulée Cube de mousse

Pour voiture lourde et le trafic de chemin de fer, ponts de faisceau sont remplacés par truss bridges. Un pont est un pont qui porte son poids grâce à son système de treillis. Un pont à treillis est un type de pont qui porte son poids grâce à son sys
Slayer Bureau Exciter avec une lumière de proximité.

Slayer Bureau Exciter avec une lumière de proximité.

Ne paniquez pas.Comme intimidant que cela puisse paraître pour construire votre propre miniature Tesla coil, jaimerais vous assure ce n'est vraiment pas tout ce dur. Ici se trouve dans toutes les étapes simples qui donneront finalement votre propre j
Bureau Wars : Surprise de sciure de bois et plus encore !

Bureau Wars : Surprise de sciure de bois et plus encore !

Bon, il s'agit d'un simple il y a quelques années. Il ne prend pas beaucoup de charge ; Si vous avez un atelier, vous avez toutes les fournitures dont vous avez besoin.Si vous avez quelqu'un au travail qui doit être prise vers le bas de quelques piqu
Bureau d’ordinateur portable manque double

Bureau d’ordinateur portable manque double

J'ai voulu un bureau portable court que nous pourrions garder dans la salle de séjour et qui permettrait aux raisonnablement confort d'utilisation de l'ordinateur portable assis sur le canapé. Auparavant, les enfants avaient utilisé l'ordinateur port
La boîte de Puzzle étonnant papier : Rubik Cube ou calendrier

La boîte de Puzzle étonnant papier : Rubik Cube ou calendrier

Une année a 12 mois, et un cube a 6 faces, alors comment peut une année entière s'adapter sur un cube ? Téléchargez ce puzzle papier incroyable pour trouver la solution (ou regarder la vidéo, mais ce n'est pas tout à fait aussi passionnant que tenant
Bois bandé Rubik Cube

Bois bandé Rubik Cube

il s'agit de ma modification de cube de Rubik.  Selon les informations du Twisty Puzzles Musée cette conception du puzzle est de Hidetoshi Takeji. Vous pouvez en savoir plus sur ce puzzle ici.Mais je vais vous décrire ici méthode de base pour la fabr
Calendrier perpétuel de bureau en merisier

Calendrier perpétuel de bureau en merisier

Mon fils est venu à moi avec une photo qu'il a trouvé en ligne d'un calendrier de bureau fait de blocs en bois. Il était originaire de pinterest ou certains site similaire. J'ai pris qu'idée, peaufiné le design et cela construite pour lui en cerisier