Paso 3: Software
El software está escrito en el proceso y descargado a través de la IDE de Arduino. El código contiene un bucle que toma 9 horas, 10 bien a poner la pantalla vuelva a su posición original. Pero que estará saliendo la "oficina" después del segundo bucle de cuatro horas y potencia el gadget. Al encender se restablecerá el servo a la posición inicial. Dentro de este bucle principal, que se establece en ejecutar siempre, son dos lazos de cuatro horas y dos lazos de una hora.Desglose del código: código en cursiva, comentarios en negrita. Aquí hay un enlace al código para que no tenga que cortar y pegar si desea utilizarlo.
https://github.com/robboz4/Hour-Glass/Tree/July-entry
Si usted decide utilizar los códigos por favor incluyen declaraciones con respecto al uso de las bibliotecas de Adafruit.
#include < SoftwareSerial.h >
#include < Servo.h >
#include < Wire.h >
Base incluye declaraciones de depuración para el puerto serie, la biblioteca de Servo y la biblioteca de I2C.
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Estos dos son las bibliotecas para la matriz de LED de Adafruit y mochila. Hay un bloque de texto que describe el uso de estas bibliotecas que se muestra en el código.
#define mañana 0 Matriz Adafruit_8x8matrix = Adafruit_8x8matrix(); Servo myservo;
#define tarde 1
#define MAX_SEQ_NUM 17
int pos = 0;
int intervalo;
const int buttonPin = 2; el número de pin pulsador
const int ledPin = 13; el número de los pines del LED
int buttonState = 0;
Definiciones para el uso más adelante en el código.
void setup() {} Serial.Begin(9600);
Serial.println ("8 x 8 LED matriz prueba mod por robbo");
Matrix.Begin(0X70); paso en la dirección del I2C
matrix.setBrightness(2);
Matrix.Clear();
myservo.Attach(9,544,2300); Configurar Servo
myservo.Write(POS);
Inicializa el pin LED como salida:
pinMode (ledPin, salida);
inicializar el perno pulsador como entrada:
pinMode (buttonPin, entrada);
digitalWrite(buttonPin,HIGH);
}
Configurar la matriz, el servo, puerto serial y pulsador (para declaraciones de depuración).
typedef struct _led
{
orden Char;
int x;
int y;
} led_t;
Matriz para definir el diseño de LED (un número de pin de 0 no significa LED)
Cada miembro de la matriz tiene un número de secuencia y un número de pin del LED.
El número de secuencia determina el orden en que encienda o apague
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}, {16, 3, 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}}
};
una y otra vez funciona para siempre la rutina bucle: intervalo de char = mañana; comprobar si el pulsador está presionado.
void loop()
{
seqNum int = 0;
int i, j, k, límite;
int delay_mult = 60; opción de modo de demo.
Matrix.Clear();
matrix.blinkRate(0);
matrix.writeDisplay();
//Demo botón de prueba
buttonState = digitalRead(buttonPin);
Si es así, el buttonState es alta:
Si (buttonState == HIGH) {}
encender LED:
digitalWrite (ledPin, LOW);
Serial.println ("reloj de arena del cubo! \n"); matrix.setTextSize(1);
matrix.setTextWrap(false); no queremos texto para envolver por lo que se desplaza muy bien
matrix.setTextColor(LED_ON);
para (int8_t x = 0; x > =-36; x--) {}
Matrix.Clear();
matrix.setCursor(x,0);
Matrix.Print("Club");
matrix.writeDisplay();
Delay(100);
}
matrix.setRotation(3);
para (int8_t x = 7; x > =-36; x--) {}
Matrix.Clear();
matrix.setCursor(x,0);
Matrix.Print("Robbo");
matrix.writeDisplay();
Delay(100);
}
matrix.setRotation(0);
}
Else {}
Apagar LED:
digitalWrite (ledPin, HIGH);
delay_mult = 60;
Serial.println ("cubo reloj de arena demo! \n");
matrix.setTextSize(1);
matrix.setTextWrap(false); no queremos texto para envolver por lo que se desplaza muy bien
matrix.setTextColor(LED_ON);
para (int8_t x = 0; x > =-36; x--) {}
Matrix.Clear();
matrix.setCursor(x,0);
Matrix.Print("Demo");
matrix.writeDisplay();
Delay(100);
}
matrix.setRotation(3);
para (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 prueba del botón. Configura la pantalla para imprimir un mensaje que dice modo de demostración si presiona. También encendí a bordo LED
mientras que //do (1) este bit para siempre!
{
para (k = 0; k < MAX_SEQ_NUM; k ++)
{
Si (intervalo == mañana)
{
para (i = 0; i < 4; i ++)
{
para (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] orden > seqNum)
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_ON);
matrix.writeDisplay();
}
otra cosa
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_OFF);
matrix.writeDisplay();
}
}
}
para (i = 4; i < 8; i ++)
{
para (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] orden < = seqNum & & ledArray [i] [j] orden! = 0)
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_ON);
matrix.writeDisplay();
}
otra cosa
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_OFF);
matrix.writeDisplay();
}
}
}
}
otra cosa
{
para (i = 4; i < 8; i ++)
{
para (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] orden > seqNum)
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_ON);
matrix.writeDisplay();
}
otra cosa
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_OFF);
matrix.writeDisplay();
}
}
}
para (i = 0; i < 4; i ++)
{
para (j = 0; j < 7; j ++)
{
Si (ledArray [i] [j] orden < = seqNum & & ledArray [i] [j] orden! = 0)
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_ON);
matrix.writeDisplay();
}
otra cosa
{
matrix.drawPixel (ledArray [i] [j] 2.x, ledArray [i] [j] .y, LED_OFF);
matrix.writeDisplay();
}
}
}
}
//Depending en la mañana o por la tarde variable, leer la matriz con el número de secuencia y el LED en la matriz (x, y posición) encendido o apagado por consiguiente.
seqNum ++;
Si (buttonState == HIGH)
{
retrasar ((3750 * delay_mult * 4)/16) ;// mira cerca de un minuto. Por lo tanto múltiples por 60 una hora ~ = 225.000.
Delay(900000);
}
otra cosa
{
Delay(3750); Modo de demostración.
}
}
Girar la pantalla Si (intervalo == tarde) para (pos = 179; pos > 0; pos = 3) / / va de 180 grados a 0 grados Delay(60000); seqNum = 0; }
¿intervalo de = (intervalo == mañana)? TARDE: MAÑANA;
{
pos = 180;
myservo.Write(POS);
Delay(1000);
para (pos = 0; pos < 180; pos += 3) / / va desde 0 grados a 180 grados
{/ / en pasos de 3 grado
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
esperas 1 minute(debug) para el servo a la posición de utilizar la hora mulitplier 225k
Si (buttonState == HIGH)
{
Delay(3750 * delay_mult) ;// mira cerca de un minuto. Por lo tanto múltiples por 60 una hora ~ = 225.000.
Delay(60000);
}
otra cosa
{
Delay (1000); modo //demo.
}
}
}
otra cosa
{
{/ / en pasos de-3 grados
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
espera 1m (depuración) para el servo a la posición de utiliza la hora mulitplier 225k
Si (buttonState == HIGH)
{
}
otra cosa
{
Delay(1000); modo de demostración.
}
}
}
}