• IT-Karriere:
  • Services:

Die Regeln umsetzen

Um festzustellen, wann einmal alle LEDs reihum geleuchtet haben, benötige ich einen Zähler (counter), der jedes Mal, wenn in der gewählten Richtung die exakt nächste LED leuchtet, um 1 erhöht wird. In allen anderen Fällen wird der Zähler wieder auf 0 gesetzt, so dass das Zählen von Neuem beginnt. In diesem Fall muss auch jedes Mal festgestellt werden, welche Richtung der Spieler gewählt hat. Da ich die aktuelle Position in pos speichere, muss ich dazu lediglich prüfen, ob die Position der nächsten gewählten LED 1 größer oder 1 kleiner als die aktuelle Position ist. Dazu gibt es eine zweite Variable (oldPos), die am Ende der Hauptschleife und damit kurz vor der Ermittlung der nächsten Position die aktuelle Position kopiert bekommt. Die gewählte Richtung wird in selectedDirection gespeichert.

  1. if (counter == 0) {
  2. if (pos > oldPos) {
  3. selectedDirection = 1;
  4. } else {
  5. selectedDirection = -1;
  6. }
  7. }

Stellenmarkt
  1. RMG Messtechnik GmbH, Beindersheim (Raum Mannheim)
  2. Bundesrechnungshof, Bonn

Mit diesen Variablen gerüstet, geht es an die Auswertung. Zuerst wird geprüft, ob sich die LED überhaupt geändert hat, denn wenn nicht, macht alle weitere Auswertung keinen Sinn. Anschließend kommt die zentrale Abfrage des Spiels: Durch die Wahl von 1 und -1 für das Merken der Richtung kann ich den Wert direkt zur alten Position addieren, um durch die so berechnete Position zu prüfen, ob es noch in die richtige Richtung geht. Trotzdem gibt es ein Problem, denn wenn die Richtung im Uhrzeigersinn verläuft, kommt nach der Position 9 wieder die 0, und im Gegenuhrzeigersinn kommt nach 0 die 9. Dieses Problem wird mit den beiden Oder-Zweigen des inneren if gelöst.

Bleibt noch die mysteriöse Abfrage, ob length kleiner als 2 ist. Das ist - sozusagen - der Schwierigkeitsgrad. Denn length ist die Länge der Hypothenuse des Dreiecks, welches von X und Y bestimmt wird. Damit ist es möglich, die Neigung zu bestimmen. Vermutlich hätte ich auch den entsprechenden Winkel berechnen können, aber bei den ersten Experimenten habe ich nicht weiter darüber nachgedacht, und so geht es auch. Je größer length ist, um so mehr ist das Board geneigt.

  1. if (pos != oldPos) {
  2. if (((pos == oldPos + selectedDirection ||
  3. (oldPos + selectedDirection == 10 && pos == 0) ||
  4. (oldPos + selectedDirection == -1 && pos == 9))) &&
  5. (length < 2)) {
  6. counter = counter + 1;
  7. if (counter == 10) {
  8. CircuitPlayground.playTone(440, 100);
  9. rainBowEffect();
  10. counter = 0;
  11. }
  12. } else {
  13. CircuitPlayground.playTone(30, 25);
  14. counter = 0;
  15. }
  16. }

Strom sparen

Um bei Nichtgebrauch etwas Strom zu sparen, habe ich noch den Schalter abgefragt:

  1. if (CircuitPlayground.slideSwitch()) {}

Allerdings hat das nahezu nichts gebracht. Der Stromverbrauch hat sich maximal um 1 mA geändert, er ist bei etwa 12 mA geblieben; darum hätte ich die Abfrage auch weglassen können. Das ist ja auch logisch, denn dadurch, das ich einen Programmzweig weglasse, läuft ja immer noch irgendeine Systemschleife, das Board und die Sensoren werden trotzdem mit Strom versorgt, und lediglich der Lautsprecher und die LEDs werden nicht mehr angesteuert. Trotzdem kann die Abfrage in anderen Programmen nützlich sein, denn ein maximal heller Neopixel verbraucht bis 60 mA - je 20 mA pro Farbe. Macht bei allen zehn mehr als ein halbes Ampere.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Etwas TrigonometrieFazit - Noch verpacken und fertig 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8.  


Anzeige
Spiele-Angebote
  1. 19,49€
  2. 34,99€
  3. 25,99€

erlkoenig 19. Sep 2018

Man könnte den Slide Switch Eingang als Interrupt konfigurieren, und den Prozessor bei...

FrankGallagher 18. Sep 2018

Hast du falsch verstanden. Druckempfindlich nennt man resistive Flächen, kapazitive...

Eheran 18. Sep 2018

Ich habe noch nie einen Megacontroller programmiert. Wie groß sind die? Meine winzigen...


Folgen Sie uns
       


    •  /