Ingen TV om du tränar! (5 / 6 steg)
Steg 5: Koden
Här är logiken bakom koden: det finns 2 "counter" variabler-en för vita upptäckt och en för svart. I början, är de inställda på "countmax", som här är 10 sekunder. Varje 10 millisekunder, Arduino söker antingen en hög eller låg upptäckten, och ställer den räknaren för vad den hittar tillbaka till countmax medan andra räknaren sjunker med 10. Om någon av räknarna sjunker under "countwarn" (2 sekunder), låter summern. Om någon av räknarna sjunker under noll, visar det av stafett så signalen på RCA-kabeln är öppnade och ingenting går på TV.
Du kan redigera variablerna för att ställa in max och varning gånger. Det finns massor av Instructables här om du laddar upp en .ino fil till Arduino. Jag använder en Nano, men Uno eller någon annan bör nog fungera. Det måste finnas bättre sätt att skriva kod, men jag är civilingenjör inte en programmerare.
Om jag har gjort det rätt, bikerelay.ino är ansluten och det är koden du behöver (kan någon uttryckte det på github?). Här är den ful textversionen om det fungerade:
int ledpin = 13. aktiverar arduino ljus när det finns en upptäckt
int ledpin2 = 11; aktiverar extern LED eller summern när det finns en upptäckt int outputpin = 3; PIN relay kontroll är kopplad till int sensorpin = 12; PIN detektorn är kopplad till int warnpin = 4; PIN-kod används för att aktivera varning LED eller Summer int counter = 0; Countdown sedan senaste upptäckt int counter2 = 0; Countdown sedan förra icke-detection
ändra de nästa 2 inställningarna för att justera timer mellanrum int countmax = 10000; högsta nivå av timern. 1000 = 1 andra int countwarn = 2000. När Aktivera varning pin. 1000 = 1 andra void setup() {pinMode (ledpin, produktionen); pinMode (ledpin2, produktionen); pinMode (outputpin, produktionen), pinMode (warnpin, produktionen); pinMode (sensorpin, ingång); räknare = countmax; counter2 = countmax; //any linje med "serienummer" är för felsökning och bör vara kommenteras ut om inte behövs eftersom det kommer att bromsa klockan / / Serial.begin(9600); //Serial.print ("count:"); Serial.println(Counter); Serial.Print ("count2:"); Serial.println(counter2); } void loop() {om (digitalRead(sensorpin)) //what att göra när det finns en icke-upptäcka {digitalWrite (ledpin, låg), digitalWrite (ledpin2, låg), räknare = counter - 10; counter2 = countmax;} annat //what att göra när det finns en upptäckt {digitalWrite(ledpin,HIGH); digitalWrite(ledpin2,HIGH); counter = countmax; counter2 = counter2 - 10.}
seriella utdatarader för felsökning //Serial.print ("count:"); Serial.println(Counter); Serial.Print ("count2:"); Serial.println(counter2); Serial.println("---"); varna om någon av räknarna är över 0 men under den "countwarn" nivå om (counter > 0 & & räknare < countwarn || counter2 > 0 & & counter2 < countwarn) {digitalWrite (warnpin, hög);} annat {digitalWrite (warnpin, låg);}
Stäng av utdata om antingen counter sjunker under 0 //these inställningar för en "aktiv låg" relä. Byta "Hög" och låg för en aktiv hög utgången om (counter < 0) {digitalWrite (outputpin, hög), räknare = 0;} else om (counter2 < 0) {digitalWrite (outputpin, hög), counter2 = 0;} annat {digitalWrite (outputpin, låg);}
Delay(10); vänta tid (millisekunder) innan du går igen
}