Paso 4: Paso 4. Programación del medidor
/*
** Creado por: Charles Muchene
**
**
** Fecha: 03 de octubre de 2013
**
** Tiempo: 1412hrs
**
** Código de medidor de distancia
** El sistema mide la distancia
** usando el sensor ultrasonido HC-SR04
** y lo traduce en una serie
** de LEDs iluminados
**
** Diviértete y retocarlo!
*/
/ * Biblioteca para los tonos melódicos
** Que describe las frecuencias a producir * /
#include "pitches.h"
const int triggerPin = 10; pasador de gatillo (verde)
const echoPin int = 9; pin de Eco (naranja)
const int tonePin = 8; pin de tono (whilte-azul)
const int serialDataPin = 7; pin de datos serial (naranja)
const int registerClockPin = 6; registro pin de reloj (marrón)
const int shiftRegisterClockPin = 5; cambio de registro reloj
const int numOfRegisters = 16; número de registros
boolean const registra [numOfRegisters]; registro matriz
int litLEDs = 0; llevó el contador de pin
int rango = 100; valor de rango
int distancia; distancia
const int count = rango / numOfRegisters; (metros por LED)
puesta en marcha de la melodía
melodía de int [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4, NOTE_DS8, NOTE_DS8};
melodía de distancia crítica
int criticalMelody [] = {NOTE_DS8, NOTE_DS8, NOTE_DS8, NOTE_DS8};
Tenga en cuenta las duraciones: 4 = cuarto nota, 8 = corchea, etc..
int noteDurations [] = {4, 8, 8, 4, 4, 4, 4, 4, 4, 2};
int criticalNoteDurations [] = {4, 4, 4, 4};
void setup()
{
/ * Perno de configuraciones /
pinMode (triggerPin, salida);
pinMode (echoPin, entrada);
pinMode (serialDataPin, salida);
pinMode (registerClockPin, salida);
pinMode (shiftRegisterClockPin, salida);
/ * Luz em para arriba * /
lightEmUp();
/ * Iniciar melodía * /
playMelody();
/ * Apagar los LEDs * /
clearRegisters();
} / / setup
/ * Obtener distancia de HC-SR04 * /
getDistance() int
{
digitalWrite (triggerPin, bajo);
delayMicroseconds(2);
/ * Enviar señal de gatillo * /
digitalWrite (triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite (triggerPin, bajo);
/ * Devuelve la distancia en centímetros * /
volver (pulseIn (echoPin, alto) / 2) / 29,1;
} //get distancia
todos los leds de luz
void lightEmUp()
{
para (pin int = 0; pin < numOfRegisters; pin ++)
registros [pin] = alta;
writeRegisters();
} //light em para arriba
Ajuste los pernos de registro a baja
void clearRegisters()
{
para (int i = numOfRegisters - 1; i > = 0; i--)
registros [i] = bajo;
writeRegisters();
} //clear registros
/ * Escribir valores del registro y almacénelas * /
void writeRegisters()
{
/ * Registro pin de reloj ajustado bajo
** el contenido del registro de almacenamiento
** no cambia los valores de registro de cambio de cambio
**/
digitalWrite (registerClockPin, bajo);
/ * Bucle todos los registros * /
para (int i = numOfRegisters - 1; i > = 0; i--)
{
digitalWrite (shiftRegisterClockPin, bajo);
int val = registros [i];
digitalWrite (serialDataPin, val);
digitalWrite (shiftRegisterClockPin, HIGH);
} / / bucle todos los registros
/ * Esta señal traslados el contenido de
** del cambio de registro para los registros de almacenamiento
*/
digitalWrite (registerClockPin, HIGH);
} //write registra
configurar un pin individual alto o bajo
void setRegisterPin (int índice, int valor)
{
registros [índice] = valor;
} valor del pin de registro //set
/ * Iniciar juego uMelody * /
void playMelody()
{
para (int thisNote = 0; thisNote < 10; thisNote ++)
{
/ * Calcular la duración de la nota,
tomar un segundo dividido por tipo de nota
/ * por ejemplo trimestre Nota = 1000 / 4,
** corchea = 1000/8, etc. * /
int noteDuration = 1000/noteDurations [thisNote];
tono (tonePin, noteDuration y melodía [thisNote]);
/ * Para distinguir las notas, establecer un tiempo mínimo entre ellos.
** duración + 30% la nota parece que funciona bien * /
int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
noTone(8);
} / / todo notas
} //play Inicio melodía
/ * Melodía crítica * /
void playCriticalMelody()
{
para (int thisNote = 0; thisNote < 4; thisNote ++)
{
int noteDuration = 1000/noteDurations [thisNote];
tono (tonePin, criticalMelody [thisNote], noteDuration);
/ * Para distinguir las notas, establecer un tiempo mínimo entre ellos.
** duración + 30% la nota parece que funciona bien * /
int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
noTone(8);
} / / bucle todas las notas
} //play melodía críticas
void loop()
{
/ * Obtener distancia * /
distancia = getDistance();
/ * Calcular los LEDs a la luz /
Si (rango > = distancia)
litLEDs = (rango - distancia) / cuenta;
otra cosa
litLEDs = -1;
/ * Luz LEDs dependiendo de la distancia calculada * /
para (pin int = 0; pin < numOfRegisters; pin ++)
{
Si (pin < = litLEDs)
setRegisterPin (pin, HIGH);
otra cosa
setRegisterPin (pin, LOW);
} //for lazo
writeRegisters(); efectuar cambios
/ * Jugar melodía de proximidad crítica * /
Si (litLEDs > = 13)
playCriticalMelody();
} //loop
/*************************************************
* "pitches.h" definición
*
* Públicas constantes
* Las constantes representan las frecuencias de tono
de la las notas respectivas en un concierto norma
* instrumento de sintonización como un Piano
*************************************************/
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978