Stap 11: Bewegingsdetectie
Deze stap wordt beschreven hoe de controller bepaalt wat voor soort beweging gebeurt. Door middel van testen, werd bepaald dat, als referenced uit de ruststand, dit is het patroon dat de motie van de controller volgt. (G = groter, L = minder, S = hetzelfde)
Ideaal: 497, 510, 627
Rechts 611, 492, 521... G, S, L
Links 408, 496, 530... L, S, L
Doorsturen van 512, 598, 526... S, G, L
Omgekeerde 514, 395, 536... S, L, L
Wat dit zegt is dat, bijvoorbeeld in volgorde voor te beweging naar rechts, de X lezing moet er meer dan stationair, de Y-lezing moet worden over dezelfde, en de Z lezen moet minder dan inactief zijn. Dezelfde soort logica volgt voor de andere soorten van beweging. In de volgende code gebruikt de instructie switch/case eenvoudige logica om te bepalen van de ontwerpresolutie. Het standaardhoofdlettergebruik is een "fout" verklaren en niet verzenden een motie als om wat voor reden de versnellingsmeter wordt niet gedetecteerd of verloren.
Case 0:
LCD.Clear(); lcd.setCursor(0,0);
LCD.Print("Move"); lcd.setCursor (0, 1);
Als (xRaw > idleX & & yRaw > idleminY & & yRaw < idlemaxY & & zRaw < idleZ) {}
LCD.Print("right");
}
else if (xRaw < idleX & & yRaw > idleminY & & yRaw < idlemaxY & & zRaw < idleZ) {}
LCD.Print("left");
}
anders als (xRaw > idleminX & & xRaw < idlemaxX & & yRaw > idleY & & zRaw < idleZ) {}
LCD.Print("Forward");
}
anders als (xRaw > idleminX & & xRaw < idlemaxX & & yRaw < idleY & & zRaw < idleZ) {}
LCD.Print("reverse");
}
else {}
LCD.Print("idle");
}