Étape 16 : Interrupteur actionné casque
Alors, que faites-vous si vous ne voulez pas un casque sans fil ?
Un autre ami à moi a voulu animer son casque MkIV (dans un ordre bien précis) et il voulait juste un simple bouton poussoir pour l’activer. Une simple pression pour l’ouvrir et une simple pression de fermer. L’électronique est tout comme le casque sans fil, sauf que cette fois que la radio XBee est remplacée par un interrupteur momentané. Il a également souhaité une LED rouge clignotante dans le casque c’est dans le code trop. Les yeux semblent être vraiment lumineux dans la vidéo, parce que le casque n’a pas été peint et l’arrière des yeux ne sont pas noirci.
Voici le code nécessaire-
const int servoPin1 = 2 ; visage plaque servo connecté à la broche numérique 1
const int servoPin2 = 3 ; menton servo connecté à la broche numérique 2
const int buttonPin = 6 ; bouton d’activation relié à la broche numérique 6
const int ledPin1 = 4 ; Yeux de LED connectée à la broche numérique 4
const int ledPin2 = 5 ; LED rouge relié à la broche numérique 5
#include < Servo.h >
Servo faceplateServo ;
Servo chinServo ;
void setup() {}
faceplateServo.write(30) ; position initiale pour servo plat de visage
chinServo.write(65) ; position initiale pour le servo de menton
faceplateServo.attach(servoPin1) ;
chinServo.attach(servoPin2) ;
pinMode (buttonPin, entrée) ; FAIBLE lorsqu’il est poussé
pinMode (ledPin1, sortie) ;
pinMode (ledPin2, sortie) ;
digitalWrite (ledPin1, HIGH) ; yeux de LED s’allume
digitalWrite (ledPin2, basse) ; éteindre la LED rouge
}
void loop() {}
public static unsigned lastPushedTime long = 0 ;
public static boolean faceplateClosed = true ;
public static boolean lastButtonState = élevé ;
Boolean newButtonState = digitalRead(buttonPin) ;
Si le bouton est enfoncé, et il a été un moment depuis sa dernière descente...
Si (newButtonState == LOW & & lastButtonState == HIGH & & millis() - lastPushedTime > 100) {}
lastPushedTime = millis() ;
Si {(faceplateClosed)
faceplateServo.write(120) ; Façade ouverte
faceplateClosed = false ;
Delay(300) ; attendre un peu
digitalWrite (ledPin2, HIGH) ; allumer la LED rouge
Delay(200) ;
digitalWrite (ledPin2, basse) ; éteindre la LED rouge
chinServo.write(20) ; faire pivoter le servo de menton à 20 degrés
Delay(100) ;
digitalWrite (ledPin1, basse) ; désactiver les yeux à LED
Delay(100) ;
digitalWrite (ledPin2, HIGH) ;
Delay(200) ;
digitalWrite (ledPin2, basse) ;
Delay(200) ;
digitalWrite (ledPin2, HIGH) ;
Delay(200) ;
digitalWrite (ledPin2, basse) ;
Delay(200) ;
digitalWrite (ledPin2, HIGH) ;
Delay(200) ;
digitalWrite (ledPin2, basse) ;
Delay(200) ;
digitalWrite (ledPin2, HIGH) ;
Delay(200) ;
digitalWrite (ledPin2, basse) ;
Delay(200) ;
digitalWrite (ledPin2, HIGH) ;
Delay(200) ;
digitalWrite (ledPin2, basse) ;
}
else {/ / plaque frontale est ouvert
chinServo.write(65) ; faire pivoter le servo de menton à 65 degrés
Delay(500) ; attendre une demi-seconde
faceplateServo.write(30) ; faire pivoter le servo plaque face à 30 degrés
Delay(500) ;
digitalWrite (ledPin1, HIGH) ; mettre en marche les yeux à LED
Delay(100) ;
digitalWrite (ledPin1, basse) ; désactiver les yeux à LED
Delay(100) ;
digitalWrite (ledPin1, HIGH) ;
Delay(100) ;
digitalWrite (ledPin1, basse) ;
Delay(100) ;
digitalWrite (ledPin1, HIGH) ;
faceplateServo.write(30) ; fermer flaceplate
faceplateClosed = true ;
}
}
lastButtonState = newButtonState ;
}
Que se passe-t-il si vous voulez utiliser le lecteur de tag RFID comme un interrupteur ?
Vous pouvez le faire aussi. Au lieu d’utiliser un bouton poussoir, vous pourriez également activer le casque en y branchant un lecteur de tag RFID directement au casque. Ce code va ouvrir le casque pour un nombre donné de secondes et puis fermez-le. Il y a aussi une deuxième étiquette RFID lire dans le code si vous voulez ajouter une autre fonction, par exemple un terminales d’ouverture ou un repulsor s’allumant.
Le code devrait ressembler à ceci-
#include « Servo.h » / / inclure la bibliothèque de servo
Servo faceplateServo ;
Servo chinServo ;
int ledPin1 = 4 ; broche de commande pour les yeux à LED
int servoPin1 = 2 ; broche de commande servo plat de visage
int servoPin2 = 3 ; broche de commande pour menton
int RFIDResetPin = 13 ;
Enregistrer vos tags RFID ici
char tag1 [13] = « 440085E77452 » ; Cela doit correspondre à votre ID de la balise
char tag2 [13] = « 440085FC330E » ;
void setup() {}
faceplateServo.attach(servoPin1) ; s’adapte sur le servo sur broche 2 l’objet de servo
chinServo.attach(servoPin2) ; s’adapte sur le servo sur la broche 3 l’objet de servo
faceplateServo.write(30) ; faire pivoter le servo plaque face à 30 degrés
chinServo.write(95) ; faire pivoter le servo de menton à 95 degrés
pinMode (ledPin1, sortie) ; définit l’axe de la LED en sortie
digitalWrite (ledPin1, HIGH) ; mettre en marche les yeux à LED
Serial.Begin(9600) ;
pinMode (RFIDResetPin, sortie) ;
digitalWrite (RFIDResetPin, élevé) ;
}
void loop() {}
char tagString [13] ;
int index = 0 ;
lecture booléen = false ;
{while(Serial.available())}
readByte int = Serial.read() ; lire l’octet disponible suivant
if(ReadByte == 2) lecture = true ; Date du début de la balise
if(ReadByte == 3) lecture = false ; fin de balise
Si (lecture & & readByte! = 2 & & readByte! = 10 & & readByte! = 13) {}
stocker la balise
tagString [index] = readByte ;
index ++ ;
}
}
checkTag(tagString) ; Vérifier si c’est un match
clearTag(tagString) ; Désactivez le char de toute valeur
resetReader() ; réinitialiser le lecteur RFID
}
void checkTag (char tag[]) {}
///////////////////////////////////
Vérifier la lecture tag contre tags connus
///////////////////////////////////
if(strlen(tag) == 0) return ; vide, sans devoir contunue
Si (compareTag (tag, tag1)) {/ / si appariés tag1, procédez comme suit
digitalWrite (ledPin1, basse) ; désactiver les yeux à LED
Delay(500) ; attendre une demi-seconde
faceplateServo.write(95) ; faire pivoter le servo de plaque de visage à 95 degrés
chinServo.write(20) ; faire pivoter le servo de menton à 20 degrés
Delay(4000) ; Attendez 4 secondes
chinServo.write(95) ; faire pivoter le servo de menton à 95 degrés
faceplateServo.write(30) ; faire pivoter le servo de plaque de visage à 30 degrés
digitalWrite (ledPin1, HIGH) ; mettre en marche les yeux à LED
} else if (compareTag (tag, tag2)) {//if appariés tag2, cela
écrire du code ici pour que quelque chose arrive quand tag2 est lu
} else {}
Serial.println(tag) ; lecture de n’importe quelle balise inconnue
}
}
void lightLED (int NIP) {}
///////////////////////////////////
Allumer la LED sur la broche « pin » pour 250 ms
///////////////////////////////////
Serial.println(pin) ;
digitalWrite (tige, haute) ;
Delay(250) ;
digitalWrite (broches, faible) ;
}
void resetReader() {}
///////////////////////////////////
Réinitialiser le lecteur RFID à relire.
///////////////////////////////////
digitalWrite (RFIDResetPin, basse) ;
digitalWrite (RFIDResetPin, élevé) ;
Delay(150) ;
}
Sub clearTag (char one[]) {}
///////////////////////////////////
effacer le tableau de char en le remplissant avec null - ASCII 0
Pensera même balise a été lue autrement
///////////////////////////////////
pour (int i = 0; i < strlen(one); i ++) {}
un [i] = 0 ;
}
}
Boolean compareTag (char [un], char two[]) {}
///////////////////////////////////
comparer deux valeurs pour voir s’il y a même,
strcmp ne fonctionne pas 100 %, si nous faisons cela
///////////////////////////////////
if(strlen(One) == 0) return false ; vide
pour (int i = 0; i < 12; i ++) {}
Si (un [i]! = two[i]) return false ;
}
retourne la valeur true ; aucune incompatibilités
}