Paso 4: Arudino código
#include "pitches.h" / / contiene las notas se hace referencia en este código.
int tonepin = 3; para jugar tonos musicales
medición de int = 9;
clockpin int = 7;
int SOpin = 8;
idle_time largo sin firmar;
byte registerContent = 0;
byte registerContent2 = 0;
loWord largo; anteriormente fue un entero
int bitContent = 0;
idle_millseconds largo = 0;
PIN conectado a la clavija de enganche (ST_CP) del 74HC595
const int latchPin_595 = 10; previamente 10
PIN conectado al pin de reloj (SH_CP) del 74HC595
const int clockPin_595 = 12; anteriormente 12
PIN conectado a datos en (DS) del 74HC595
const int dataPin_595 = 11; previamente 11
int bitToSet; bit en cambio 595 registro para establecer
int button_Switch1 = 2;
melodía de int [] = {}
NOTE_C4, NOTE_G3, NOTE_E7, NOTE_A3, NOTE_G3, NOTE_A4, NOTE_D8, NOTE_B6};
#define white_button 8
#define yellow_button 32
#define blue_button 1
#define red_button 2
#define green_button 16
#define red_led 0 / / bits para escribir en el registro de 595
#define white_led 4
#define blue_led 1
#define green_led 2
#define yellow_led 3
joy1_up largo = 32768;
joy1_down largo = 2048;
joy1_left largo = 8192;
joy1_right largo = 512;
joy2_up largo = 4096;
joy2_down largo = 1024;
joy2_left largo = 16384;
joy2_right largo = 256;
void setup)
{
pinMode (medición, salida);
pinMode (clockpin, salida);
pinMode (SOpin, entrada);
Set de clavijas de salida porque se abordan en el bucle principal
pinMode (latchPin_595, salida);
pinMode (dataPin_595, salida);
pinMode (clockPin_595, salida);
pinMode (button_Switch1, entrada); 5 pulsadores con leds
digitalWrite (pernos, LOW);
digitalWrite (clockpin, HIGH);
digitalWrite (button_Switch1, bajo);
led_check(1); luz Leds y tocar una sola nota... al azar
Serial.Begin(9600);
idle_time=Millis();
}
void loop)
{
para (int idx = 0; idx < 16; idx ++)
{
Si (idx == 0)
{
pulseload();
}
bitContent = digitalRead (SOpin);
Si (bitContent == 1 & & idx < 8)
{
bitWrite(registerContent,idx,1);
}
else if (bitContent == 1 & & idx > = 8)
{
bitWrite (registerContent2, idx-8,1);
}
else if (bitContent == 0 & & idx < 8)
{
bitWrite (registerContent, idx, 0);
}
else if (bitContent == 0 & & idx > = 8)
{
bitWrite (registerContent2, idx-8,0);
}
pulseclock();
}
fin de ciclo de reloj de 2 registros de desplazamiento.
loWord = palabra (registerContent, registerContent2); convertir una palabra de dos bytes
Serial.Print ("valor:");
Serial.println(loWord,DEC); imprimir la palabra como un decimal
{Switch(loWord)}
caso 36864:
Serial.println ("dos para arriba");
bitToSet = red_led;
registerWrite (bitToSet, HIGH);
Playtone(2);
rotura;
caso 3072:
Serial.println ("ambos abajo");
bitToSet = green_led;
registerWrite (bitToSet, HIGH);
Playtone(2);
rotura;
caso 24576:
Serial.println ("ambos izquierda");
bitToSet = white_led;
registerWrite (bitToSet, HIGH);
Playtone(2);
rotura;
caso 768:
Serial.println ("tanto la derecha");
bitToSet = blue_led;
registerWrite (bitToSet, HIGH);
Playtone(2);
rotura;
caso 8:
Serial.println ("botón blanco");
bitToSet = white_led;
registerWrite (bitToSet, HIGH);
Playtone(1);
rotura;
caso 32:
Serial.println "(botón amarillo del);
bitToSet = yellow_led;
registerWrite (bitToSet, HIGH);
Playtone(1);
rotura;
caso 1:
Serial.println ("botón azul");
bitToSet = blue_led;
registerWrite (bitToSet, HIGH);
Playtone(1);
rotura;
caso 2:
Serial.println ("botón rojo");
bitToSet = red_led;
registerWrite (bitToSet, HIGH);
Playtone(1);
rotura;
caso 16:
Serial.println ("botón verde");
bitToSet = green_led;
registerWrite (bitToSet, HIGH);
Playtone(1);
rotura;
por defecto:
nada empuja o desconocida la secuencia
para (int thisPin = 0; thisPin < 16; thisPin ++) {}
registerWrite (thisPin, bajo);
}
registerContent = 0;
registerContent2 = 0;
} / / fin del caso interruptor
hora actual de captura
check_idle_time(); Compruebe el tiempo de inactividad
Serial.Print ("registro de 1:");
Serial.println (registerContent, BIN);
Serial.Print ("registro 2:");
Serial.println (registerContent2, BIN);
Serial.println (byte(10));
registerContent = 0;
Delay (250);
}
void pulseload)
{
digitalWrite (pernos, HIGH);
retardo (5);
digitalWrite (pernos, LOW);
}
void pulseclock)
{
digitalWrite (clockpin, LOW);
retardo (5);
digitalWrite (clockpin, HIGH);
}
{} void registerWrite (int whichPin, int whichState)
los bits que desea enviar
byte bitsToSend = 0;
Apague la salida para que las clavijas no enciende
mientras estás cambiando brocas:
digitalWrite (latchPin_595, bajo);
activar el bit más alto siguiente en bitsToSend:
bitWrite (bitsToSend, whichPin, whichState);
desplazar los bits de salida:
shiftOut (dataPin_595, clockPin_595, MSBFIRST, bitsToSend);
Encienda la salida para que los LEDs pueden iluminar:
digitalWrite (latchPin_595, HIGH);
}
void playtone (int num_of_tones) {}
tocar una nota al azar de melodía
para (int i = 0; i < num_of_tones; i ++) {}
int rand_note = random(0,7); elegir una nota de la matriz de la melodía
int rand_duration = (random(1,2)) * 4; 4 o 8
para calcular la duración de la nota, tomar un segundo
dividido por el tipo de nota.
por ejemplo, trimestre Nota = 1000 / 4, corchea = 1000/8, etc..
int noteDuration = 1000/rand_duration;
tono (tonepin, melody[rand_note],noteDuration);
para distinguir las notas, establecer un tiempo mínimo entre ellos.
duración + 30% de la nota parece que funciona bien:
int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(tonepin);
idle_time=Millis();
}
}
void led_check(int tone_count)
{
para (int led_bit = 0; led_bit < 5; led_bit ++) {}
registerWrite (led_bit, HIGH);
Playtone (tone_count);
Delay (250);
registerWrite (led_bit, bajo);
idle_time=Millis(); restablecer el temporizador de inactividad
}
}
void check_idle_time() {}
Si (millis() > idle_time + 600000) {}
10 minutos de inactividad
led_check(2); leds luz tocar 2 notas
idle_time=Millis();
}
}