Arduino King Cobra spel (5 / 5 steg)
Steg 5: Cobra kod (inte Python) HAH!
Här är den Arduino kod som jag kör. Det är en ändring av deras Ping ultrasonic sensor provet.Justera variabeln "numReadings" till ett högre värde kommer att resultera i mindre bullriga avläsningar, men också en större eftersläpning i reaktionstid.
Njut!
Kopiera härifrån...
#include < Servo.h >
Servo myservo; skapa objekt för att styra en servo servo
int val; utbud-mappade värdet för servo kontroll
CONST int pingPin = 7. Parallax ping sensor signal stift
CONST int numReadings = 5; högre till smidig mer, orsakar också mer latens
int avläsningar [numReadings]; avläsningar från analog ingång
heltal index = 0; index för den aktuella behandlingen
int totala = 0; den löpande summan
int medelvärde = 0; Genomsnittligt
int lastValue = 0;
void setup() {
initiera seriell kommunikation:
Serial.BEGIN(9600);
myservo.attach(9); tillmäter objektet servo servo på pin 9
Rensa utjämning värde bufferten
för (int thisReading = 0; thisReading < numReadings; thisReading ++)
avläsningar [thisReading] = 0;
}
void loop()
{
fastställa variabler för varaktigheten av ping,
och avstånd resultatet i tum och centimeter:
lång varaktighet, tum, cm;
int fadeValue = 0;
PING))) utlöses av en hög puls av 2 eller fler mikrosekunder.
Ge en kort låg puls förhand för att säkerställa en ren hög puls:
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
Samma PIN-koden används för att läsa signalen från PING))): en hög
puls vars längd är tid (i mikrosekunder) från den sändande
ping till mottagning av dess eko av ett objekt.
pinMode (pingPin, ingång);
längd = pulseIn (pingPin, hög);
konvertera tiden till ett avstånd
tum = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
jämna ut koden börjar här
subtrahera den sista behandlingen:
totalt = totalt - avläsningar [index];
Läs från sensorn:
avläsningar [index] = cm;//analogRead(inputPin);
Lägg till läsningen av totala:
totalt = totalt + avläsningar [index];
avancera till nästa position i matrisen:
index = index + 1.
om vi är i slutet av kedjan...
om (index > = numReadings)
.. .wrap runt till början:
index = 0;
beräkna medelvärdet:
genomsnittliga = totalt / numReadings;
jämna ut kod slutar här
mappa om-intervallet och flytta servo
Val = genomsnittet.
Val = karta (val, 10, 40, 0, 179); skalvärdet att använda det med torn Pro halva tur analoga servo (värde mellan 0 och 180)
IF(Average < 25)
{myservo.write(val);} anger servo skalad värde om inom ett visst avstånd
Delay(10); Låt svalna servo nedåt eller något
}
lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds)
{
Ljudets hastighet är 340 m/s eller 29 mikrosekunder per centimeter.
Ping reser ut och tillbaka, så för att hitta distansera av den
objekt vi tar hälften av den tillryggalagda.
återvända mikrosekunder / 29 / 2;
}
Här...