Paso 3: El Arduino código
/ * TEXTO ME
Este bosquejo, para el escudo Arduino GSM, espera un mensaje SMS y lo muestra a través del puerto serial y en máquina de texto ME de Kim.
Código de Javier Zorzano / TD http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS * /
/******************************************************************************************
* T H E C I R C U I T
*
* Una fuente de alimentación externa es obligatoria, de lo contrario no funciona el escudo GSM
Escudo GSM es conectado en un Arduino Uno
* Hay dos servos ambos conectados a GND y + 5V * la línea de control de servo giratorio va al pin 5
* La línea de control de servo vertical va al pin 10
* El LED listo va al pin 11 a través de una resistencia de 200 ohm
*******************************************************************************************/
#include / / incluir la biblioteca GSM
#include / / incluye la librería servo
#define PINNUMBER "XXXX" / / PIN de número de la tarjeta SIM GSM
#define rotaryPin 5 / / conectar el pin 5 al servo giratorio
#define verticalPin 10 / conectar el pin 10 al servo vertical
#define readyLed 11 / conectar pin 11 a LED que muestra que la unidad GSM es conectado
GsmAccess GSM; Inicializar las instancias de la biblioteca
Sms GSM_SMS; char senderNumber [20]; Matriz para sostener el número que un SMS es obtenido de
Servo rotaryServo; Crear objeto servo para controlar el servo giratorio
Servo verticalServo; Crear objeto servo para controlar el servo vertical
rotación de int [] = {161, 154, 148, 142, 136, 130, 124, 118, 112, 105, 99, 92, 85, 78, 72, 66, 60, 54, 48, 42, 36, 30, 24, 19, 12, 7};
int numberOfLetters = 26;
int currentServoPosition;
int newServoPosition;
int alto = 170; Definir los dos extremos del servo vertical
int abajo = 117;
int inactivityTimer = 0;
/**************************************************************************************
* Configurar
**************************************************************************************/
void setup()
{
Serial.Begin (9600); Inicializar la comunicación serial a 9600 rotary
Servo.Attach (rotaryPin); Conecte el servo giratorio vertical
Servo.Attach (verticalPin); Conecte el servo de dedo booleano
notConnected = true; Estado de la conexión GSM
parkArm(); Hacia un espacio seguro, si no hay ya
prompt();
parkArm(); Hacia un espacio seguro
mientras (notConnected) / / esperar hasta que se establezca la conexión GSM
{
digitalWrite (readyLed, bajo); Apagar el LED listo
Si (gsmAccess.begin (PINNUMBER) == GSM_READY) notConnected = false;
otra cosa
{
Serial.println ("no conectado");
retrasar (1000);
}
}
Serial.println ("GSM inicializada"); Mensaje de construcción de confianza
Serial.println ("en espera de mensajes");
digitalWrite (readyLed, HIGH); // Turn the ready LED on} /**************************************************************************************
* Bucle principal
**************************************************************************************/
void loop()
{
char c;
Si no hay ningún SMS periódicamente hacer una demostración
inactivityTimer = inactivityTimer ++; Contar para cada bucle
Si (inactivityTimer > 300) / / aprox. 1 seg por loop
{
inactivityTimer = 0; Restablecer el tomer
prompt(); Llamar la atención sobre sí mismo
}
Latido en LED para mostrar ese lazo es bucle todavía
digitalWrite (readyLed, bajo); Apagar el LED listo
Delay(100); Tiempo que el LED está apagado
digitalWrite (readyLed, HIGH); Encienda el LED listo
Si se dispone de un SMS
Si (sms.available())
{
inactivityTimer = 0; Si el mensaje entonces restablece el temporizador de inactividad
Serial.println ("mensaje recibido de:");
Leer mensaje bytes e imprimirlos
while(c=SMS.Read())
{
raiseLetterArm (c); "Imprimir" en brazos de plexiglás
}
SMS.Flush(); Eliminar mensaje de la memoria del modem
} delay(1000);
}
/**************************************************************************************
* Sugerirán el alguien cerca
**************************************************************************************/
void prompt()
{
raiseLetterArm (84); "Print" texto ME a brazos de plexiglás
raiseLetterArm (69);
raiseLetterArm (88);
raiseLetterArm (84);
raiseLetterArm (77);
raiseLetterArm (69);
}
/**************************************************************************************
* Poner el brazo fuera de peligro
**************************************************************************************/
void parkArm()
{
rotaryServo.attach (rotaryPin); Conecte el servo giratorio
newServoPosition = 180; Parque donde el brazo puede no hacer daño cuando conectado/desconectado
currentServoPosition = 9; Asegúrese de que está claro que es necesario un movimiento
rotateServo(); Mover el servo giratorio
Delay(2000); Espere a que el servo llegar
rotaryServo.detach (); Mantener las cosas tranquilas
}
/**************************************************************************************
* Levante el brazo de letra especificado
**************************************************************************************/
void raiseLetterArm (int charEntered)
{
rotaryServo.attach (rotaryPin); Conecte el servo en el pin
'A' es 65 'a' es 97 'Z' es de 90
Si ((charEntered < 65) || ((charEntered > 91) & & (charEntered < 97)) || (charEntered > 123))
{
Entonces no es A la Z así que no hace nada - espera un poco
}
otra cosa
{
Convertir minúsculas en mayúsculas
Si (charEntered > 96)
{
charEntered = charEntered - 32;
}
Si ((charEntered > 64) & &(charEntered < 91))
{
newServoPosition = rotación [charEntered - 65]; Establecer dónde girar el brazo
rotateServo();
}
Mostrar lo que fue enviado:
Serial.Print ("que me enviaste: \'");
Serial.Write(charEntered);
Serial.Print ("\' ASCII valor:");
Serial.println(charEntered);
pressDown ();
}
rotaryServo.detach (); Detener los movimientos al azar}
/*********************************************************************************
* Baje el dedo - Asegúrese de que esté para arriba antes de volver
!*********************************************************************************/
void pressDown()
{
verticalServo.attach (verticalPin); Conecte el servo de dedo
Delay(500);
para (int i = 0; i < arriba-abajo; i ++)
{
verticalServo.write (a-i); Dedo hacia abajo de un grado a la vez
Delay(10);
}
Delay(2000);
para (int i = 0; i < arriba-abajo; i ++)
{
verticalServo.write (abajo + i); Dedo para arriba de un grado a la vez
Delay(10);
}
Delay(500);
verticalServo.detach (); Detener los movimientos al azar}
/*********************************************************************************
* Mueva el brazo - Asegúrese de que el dedo para arriba antes de usar ti *** /
void rotateServo()
{
int diferencia;
int noOfSlowSteps = 5; No de grados a moverse lentamente fue 5
int waitForServo = 20; No reducen demasiado o pierde pasos
verticalServo.attach (verticalPin); Conecte el servo de dedo
verticalServo.write (arriba); Asegúrese de que está fuera del camino
verticalServo.detach (); Separar
diferencia = newServoPosition - currentServoPosition;
Si (diferencia > noOfSlowSteps)
{
rotaryServo.write (newServoPosition - noOfSlowSteps); Mover rápidamente
currentServoPosition = newServoPosition - noOfSlowSteps; Nota nueva posición}
Si (diferencia < -1 * noOfSlowSteps)
{
rotaryServo.write (newServoPosition + noOfSlowSteps); Mover rápidamente
currentServoPosition = newServoPosition + noOfSlowSteps; Nueva posición de nota
}
diferencia = newServoPosition - currentServoPosition; Calcular la diferencia si (diferencia > 0)
Poco a poco aumenta la posición actual hasta que la diferencia es 0
{
para (int i = 0; i < diferencia + 1; i ++)
{
rotaryServo.write (currentServoPosition + i);
retardo (waitForServo);
}
}
Else / / luego lentamente disminuir posición actual hasta que la diferencia es 0
{
para (int i = 0; i < (-1 * diferencia) + 1; i ++)
{
rotaryServo.write (currentServoPosition - i);
retardo (waitForServo);
}
}
currentServoPosition = newServoPosition; Recuerde que es brazo}
/**********************************************************************************
* Limpiaparabrisas prueba (comentada)
**********************************************************************************/
/ * para (letra = 0; letra < numberOfLetters; letra ++)
{
newServoPosition = rotación [letra]; Establecer dónde girar el brazo
rotateServo();
Serial.Print ("giro [letra]");
Serial.println (rotación [carta]);
}
Delay(5000);
para (letra = numberOfLetters; carta + 1 > 0; carta--)
{
newServoPosition = rotación [letra]; Establecer dónde girar el brazo
rotateServo();
Serial.Print ("giro [letra]");
Serial.println (rotación [carta]);
}
Delay(5000); */
/**********************************************************************************
/ * Para calibrar los servos rotativos (comentado) - necesario potpin
**********************************************************************************/
/*
Val = analogRead(potpin); Lee el valor del potenciómetro (valor entre 0 y 1023)
Val = mapa (val, 0, 1023, 0, 179); la escala a utilizar con el servo (valor entre 0 y 180)
rotaryServo.write(val); ajusta la posición del servo según el valor de escala
Delay(15); espera a que el servo llegar
imprimir el valor de leer:
Serial.println(Val); */