Stap 5: De Code
Hier is de logica achter de code: er zijn 2 "counter" variabelen-voor witte detectie en één voor zwart. Aan het begin, zijn ze ingesteld op "countmax", die hier 10 seconden is. Elke 10 milliseconden, de Arduino zoekt naar een hoog of laag detectie en daarin de teller voor wat het vindt terug naar countmax, terwijl het andere item drops door 10. Als beide teller zakt tot onder "countwarn" (2 seconden), klinkt de zoemer. Als beide teller zakt tot onder nul, blijkt uit de estafette dus het signaal op de RCA-kabel wordt geopend en niets op de TV gaat.
U kunt de variabelen als de max en de waarschuwing keer wilt instellen. Er zijn tal van Instructables hier ongeveer een Ino bestand te uploaden naar de Arduino. Ik ben met behulp van een Nano, maar de Uno of andere waarschijnlijk zou moeten werken. Er moeten betere manieren om de code te schrijven, maar ik ben een ingenieur niet een computerprogrammeur.
Als ik het heb gedaan rechts, bikerelay.ino is aangesloten en dat is de code moet u (kan iemand zet het op github?). Hier is de lelijke tekstversie als dat niet werkt:
int ledpin = 13; arduino licht activeert wanneer er een detectie is
int ledpin2 = 11; Hiermee activeert u externe LED of zoemer wanneer er een detectie int outputpin = 3; PIN het relay-besturingselement is gekoppeld aan int sensorpin = 12; PIN de detector is aangesloten op int warnpin = 4; PIN gebruikt om te activeren waarschuwing LED of zoemer int counter = 0; Countdown sinds laatste detectie int counter2 = 0; Countdown sinds de laatste niet-detectie
de volgende 2 wijzigen om aan te passen de timer intervallen int countmax = 10000; maximumgehalte aan timerfunctie. 1000 = 1 tweede int countwarn = 2000; Wanneer te waarschuwing pin inschakelen. 1000 = 1 tweede void setup {pinMode (ledpin, OUTPUT); pinMode (ledpin2, OUTPUT); pinMode (outputpin, OUTPUT); pinMode (warnpin, OUTPUT); pinMode (sensorpin, INPUT); counter = countmax; counter2 = countmax; //any lijn met "serial" is voor foutopsporing en moet worden uitgecommentarieerd zoniet nodig omdat de klok vertragen zal / / Serial.begin(9600); //Serial.print ("count:"); Serial.println(Counter); Serial.Print ("count2:"); Serial.println(counter2); } void loop {als (digitalRead(sensorpin)) //what te doen als er een niet-detectie {digitalWrite (ledpin, laag); digitalWrite (ledpin2, laag); counter = counter - 10; counter2 = countmax;} anders //what te doen wanneer er een detectie is {digitalWrite(ledpin,HIGH); digitalWrite(ledpin2,HIGH); teller = countmax; counter2 = counter2 - 10;}
uitgang voor seriële lijnen voor het debuggen van //Serial.print ("count:"); Serial.println(Counter); Serial.Print ("count2:"); Serial.println(counter2); Serial.println("---"); klinkt een waarschuwing als een teller boven 0 maar onder het niveau als van "countwarn" (counter > 0 & & counter < countwarn || counter2 > 0 & & counter2 < countwarn) {digitalWrite (warnpin, hoge);} else {digitalWrite (warnpin, laag);}
Zet de output als beide teller druppels onder 0 //these instellingen voor een "actieve laag" relay zijn. Schakelen van "HIGH" en laag voor een hoge output als actieve (counter < 0) {digitalWrite (outputpin, hoge); counter = 0;} anders als (counter2 < 0) {digitalWrite (outputpin, hoge); counter2 = 0;} else {digitalWrite (outputpin, laag);}
delay(10); wachttijd (miliseconden) voordat het weer op gang
}