Animatronic Iron Man Mk III kostym (12 / 17 steg)
Steg 12: Elektronik - höger scheman och kod
Här är Schematisk och koden för höger sida.
Det är ganska liknande till vänster sida, minus XBee radion. Servon för underarmen missil alla får samma signal-en av servon som öppnar sidan omslaget måste vara omvänd rotation. Två av servon som öppnar panelen framåt och bakåt axel rocket covers måste också ha deras rotation vändas som de får samma signal som servon i motsatta axeln.
Här är koden-
#include "Servo.h" / / include servo biblioteket
Servo forearmServo; servon att flytta underarmen missil
Servo rearcoverServo; servo flytta bakre axeln raket pod cover
Servo forwardcoverServo; servo att flytta fram axeln raket pod cover
Servo podServo; servo att flytta axeln raket pod
int RFIDResetPin = 13.
int servoPin1 = 7. kontroll stift för underarmen missil servon
int servoPin2 = 8; kontroll stift för bakre axeln raket pod täcka servo
int servoPin3 = 9; kontroll stift för framåt raket pod täcka servo
int servoPin4 = 10; kontroll stift för axeln raket pod servo
Registrera din RFID-taggar här
char tag1 [13] = "440085E77452";
char tag2 [13] = "440085FC330E";
char tag3 [13] = "440085F97840";
char tag4 [13] = "4400863914EF";
void setup() {
Serial.BEGIN(9600);
forearmServo.attach(servoPin1); tillmäter objektet servo servo på stift 7
rearcoverServo.attach(servoPin2); tillmäter objektet servo servo på stift 8
forwardcoverServo.attach(servoPin3); tillmäter objektet servo servo på pin 9
podServo.attach(servoPin4); tillmäter objektet servo servo på stift 10
forearmServo.write(45); rotera underarmen servon till 45 grader
rearcoverServo.write(45); rotera bakre luckan servo till 45 grader
forwardcoverServo.write(45); rotera forward lock servo till 45 grader
podServo.write(45); Rotera vänster lock servo till 45 grader
pinMode (RFIDResetPin, OUTPUT);
digitalWrite (RFIDResetPin, hög);
}
void loop() {
char tagString [13].
heltal index = 0;
booleska läsning = false;
While(Serial.available()) {
int readByte = Serial.read(); läsa nästa tillgängliga byte
IF(readByte == 2) läsning = sant; början av tag
IF(readByte == 3) läsning = false; slutet av taggen
om (reading & & readByte! = 2 & & readByte! = 10 & & readByte! = 13) {
lagra etiketten
tagString [index] = readByte;
index ++;
}
}
checkTag(tagString); Kontrollera om det är en match
clearTag(tagString); Rensa röding av alla värde
resetReader(); återställa RFID-läsare
}
void checkTag (char tag[]) {
///////////////////////////////////
Kolla Läs etiketten mot kända märken
///////////////////////////////////
IF(strlen(tag) == 0) återvända; Tom, utan att behöva contunue
om (compareTag (tag, tag3)) {/ / om matchade tag3, göra detta
forearmServo.write(135);
Delay(2500);
forearmServo.write(45);
} else om (compareTag (tag, tag4)) {//if matchade tag4, gör detta
rearcoverServo.write(70); rotera pod servo till 90 grader
Delay(500); vänta en halv sekund
forwardcoverServo.write(100); rotera forward lock servo till 110 grader
Delay(500);
podServo.write(80); rotera pod servo till 80 grader
Delay(4000);
podServo.write(45); rotera pod servo till 45 grader
Delay(500);
forwardcoverServo.write(45); rotera den vidarebefordra coverservo till 90 grader
Delay(500);
rearcoverServo.write(45); rotera pod servo till 135 grader
} annat {
Serial.println(tag); läste ut en okänd tagg
}
}
void lightLED (int pin) {
///////////////////////////////////
Slå på lampan på pin "pin" för 250ms
///////////////////////////////////
Serial.println(PIN);
digitalWrite (pin, hög);
Delay(250);
digitalWrite (pin, låg);
}
void resetReader() {
///////////////////////////////////
Återställa RFID-läsare att läsa igen.
///////////////////////////////////
digitalWrite (RFIDResetPin, låg);
digitalWrite (RFIDResetPin, hög);
Delay(150);
}
void clearTag (char one[]) {
///////////////////////////////////
Rensa char matrisen genom att fylla med null - ASCII 0
Kommer att tänka samma tagg har lästs annars
///////////////////////////////////
för (int jag = 0; jag < strlen(one); i ++) {
en [i] = 0;
}
}
booleska compareTag (char [en], char two[]) {
///////////////////////////////////
Jämför två värde att se om samma,
Strcmp inte fungerar 100% så det gör vi
///////////////////////////////////
IF(strlen(One) == 0) return false; Tom
för (int jag = 0; jag < 12, i ++) {
om (en [i]! = two[i]) return false;
}
return true; inga avvikelser
}