Teléfono Dial giratorio + Arduino + tinta Invisible = cumpleaños presente

tengo un número de teléfono de dial rotatorio y partes de teléfonos que pensé que podría utilizar de alguna manera tonta.

Yo a partir de este instructable

Cuando terminé, tengo un elemento que funciona como sigue:

-marcar cualquier número o secuencia de números
-Presione el botón rojo grande para probar esa secuencia.
-arduino reproducirá una canción basada en el primer dígito de la secuencia de marcado.
- Pero si se marca la secuencia correcta, en este caso el nombre de mis hijas, el arduino hará tocar la canción de"feliz cumpleaños", girar la rejilla metálica y los leds de UV de la luz. Esto revelará el "mensaje de feliz cumpleaños que escribió en la pantalla con el lápiz de tinta invisible.

video para seguir

Así que básicamente lo que tengo es:

El Arduino graba la entrada de teléfono rotatorio como una cadena y luego el código comprueba si una cadena determinada.

Si no es esa cadena, luego juega una de 5 canciones que están codificados en el bosquejo.

Si es la cadena correcta entonces arduino manda el servo para girar y enciende las luces de UV y toca la canción de cumpleaños.

El código siguiente:

He encontrado aquí y allá pedazos de él. La función de tono se utiliza junto con un fichero pitches.h.

/ * 21/03/12 - comenzó a hacer proyecto con dial giratorio
-para ser utilizado para el regalo de cumpleaños para Christine
-idea:
los números que marcan reproducirá una canción diferente
marcar su nombre encenderá el LED que muestra el messgae feliz cumpleaños
o la feliz aniversity Harrie y Riek

-a partir del código para el batphonev1
-necesario realizar muchos cambios

-v2 - comenzar mirando watys muchas canciones o notas

*/
#include < Servo.h >
#include "pitches.h"

Feliz cumpleaños
int melodybd [] = {NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_C4,
NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_C4, NOTE_C4,
NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_B4, NOTE_B4, NOTE_A4,
NOTE_F4, NOTE_G4, NOTE_F4};
int noteDurationsbd [] = {3, 16, 4, 4, 4, 2, 3, 16, 4, 4, 4, 2, 3, 16, 4,4,4,4,4,3,16,4,4,4,2};
int numNotesbd = 25;

aniversario
Aquí viene la novia
int melodyanv [] = {NOTE_A3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_A3, NOTE_D4, NOTE_B3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_D4};
Tenga en cuenta las duraciones: 4 = cuarto nota, 8 = corchea, etc..:
int noteDurationsanv [] = {2,3,8,1,2,3,8,1,2,3,8,2,3,8,2,3,8,1};
int numNotesanv = 18;

1, starwars
int melody1 [] = {NOTE_G5, NOTE_G5, NOTE_G5, NOTE_DS5, NOTE_AS5, NOTE_G5, NOTE_DS5, NOTE_AS5, NOTE_G5};
int noteDurations1 [] = {3, 3, 3, 4, 8, 3, 4, 8, 2};
int numNotes1 = 9;

//   2. cosa de dos bits
int melody2 [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4};
int noteDurations2 [] = {4,8,8, 4,4,4,4,4};
int numNotes2 = 8;

3 estallido va la comadreja

int melody3 [] = {}
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_C4,
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_C4, 0,
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_C4, 0, NOTE_A4,
NOTE_D4, NOTE_F4, NOTE_E4, NOTE_C4, 0};

int noteDurations3 [] = {4, 8, 4, 8, 8, 8, 8, 4, 8, 4, 8, 4, 8, 3, 4, 8, 4, 8, 4, 8, 8, 8, 8, 4, 4, 2, 4, 4, 4, 4, 4};
int numNotes3 = 31;

batman 4
int melody4 [] = {NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3 NOTE_GS3, NOTE_GS3, NOTE_E4, NOTE_E4};
int noteDurations4 [] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4};
int numNotes4 = 32;

5 familiar clásico
int melody5[]= {NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4 ,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_D4,NOTE_G3,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_C4 NOTE_C4};
Tenga en cuenta las duraciones: 4 = cuarto nota, 8 = corchea, etc..:
int noteDurations5 [] = {4,4,4,4,4,4,4,4,4,4,4,4,2,8,2,4,4,4,4,4,4,4,4,4,4,4,4,2, 4,4,4,4,4,8,8,4,4,4,8,8,4,4,4,4,2,4,4,4,4,4,4,4,4,4,4,4,4,2,8,2};
int numNotes5 = 62;

int needToPrint = 0;
int cuenta;
mina
const int try_it = 3;
const int in_from_dial = 2;
const int lightOn = 11;

int buttonState = 0;         variable para lectura del estado del pulsador
int firstnum = 0;
jugado char = ' n ';
mina de final

int lastState = bajo;
int trueState = bajo;
lastStateChangeTime largo = 0;
borrados int = 0;

constantes

int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;

cadenas
Cadena de reemplazos;
Char [Carrie] = "227743";
Char [] Daniel = "326435";
Char [] Big50 = "1";
Char [] Harrie = "2";

servo
Servo myservo;  crear objeto servo para controlar un servo
int pos = 0;    variable para almacenar la posición del servo

// --------------------------------------------

void setup()
{

Serial.Begin(9600);

pinMode (in_from_dial, entrada);  2
pinMode (try_it, entrada);  3
pinMode (lightOn, salida);    11
pinMode (13, salida);    12
myservo.Attach(6);  se fija el servo en el pin 6 al objeto servo

}

void loop() {}
digitalWrite (13, HIGH);   prende el LED
/*
usuario Marque números hasta que el buttonb de "probarlo"
tan necesario crear la cadena hasta que se presiona el botón
*/
leer el estado del botón tryit
digitalWrite (lightOn, LOW);
buttonState = digitalRead(try_it);
try_it = alto;
Si (buttonState == LOW) {}

lectura de int = digitalRead(in_from_dial);

Si ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {}
el disco no está marcado, o acaba siendo marcado.
Si (needToPrint) {}
apenas ha terminado siendo marcado, es necesario enviar el número de abajo el serial
línea y restablecer la cuenta. Que mod la cuenta por 10 porque '0' enviará 10 impulsos.
Serial.println (% de la cuenta 10, DEC);

Ahora necesitamos agregar la cuenta a la secuencia de la prueba y luego probarlo contra el
cadena necesaria para obtener un éxito
newstring.concat(Count);

needToPrint = 0;
cuenta = 0;
borra = 0;
}

}

Si (leer! = lastState) {}
lastStateChangeTime = millis();
}
Si ((millis()-lastStateChangeTime) > debounceDelay) {}
Debounce - esto ocurre una vez es stablized
Si (leer! = trueState) {}
Esto significa que el interruptor ha pasado apenas de cerrado -> abrir o viceversa.
trueState = lectura;
Si (trueState == HIGH) {}
incrementar el número de pulsos si se ha ido alta.
cuenta ++;
needToPrint = 1; Necesitamos imprimir este número (una vez finalizada la esfera giratoria)
}
}
}
lastState = lectura;
}

otra cosa
{
ahora el usuario quiere probar su marcación
//
jugado = ' n ';
Serial.println(newstring);
test_it();
reemplazos = "";

}
}
// --------------------- my functions -------------------------
// ------------------------------------------------------------

encender leds

void turnon_Leds()
{
digitalWrite (lightOn, HIGH);

}

// --------------------------------------------------
la cadena de prueba

void test_it()
{

Serial.println(newstring);
Serial.println(firstnum);
Delay(2000);

/*

Si "BIG50" entonces jugar feliz cumpleaños, servo, girar a LEDs
Si "HARRIE" entonces reproducir canción de anv, trun servo encender leds

*/
Si (newstring.equals(Carrie)) {}

girar el servo
para (pos = 0; pos < 180; pos += 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo.Write(POS);              Dile el servo a la posición en la variable 'pos'
Delay(15);                       espera 15ms para el servo a la posición
}

turnon_Leds();

para (int thisNote = 0; thisNote < numNotesbd; thisNote ++) {}

int noteDuration = 1000/noteDurationsbd [thisNote];

tono (8, melodybd[thisNote],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.4;
Delay(pauseBetweenNotes);
detener la reproducción de tono:

noTone(8);
}
jugado = 'Y';
Delay(2000);

}

//-----------------------------------------

Si (newstring.equals(Daniel)) {}

girar el servo
para (pos = 180; pos > = 15; pos-= 1) / / va desde 0 grados a 180 grados
{/ / en pasos de 1 grado
myservo.Write(POS);              Dile el servo a la posición en la variable 'pos'
Delay(15);                       espera 15ms para el servo a la posición
}


turnon_Leds();

para (int thisNote = 0; thisNote < numNotesbd; thisNote ++) {}

int noteDuration = 1000/noteDurationsbd [thisNote];

tono (8, melodybd[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.4;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);
}
jugado = 'Y';
reemplazos = "";
Delay(2000);
}

Serial.println ("got here1");
Delay(500);

necesita primero difgit y luego usar caso a reproducir la canción

Serial.println("here2");
Serial.println(newstring);
Delay(1000);

Si (jugado == ' n ') {}

1 0or 9
Si ((newstring.startsWith("1")) || (newstring.startsWith("9"))) {

iterar sobre las notas de la melodía:
para (int thisNote = 0; thisNote < numNotes1; thisNote ++) {}
int noteDuration = 1000/noteDurations1 [thisNote];
tono (8, melody1[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);

}
jugado = 'Y';
Delay(500);
reemplazos = "";
}

comienza con 2 o 8
Si ((newstring.startsWith("2")) || (newstring.startsWith("8")))
{

iterar sobre las notas de la melodía:
para (int thisNote = 0; thisNote < numNotes2; thisNote ++) {}
int noteDuration = 1000/noteDurations2 [thisNote];
tono (8, melody2[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);

}
jugado = 'Y';
Delay(500);
reemplazos = "";
}

comienza con 3 o 7
Si ((newstring.startsWith("3")) || (newstring.startsWith("7")))
{

iterar sobre las notas de la melodía:
para (int thisNote = 0; thisNote < numNotes3; thisNote ++) {}
int noteDuration = 1000/noteDurations3 [thisNote];
tono (8, melody3[thisNote],noteDuration);


int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);

}
jugado = 'Y';
Delay(500);
}

comienza with4 o 6
Si ((newstring.startsWith("4")) || (newstring.startsWith("6")))
{

iterar sobre las notas de la melodía:
para (int thisNote = 0; thisNote < numNotes4; thisNote ++) {}
int noteDuration = 1000/noteDurations4 [thisNote];
tono (8, melody4[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);

}
jugado = 'Y';
Delay(500);

}

comienza con 5 o 0
Si ((newstring.startsWith("5")) || (newstring.startsWith("0")))
{

iterar sobre las notas de la melodía:
para (int thisNote = 0; thisNote < numNotes5; thisNote ++) {}
int noteDuration = 1000/noteDurations5 [thisNote];
tono (8, melody5[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;
Delay(pauseBetweenNotes);
detener la reproducción de tono:
noTone(8);

}
jugado = 'Y';
Delay(500);

}

}

fin del bucle
}

Artículos Relacionados

Brazo robótico de control con guantes, teléfono Android y Arduino

Brazo robótico de control con guantes, teléfono Android y Arduino

Hoy, tenemos casi 2 técnicas para jugar con el brazo robótico, ya sea por los botones por ejemplo como en el escudo de juego o el uso de guantes que incluyan sensores. Sin embargo, hoy voy a mostrarles una nueva técnica usando solamente su teléfono A
Abra su puerta con un golpe especial con Arduino y Android teléfono 1Sheeld

Abra su puerta con un golpe especial con Arduino y Android teléfono 1Sheeld

Ahora no usas la clave, con este sencillo proyecto que tú y todos los miembros de su familia pueden abrir su puerta sin llave y también no ir cada vez a la puerta para abrir, puede abrirlo desde cualquier lugar, todo lo que quieras es tu teléfono int
BRICOLAJE | Cómo hacer una caja de teléfono de silicona | Tutorial

BRICOLAJE | Cómo hacer una caja de teléfono de silicona | Tutorial

https://www.youtube.com/watch?v=uHgs8B_6c7I&feature=youtu.bePaso 1: Hacer una caja del silicón del teléfono necesita!!!!!! Video de hoy hacer una caja de teléfono impresionante DIY o como muchos llaman tope caja del teléfono celular en casa. ¿Usted s
Controlar tu avión RC con Acclerometer tu teléfono

Controlar tu avión RC con Acclerometer tu teléfono

¿Que siempre quisiste controlar tu avión RC con inclinación de un objeto? Siempre he tenido la idea en la parte posterior de mi cabeza pero nunca he perseguido hasta esta semana pasada. Mis pensamientos iniciales debían usar un triple acelerómetro ej
Caja de fibra de carbono teléfono

Caja de fibra de carbono teléfono

¿Quieres aprender cómo hacer tu propio brillante, liso, fibra de carbono caja del teléfono? Sólo tienes que seguir estos sencillos pasos para crear uno por ti mismo y mostrar a todos tus amigos!Paso 1: Selección de sus materialesFibre Glast 3k tejido
Apague el teléfono en un Robot

Apague el teléfono en un Robot

La introducción de PhoneBOT!Un método barato, fácil y rápido para convertir un teléfono con Android en un robot reprogramable. Sin hardware adicional (micro controladores, controladores de motor, etc.) requerida!Usted será capaz de conducir una Phone
Termómetros de gato de teléfono

Termómetros de gato de teléfono

red de sensor climático para cables telefónicos hogar, usando.El sistema utiliza una placa Arduino (~ $30) y sensores especiales que son capaces de medir y reportar los datos sin hardware adicional.  Esto se hace usando un MicroLan o red "Un cable&qu
Interfaz de un teléfono rotatorio dial a un Arduino

Interfaz de un teléfono rotatorio dial a un Arduino

un viejo teléfono rotatorio puede ser utilizado para un número de propósitos en los proyectos de Arduino - usarlo como un dispositivo de entrada de novela o utilizar la Arduino a la interfaz de un teléfono rotatorio al ordenador.Esta es una guía muy
Caja azul basados en Arduino (teléfono Phreaking)

Caja azul basados en Arduino (teléfono Phreaking)

Historia e historiaEn la década de 1950, años 1960, 1970, década de 1980 y aún hasta en la década de 1990 teléfono phreaking era una manera asombrosamente fresca a explorar un mundo desconocido de las redes de conmutación de teléfono. A "phreak"
RatPhone - 3 G FONA Arduino celular teléfono celular móvil con teclado botón Retro y rata de captura de la aplicación

RatPhone - 3 G FONA Arduino celular teléfono celular móvil con teclado botón Retro y rata de captura de la aplicación

No importa el iPhones y Androids. Aquí está el ratPhone! NO se es definitivamente de un teléfono inteligente. Pero no es un estúpido teléfono. Usted no podrá perder horas interminables en Facebook o Twitter, pero le ayudará a atrapar las ratas y otra
¿Instalación de Bluetooth multifunción coche Smart para Arduino controlado por teléfono móvil

¿Instalación de Bluetooth multifunción coche Smart para Arduino controlado por teléfono móvil

por lo que usted quiere hacer un coche smart? ¿No sabes dónde empezar? Por qué aprender con equipo de ICStation.El Arduino Bluetooth coche Smart tiene la función de seguimiento, evitación del obstáculo, control remoto por infrarrojos y Bluetooth remo
Control de un Arduino con el teléfono

Control de un Arduino con el teléfono

Hola a todos! En este instructible mostraré cómo controlar y leer sensores con arduino y blynk. Blynk es una aplicación que permite el control completo sobre arduino, rasberry pi y chispa base. Con tu smartphone! Y es tan fácil como subir algo de cód
Otro Arduino Control remoto coche controlado por teléfono Android con Bluetooth módulo

Otro Arduino Control remoto coche controlado por teléfono Android con Bluetooth módulo

Este tutorial va a configurar el IDE de Arduino para su uso con un tablero de clon de Adafruit protector motor así como establecer un viejo coche de RC que se puede controlar con un teléfono android a través de bluetooth. El código para el coche de R
Control de Arduino con teléfono Android a través de Bluetooth

Control de Arduino con teléfono Android a través de Bluetooth

Hola gente, aquí pueden aprender a controlar Arduino con teléfono Android a través de Bluetooth. Puede utilizar tu smartphone como un control remoto para sistema de iluminación del hogar o se puede utilizar como un etc. remoto del abejón.Para realiza