Stap 3: De Code
Ik ben niet groot op het delen van mijn code, gewoon omdat het voor mijn setup is gepersonaliseerd en waarschijnlijk geen gebruik voor u en uw unieke opstelling heeft. Wilt u mijn code, verstuur me bij cgmalantonio en ik stuur u graag een kopie. Ik zal echter mijn werk in pseudo-code beschrijven zodat je het idee krijgt.Laat het krijgen!
Ik wilde eerst een functie die de ultrasone sensor gebruiken zou om lezingen terwijl de servomotor draaide op 5 verschillende punten:
(0 = links / / 45 = Front left / / 90 = voorkant / / 135 = Front rechts / / 180 = rechts)
Scan {}
Ik gebruikte een eenvoudige for-lus te verplaatsen van de servo in stappen van 45, van 0 tot 180 (en een ander om het te brengen terug naar 0). Telkens wanneer het haar volgende punt het mijn "LowestNumber"-functie wordt opgeroepen en wordt de waarde ontvangen toegevoegd aan een array voor de 5 waarden bereikt ontvangen (rechts / links-front / front / recht-front / links).
zoiets als dit:
voor (int i = 0; ik < 180; i = i + 45) {}
myservo.write(i);
LowestNumber();
}
voor (int i = 180; ik > 0; i = i - 45) {}
myservo.write(i);
LowestNumber();
}
De LowestNumber-functie neemt in 3 lezingen, verdeelde 50 milliseconden uit elkaar, van de ultrasone sensor. De 3 lezingen worden vervolgens vergeleken tegen elkaar, en de laagste waarde (dichtst lezing) is geaccepteerd en wordt opgeslagen in een variabele (LowestNumberResult). Dit nummer wordt vervolgens opgeslagen in een matrix op basis van waar de servo is geplaatst. De ultrasone sensor is soms een beetje onvoorspelbaar dus ik graag 3 keer controleren. En gezien dat ik ben alleen bezorgd over het raken van iets, ik blijf het laagste getal.
Pak uw laagste nummer
een ultrasone =. Ranging(Inc)
delay(50)
b = ultrasone. Ranging(Inc)
delay(50)
c = ultrasone. Ranging(Inc)
Delay(50)
als (een > b).
een = b
Als (een > c)
een = c
Zodra alle 5 posities van de servomotor hebt verzameld een afstand van de ultrasone sensor, moeten we dan correct worden verwerkt door de posities.
}
Nu weten we de afstanden voor de locatie van de RIEM. We beginnen met het uitzoeken welke richting de grootste afstand is en als aan bepaalde voorwaarden wordt voldaan, gaan we in die richting.
Handvat {}
Aantal beperkingen waren als zodanig:
-alle richtingen groter zijn dan 20 inch
Maak zeker alle paden zijn duidelijk kan worden een aantal,
hoeft niet te worden 20 inch
-Als verst richting kleiner is dan de voorste positie + 10 inch (een aantal), vooruitgaan
gunste van de voorste richting betekent dat het gewoon niet weer
rond in cirkels in het midden van uw kamer
Ik voegde uiteindelijk een tweede verklaring, net als dit,
Als de voorkant duidelijk genoeg, ga naar voren tweemaal was te zeggen
-Als verst richting links, controleert u of linker voorpand is duidelijk
-Als niet duidelijk selectievakje rechts
-Als verst richting klopt, controleert u of rechter voorpand is duidelijk
-Als niet duidelijk selectievakje links
-Als verst richting wordt gelaten voorzijde, zorg ervoor dat links is duidelijk
-Als niet duidelijk selectievakje rechts
-Als verst richting rechts voor, maak zeker gelijk duidelijk is
-Als niet duidelijk selectievakje links
-Als alle richtingen zijn minder dan 20 we willen de OAR omdraaien en proberen nieuwe metingen
}
Extra {}
Ik heb sommige extra functies toegevoegd voor mijn 5 positieschakelaar.
Inschakelen
Wachten op invoer van
-Als u de OAR vanaf de voorkant te dicht nadert, het zal een back-up en schud haar hoofd terug en vierde
-Als u op een richting, het gaan in die richting
Klik op Centreren
-Start van een query, input 8 richtingen en het rijden in deze richtingen
Klik op opnieuw centreren
-rijdt autonoom en vermijdt muren/objecten
Center Klik een derde keer retourneert menu te beginnen
evenals sommige hoofd bochten van de servo wanneer een richting wordt geplukt (alsof de OAR waar onderzoekt its gonna zetten)
}