Stap 4: De Code
U bent ofwel twee soorten mensen:
1. coders die eigenlijk willen begrijpen van de code.
2. mensen die niet een lik van codering en gewoon weten wilt het ruwe bronbestand.
Goed nieuws voor je, deze pagina omvat zowel!
Houd er rekening mee dat deze code onder de GPL v3 licentie.
Dus voor degenen onder u die wil gewoon het ruwe bronbestand, is het op Github:
** Maar voordat u klikt op die link, neem dan scroll naar beneden en lees de code settings.* *
Voor degenen onder u die willen begrijpen van de code, Bedankt voor het waarderen van de tijd bracht ik het schrijven! Laten we springen rechts in:
We moeten eerst deze drie bibliotheken omvatten. Wat de laatste twee zijn in de war? That's alright. Ze verscheen in de eerdere naaien tutorial die ik heb gekoppeld. Als u al hoe u Arduino bibliotheken toevoegt aan de IDE weet, echter is hier de directe link naar de Github Repositories:
Volgende die ik ga over de functies die ik gebruik in de code:
Flash flitsen beide LED's samen.
alternatieve wisselt beide LED's.
beide LED's knipperen knippert zodra.
toDegrees zet een paar x en y magnetische lezingen in een kop in graden.
procent neemt twee getallen en zorgt voor een procent met de eerste als 100% en de tweede als de breuk.
CODE-INSTELLINGEN ***
turnTime is de hoeveelheid tijd die u een inschatting maken dat het de gebruiker om te zetten in milliseconden zou duren. Bijvoorbeeld, kon u de turnTime om te helpen leren gekoppelde bochten vs. de beurt tijd verlengen om ruimte voor uitleg over ski vorm tussen de bochten te laten verminderen.
vertraging is in wezen hoeveel u wilt dat de gebruiker te vertragen aan het einde van elke beurt. Bijvoorbeeld, de waarde instelt op 2 wordt ervan uitgegaan dat de gebruiker zal hun snelheid alvorens halveren. Als u de gebruiker om te gaan in een geleidelijke pizza zijn onderwijs, wilt mogelijk verminderen de waarde laten we zeggen 1.3 zodat de gebruiker moet hun snelheid verminderen met 1/4 alvorens.
maxLearnCount is een aantal bochten die het apparaat gebruikt om te leren van de cursus voordat u begint te vertellen van de gebruiker waar skiën met de LED's. Dit is handig als een heuvel randen met verschillende lengtes heeft en u wilt krijgen van de gemiddelde tijd die nodig is om over te steken die verschillende lengtes.
skiPercent is het percentage van de tijd die u het apparaat wilt moet worden gewacht voordat het vertellen van de gebruiker te vertragen. Bijvoorbeeld, voorziet draaien het percentage van geleidelijker bochten, overwegende dat het tegenovergestelde meestal meer abrupt verandert.
readyTime is de algemene hoeveelheid tijd die u denk dat het duurt dat om in en uit de lift in milliseconden.
Nu laten we het initialiseren van de versnellingsmeter:
Daarna gaan we via de code van de verzoekinstellingen. Er zijn twee delen.
1. het initialiseren van de LED's op de jas.
2. Laad de versnellingsmeter. Als dit mislukt, alternatieve gewoon de LED's om te laten zien van mislukking.
Nu voor de verschillende variabelen.
learnCount wordt gebruikt om bij te houden hoeveel bochten het apparaat heeft doorgebracht leren, stoppen zodra het maximumbedrag van leren bochten set bovenstaande bereikt.
lastTurn wordt gebruikt om te herinneren de laatste keer een beurt is opgetreden, waardoor de meting van de tijd van een bocht.
lastDir wordt gebruikt om de algemene algemene richting van de gebruiker.
lastAcc wordt gebruikt om de algemene totale versnelling van de gebruiker.
dir is een matrix waarin de twee voorgestelde richtingen van elke beurt.
dirTime is de gemiddelde tijd die nodig is voor de gebruiker naar het Kruis de trail.
currentDir wordt gebruikt voor het bijhouden van welke richting de gebruiker zou moeten gaan in.
liftMode wordt gebruikt voor het opslaan van de batterij wanneer omhoog een lift of "magic carpet".
Tot slot, de loop code. Er zijn verschillende onderdelen:
1. Lees/gemiddelde gegevens van de versnellingsmeter.
De code neemt vijf lezingen en gemiddelden hen uit voor betere nauwkeurigheid.
Er zijn 3 belangrijke variabelen hier:
magAvg is de richting die de gebruiker wordt geconfronteerd in graden. Dit wordt gebruikt om te helpen de gebruiker.
accAvg is de totale versnelling van de x en y van de gebruiker. Dit wordt gebruikt om te ontdekken wanneer de gebruiker vertraagt.
liftAvg is de totale z versnelling van de gebruiker. Dit wordt gebruikt om op te sporen "lift" beweging (naar boven)
2. Controleer de gebruiker is skiën van de berg, heeft overschreden het bedrag van de maximale leren bochten (maxLearnCount) zoals hierboven als is skiën afdaling.
3. weten wat we weten, Controleer eerst als de gebruiker klaar is met het een draai gebaseerd op hoe lang het duurde om over te steken van de berg in het leerproces, vandaar de dirTime variabele. Overgebracht naar de andere turn en vertraging gebaseerd op hoe lang wij tijd tussen bochten vinden, vandaar de turnTime variabele.
4. als we niet het draaien fase nog niet, check bereikt als wij de gebruiker vertellen moeten te vertragen nadat een bepaalde tijd gebaseerd op wanneer de gebruiker starten moet, stoppen, vandaar de skiPercent variabele ingesteld boven. Als niet, dan moeten we de gebruiker leiden in welke richting moeten ze gaan. Aangezien niemand perfect is, geven we hen 10 graden vertraging aan beide zijden.
5. de enige optie links is over wat er gebeurt dat we de tijd om te vertellen van de gebruiker te vertragen hebben bereikt. We doen dit door afwisselend de lichten heen en weer totdat de gebruiker de draaien fase heeft bereikt.
6. deze instructie else is in betrekking tot dat als de gebruiker gaat bergaf, betekenis die gebruiker moet gaan omhoog op dit punt, dus we de gebruiker in de lift-modus zetten zodat we kunnen batterij besparen en vervolgens vertragen zodat de gebruiker tijd heeft om naar de lift/Indus-land.
7. deze instructie else is in betrekking tot als de gebruiker uit het verleden leren modus, wat betekent dat de gebruiker zijn moet in het leren van modus op dit punt. Dit is belangrijk omdat als de gebruiker neemt hun eerste leren schakelen, we willen niet te verknoeien de dirTime variabele, omdat uiteraard hun eerste trek over de trail duurt langer omdat zij snelheid winnen. Met dat controleren we eerst om ervoor te zorgen dat dit is niet de 1e opname van gegevens, omdat dat betekenen zou dat wij vorige gegevens voort te bouwen op zou niet moeten. Volgende we gemiddeld uit de richting van de gebruiker met hun verleden richting zo kunnen we een nauwkeurige lezing over waar we de gebruiker willen te gaan na het leren van de modus voor deze bijzondere wending.
8. om het detecteren van bochten, wachten we tot de gebruiker vergieten af snelheid tot het punt begint dat we willen dat ze, vandaar de vertraging variabele set hierboven. Toen we de richting die de gebruiker heeft al als 1 van de 2 voorgestelde richtingen die wij willen de gebruiker te gaan inch zal toewijzen (We hebben een voorgestelde richting om links te gaan over de berg en een andere voor naar rechts over). Wij moeten ook vastleggen van de hoeveelheid tijd die nodig was om de berg kruis en schrijven dat aan de variabele dirTime .
9. deze instructie else is in betrekking tot als dit de eerste registratie van de gegevens, wat betekent dat het is, zodat we gewoon de huidige gegevens aan hun respectieve variabelen toewijzen zodat op de next-lus kunnen we beginnen met het gemiddelde van de gegevens.
10. deze instructie else is in betrekking tot als de gebruiker in de lift-modus, wat betekent dat ze. Om op te slaan batterij, controleren we net voor de neerwaartse beweging slechts eenmaal per seconde en flash die de LED's om aan te geven aan de gebruiker we nog steeds in de lift-modus zijn.
11. door het uitstellen van 50 milliseconden, we niet overbelasting van de code en opslaan van de batterij, omdat zelfs bij het controleren van lezingen elke 50 milliseconden, dat komt neer op het lezen van gegevens 20 keer per seconde.