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. Head of IT (m/w/d) Führendes Unternehmen in der Herstellung und dem Handel von Ingredients ... (m/w/d)
    TOPOS Personalberatung Hamburg, Raum Hamburg
  2. DB-Programmierer*in (m/w/d)
    Universitätsmedizin der Johannes Gutenberg-Universität Mainz, Mainz
Detailsuche

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

Golem Akademie
  1. Data Engineering mit Apache Spark: virtueller Zwei-Tage-Workshop
    25.–26. April 2022, Virtuell
  2. Netzwerktechnik Kompaktkurs: virtueller Fünf-Tage-Workshop
    14.–18. Februar 2022, virtuell
Weitere IT-Trainings

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.  


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...



Aktuell auf der Startseite von Golem.de
Lego Star Wars UCS AT-AT aufgebaut
"Das ist kein Mond, das ist ein Lego-Modell"

Ganz wie der Imperator es wünscht: Der Lego UCS AT-AT ist riesig und imposant - und eines der besten Star-Wars-Modelle aus Klemmbausteinen.
Ein Praxistest von Oliver Nickel

Lego Star Wars UCS AT-AT aufgebaut: Das ist kein Mond, das ist ein Lego-Modell
Artikel
  1. Kryptowährung im Fall: Bitcoin legt rasante Talfahrt hin
    Kryptowährung im Fall
    Bitcoin legt rasante Talfahrt hin

    Am Samstag setzte sich der Absturz des Bitcoin fort. Ein Bitcoin ist nur noch 34.200 US-Dollar wert. Auch andere Kryptowährungen machen Verluste.

  2. eStream: Airstream-Wohnwagen mit eigenem Elektroantrieb
    eStream
    Airstream-Wohnwagen mit eigenem Elektroantrieb

    Der Wohnwagen Airstream eStream besitzt einen eigenen Elektroantrieb nebst Akku. Das entlastet das Zugfahrzeug und eröffnet weitere Möglichkeiten.

  3. Andromeda: Dieses Microsoft-Smartphone-Betriebssystem erschien nie
    Andromeda
    Dieses Microsoft-Smartphone-Betriebssystem erschien nie

    Erstmals ist ein Blick auf Andromeda möglich - das Smartphone-Betriebssystem, das Microsoft bereits vor einigen Jahren eingestellt hat.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Corsair Vengeance RGB RT 16-GB-Kit DDR4-4000 120,95€ • Alternate (u.a. AKRacing Master Pro Deluxe 449,98€) • Seagate FireCuda 530 1 TB (PS5) 189,90€ • RTX 3070 989€ • The A500 Mini 189,90€ • Intel Core i9 3.7 459,50€ • RX 6700 12GB 869€ • MindStar (u.a. 1TB SSD 69€) [Werbung]
    •  /