Stap 3: Arduino Sketch
Ik gebruikte de weerstanden van 1K op de led1Pin en de led2Pin.
Ik gebruikte de 10K weerstand op speakerPin gonna 2N2222 transistor basis, tot de emitter. Vervolgens de emiter ging aan de ene kant van de schakelaar van het speelgoed en de verzamelaar ging naar de andere. Dit werkte de 2N2222 transistor als een schakelaar.
Opmerkingen bekijken voor de arduino pin bedrading.
#include < X10Firecracker.h >
#include < Servo.h >
Servo myservo; Nieuw exemplaar van de Servo.h
int rtsPin = 2; RTS lijn voor C17A - DB9 pin 7
int dtrPin = 3; DTR-lijn voor C17A - DB9 pin 4
Sluit DB9 pin 5 aan de grond.
int servoPin = 5; Servo gebruikt om op te heffen van de haspel
int pirPin = 8;
int led1Pin = 10; Links onder leiding
int led2Pin = 11; Recht geleid
int speakerPin = 12; Piëzo-zoemer spreker
int bitDelay = 1; mS vertraging tussen bits (1 mS OK)
int ledStatus = 0;
int calibrationTime = 30;
lang unsigned int lowIn;
lang unsigned int pauze = 5000;
Boole lockLow = waar;
Booleaanse takeLowTime;
int booCounter = 1;
VOID Setup {}
Serial.begin(9600); De seriële communicatie start op 9600 baud-rate
pinMode (led1Pin, OUTPUT); De digitale pin set led1Pin voor de uitvoer van
pinMode (led2Pin, OUTPUT); De digitale pin set led1Pin voor de uitvoer van
pinMode (speakerPin, OUTPUT); / / Set speakerPin digitale pin aan output
pinMode (servoPin, OUTPUT); De digitale pin set led1Pin voor de uitvoer van
myservo.attach(7); Koppelen servo op pin 7 voor continue rotatie servo
X10.init (rtsPin, dtrPin, bitDelay); Initialiseren X10 C17A
pinMode (pirPin, INPUT);
digitalWrite (pirPin, laag);
de sensor enige tijd te geven om te kalibreren
Serial.Print ("kalibreren sensor");
for (int i = 0; ik < calibrationTime; i ++) {}
Serial.Print(".");
delay(1000);
}
Serial.println ("done");
Serial.println ("SENSOR actief");
delay(50);
myservo.write(140);
}
void loop {}
if(digitalRead(pirPin) == HIGH) {}
Serial.Print ("[[[get| http://www.mysite.com/iobridge.html]]]"); Stuur seriële-bericht naar iobridge.
digitalWrite (led1Pin, hoge); de led visualiseert de sensoren uitvoer pin staat
digitalWrite (led2Pin, hoge); de led visualiseert de sensoren uitvoer pin staat
if(lockLow) {}
zorgt ervoor dat we wachten op een overgang naar lage voordat verdere uitvoer plaatsvindt:
lockLow = false;
Laat de haspel door het opheffen van de servo.
myservo.write(140);
Speeltje met geluid inschakelen
digitalWrite (speakerPin, hoge);
delay(100);
digitalWrite (speakerPin, laag);
delay(7000);
myservo.write(65);
trun uit/aan lichten opdrachten verzenden x10
X10.sendCmd (hcC, 1, cmdOn);
X10.sendCmd (hcC, 3, cmdOn);
X10.sendCmd (hcC, 2, cmdOff);
int var = 0;
Activeer de continue rotatie servo.
terwijl (var < 800) {}
digitalWrite(servoPin,HIGH);
delayMicroseconds(1200); 1.5ms
digitalWrite(servoPin,LOW);
vertraging(20); 20ms
var ++;
}
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW) {}
Als (ledStatus == 0) {}
digitalWrite (led1Pin, hoge);
digitalWrite (led2Pin, laag);
ledStatus = 1;
delay(100);
}
else {}
digitalWrite (led1Pin, laag);
digitalWrite (led2Pin, hoge);
ledStatus = 0;
delay(100);
}
if(takeLowTime) {}
lowIn = millis(); opslaan van het tijdstip van de overgang van hoog naar laag
takeLowTime = false; Zorg ervoor dat dit gebeurt alleen bij het begin van een lage fase
}
de sensor wordt laag voor meer dan het bepaalde pauze,
Wij gaan ervan uit dat geen meer beweging gaat gebeuren
Als (! lockLow & & millis() - lowIn > onderbreken) {}
maakt zeker dit blok code wordt alleen uitgevoerd na opnieuw
een nieuwe reeks van beweging is gedetecteerd
lockLow = true;
Opdrachten verzenden x10
X10.sendCmd (hcC, 1, cmdOff);
X10.sendCmd (hcC, 3, cmdOff);
X10.sendCmd (hcC, 2, cmdOn);
}
}
}