Stap 3: De code van de Arduino
/ * TEKST ME
Deze sketch voor de Arduino GSM shield, wacht op een SMS-bericht en weergegeven via de seriële poort en op Kims tekst ME machine.
Sommige code van Javier Zorzano / TD http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS * /
/******************************************************************************************
* T H E C I R C U IK T
*
* Een externe voeding is verplicht, anders het schild van de GSM niet werkt
* Het schild van de GSM is aangesloten op een Arduino Uno
* Er zijn twee servo's beide met GND verbonden en + 5V * de bedieningsleiding roterende servo naar pin 5 gaat
* De bedieningsleiding verticale servo gaat naar pin 10
* De klaar LED gaat naar pin 11 via een weerstand van 200 ohm
*******************************************************************************************/
#include / / de GSM-bibliotheek
#include / / de servo-bibliotheek
#define PINNUMBER "XXXX" / / pincode voor de GSM SIM-kaart
#define rotaryPin 5 / / sluit pin 5 aan de roterende servo
#define verticalPin 10 / / pin 10 verbinden met de verticale servo
#define readyLed 11 / / Connect pin 11 LED waaruit dat GSM-eenheid blijkt is aangesloten
GSM gsmAccess; Initialiseren van de exemplaren van de bibliotheek
GSM_SMS sms; char senderNumber [20]; Matrix te houden van het nummer dat een SMS-bericht wordt opgehaald
Servo rotaryServo; Servo-object om te bepalen van roterende servo maken
Servo verticalServo; Servo-object om te bepalen van de verticale servo maken
int rotatie [] = {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 omhoog = 170; Definiëren van de twee uitersten van verticale servo
int omlaag = 117;
int inactivityTimer = 0;
/**************************************************************************************
* Instellen
**************************************************************************************/
VOID Setup
{
Serial.begin (9600); Seriële communicatie op 9600 rotary initialiseren
Servo.attach (rotaryPin); De verticale roterende servo koppelen
Servo.attach (verticalPin); Koppelen van de servo vinger Boole
notConnected = true; Status van de verbinding van de GSM
parkArm(); Verplaatsen naar een veilige ruimte als niet daar al
prompt();
parkArm(); Verplaatsen naar een veilige ruimte
terwijl (notConnected) / / Wait totdat GSM verbinding tot stand is gebracht
{
digitalWrite (readyLed, laag); De klaar LED uitschakelen
Als (gsmAccess.begin (PINNUMBER) == GSM_READY) notConnected = false;
anders
{
Serial.println ('niet verbonden');
vertraging (1000);
}
}
Serial.println ("GSM geïnitialiseerd"); Vertrouwen gebouw bericht
Serial.println ("Waiting for berichten");
digitalWrite (readyLed, hoge); // Turn the ready LED on} /**************************************************************************************
* De hoofdlus
**************************************************************************************/
void loop
{
char c;
Als er geen sms'en beschikbaar op gezette tijden een show maken
inactivityTimer = inactivityTimer ++; Voor elke lus tellen
Als (inactivityTimer > 300) / / ca. 1 sec per lus
{
inactivityTimer = 0; Reset de tomer
prompt(); Aandacht vestigen op jezelf
}
Hartslag op LED om te laten zien dat lus is nog steeds in een lus
digitalWrite (readyLed, laag); De klaar LED uitschakelen
delay(100); Destijds LED uitgeschakeld is
digitalWrite (readyLed, hoge); De klaar LED inschakelen
Als er een SMS beschikbaar
Als (sms.available())
{
inactivityTimer = 0; Als het bericht opnieuw inactiviteit timer
Serial.println ("bericht ontvangen:");
Bericht bytes lezen en afdrukken
while(c=SMS.Read())
{
raiseLetterArm (c); 'Afdrukken' perspex wapens
}
SMS.Flush(); Bericht verwijderen uit het geheugen van de modem
} delay(1000);
}
/**************************************************************************************
Vraagt iemand in de buurt
**************************************************************************************/
VOID prompt()
{
raiseLetterArm (84); "Afdrukken" tekst ME naar perspex wapens
raiseLetterArm (69);
raiseLetterArm (88);
raiseLetterArm (84);
raiseLetterArm (77);
raiseLetterArm (69);
}
/**************************************************************************************
* Zet de arm uit harm's way
**************************************************************************************/
VOID parkArm()
{
rotaryServo.attach (rotaryPin); De roterende servo koppelen
newServoPosition = 180; Park waar de arm geen kwaad doen kunt toen overgestapt op/af
currentServoPosition = 9; Zorg ervoor dat het is duidelijk dat een verhuizing nodig is
rotateServo(); Verplaatsen van de roterende servo
delay(2000); Wachten op de servo om er te komen
rotaryServo.detach (); Het zwijgen van dingen
}
/**************************************************************************************
* Het verhogen van de arm van de brief opgegeven
**************************************************************************************/
VOID raiseLetterArm (int charEntered)
{
rotaryServo.attach (rotaryPin); Bevestig de servo op pin
'A' is 65 'a' is 97 'Z' is 90
Als ((charEntered < 65) || ((charEntered > 91) & & (charEntered < 97)) || (charEntered > 123))
{
Dan is geen A tot Z dus niets doen - een beetje wachten
}
anders
{
Maken van kleine letters naar hoofdletters
Als (charEntered > 96)
{
charEntered = charEntered - 32;
}
Als ((charEntered > 64) & &(charEntered < 91))
{
newServoPosition = draaiing [charEntered - 65]; Instellen waar te draaien van de arm te
rotateServo();
}
Toon wat is verzonden:
Serial.Print ("je stuurde me: \'");
Serial.write(charEntered);
Serial.Print ("\' ASCII-waarde:");
Serial.println(charEntered);
pressDown ();
}
rotaryServo.detach (); Het stoppen van willekeurige bewegingen}
/*********************************************************************************
* Duw de vinger - zorg ervoor dat het is alvorens terug te keren
!*********************************************************************************/
VOID pressDown()
{
verticalServo.attach (verticalPin); Koppelen van de vinger-servo
delay(500);
for (int i = 0; ik < omhoog / omlaag; i ++)
{
verticalServo.write (up-i); Vinger naar beneden één graad tegelijk
delay(10);
}
delay(2000);
for (int i = 0; ik < omhoog / omlaag; i ++)
{
verticalServo.write (down + i); Vinger omhoog één graad tegelijk
delay(10);
}
delay(500);
verticalServo.detach (); Het stoppen van willekeurige bewegingen}
/*********************************************************************************
* Bewegen de arm - zorg ervoor dat de vinger omhoog voordat u it *** /
VOID rotateServo()
{
int verschil;
int noOfSlowSteps = 5; Nee was van graden om langzaam te bewegen 5
int waitForServo = 20; Niet teveel verminderen of het mist stappen
verticalServo.attach (verticalPin); Koppelen van de vinger-servo
verticalServo.write (omhoog); Zorg ervoor dat het uit de weg
verticalServo.detach (); Loskoppelen
verschil = newServoPosition - currentServoPosition;
Als (verschil > noOfSlowSteps)
{
rotaryServo.write (newServoPosition - noOfSlowSteps); Snel verplaatsen
currentServoPosition = newServoPosition - noOfSlowSteps; Opmerking nieuwe positie}
Als (verschil < -1 * noOfSlowSteps)
{
rotaryServo.write (newServoPosition + noOfSlowSteps); Snel verplaatsen
currentServoPosition = newServoPosition + noOfSlowSteps; Opmerking nieuwe positie
}
verschil = newServoPosition - currentServoPosition; Verschil berekenen als (verschil > 0)
Dan Verhoog langzaam huidige positie totdat verschil 0 is
{
for (int i = 0; ik < verschil + 1; i ++)
{
rotaryServo.write (currentServoPosition + i);
vertraging (waitForServo);
}
}
anders / / vervolgens langzaam afname huidige positie tot verschil 0 is
{
for (int i = 0; ik < (-1 * verschil) + 1; i ++)
{
rotaryServo.write (currentServoPosition - ik);
vertraging (waitForServo);
}
}
currentServoPosition = newServoPosition; Vergeet niet waar arm is}
/**********************************************************************************
* Ruitenwisser test (uitgecommentarieerd)
**********************************************************************************/
/ * voor (brief = 0; brief < numberOfLetters; brief ++)
{
newServoPosition = draaiing [nieuwsbrief]; Instellen waar te draaien van de arm te
rotateServo();
Serial.Print ("rotatie [brief]");
Serial.println (rotatie [brief]);
}
delay(5000);
voor (brief = numberOfLetters; brief + 1 > 0; brief--)
{
newServoPosition = draaiing [nieuwsbrief]; Instellen waar te draaien van de arm te
rotateServo();
Serial.Print ("rotatie [brief]");
Serial.println (rotatie [brief]);
}
delay(5000); */
/**********************************************************************************
/ * Kalibreren van de roterende servo (uitgecommentarieerd)-moet instellen potpin
**********************************************************************************/
/*
Val = analogRead(potpin); leest de waarde van de potentiometer (waarde tussen 0 en 1023)
Val = kaart (val, 0, 1023, 0, 179); schaal om het te gebruiken met de servo (waarde tussen 0 en 180)
rotaryServo.write(val); stelt u de positie van de servo volgens de geschaalde waarde
delay(15); wacht tot de servo om er te komen
de waarde die u leest uitprinten:
Serial.println(val); */