Tic Tac Toe Spiel mit rgbs und Schaltern

Hallo!
Ich muss momentan in der Schule ein Projekt machen. Wir sollten erstmal etwas googeln, was uns so gefallen könnte. Ich habe mich für ein tic tac toe Spiel entschieden. Es gibt zwei Farben, rot und blau.

Mein momentaner Aufbau sieht so aus:
Ich habe erstmal zum Test eine rgb angeschlossen. Ich mache da später logischerweise ein tic tac toe Feld mit insgesamt 9 rgbs und für jede rgb einen Schalter daraus. Um die rgb erst dann anzuschalten wann ich es möchte habe ich einen Taster noch eingebaut.

Mein Programm funktioniert eigentlich gut, bis auf das die Farben gleichzeitig angeschaltet werden. Aber ich möchte logischerweise keine Farben mischen. Ich möchte aber, dass das Programm bei zum Beispiel einer ungeraden Anzahl rot und bei einer geraden Anzahl blau einschaltet. Mit Anzahl ist die Anzahl die der Schalter gedrückt wird gemeint. Also bei 1 mal soll es rot werden und bei 2 mal blau werden.
Was ich mir auch überlegt hatte war, dass ich im Programm sage, dass rot startet und dass dann die nächste rgb , die ausgewählt wird blau geschaltet wird. Da habe ich aber auch keinen Erfolg gehabt.

Vielleicht kann mir ja hier jemand helfen, bin auf dem Gebiet noch sehr unerfahren. Ich danke schonmal im Vorraus für alle Antworten.

LG

Programm_test_eine_RGB.ino (447 Bytes)

Hi

Code gerne in CODE-TAGs - im Editor der </>-Button.

int sensor = 30;
int led_1 = 31;
int led_2 = 32;

void setup() {
  // put your setup code here, to run once:
  pinMode (sensor, INPUT);
  pinMode (led_1, OUTPUT);
  pinMode (led_2, OUTPUT);
  digitalWrite (led_1, LOW);
  digitalWrite (led_2, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(sensor) == LOW) {
    digitalWrite (led_1, HIGH);
    if (digitalRead (sensor) == LOW) {
      digitalWrite (led_2, HIGH);
    }
  }
}

Du verwendest einen Arduino-MEGA?

Was denkst Du, passiert in Deinem Sketch - und warum passiert Das?

MfG

Ich würde WS2812 bzw Neopixel verwenden.
Da braucht man nur einen Ausgang um RGB zu leuchten.
Grüße Uwe

mit den ws2812b bist du sehr schnell am ziel
denn die streifen kannst du mit FastLED in Sets aufteilen ohne Physikalisch zu trennen
du kannst auch gleich LEDMatrix einsetzen dann wird es noch einfacher und optisch ansprechend
so als DEMO Mode

bmbbsr:
mit den ws2812b bist du sehr schnell am ziel
denn die streifen kannst du mit FastLED in Sets aufteilen ohne Physikalisch zu trennen
du kannst auch gleich LEDMatrix einsetzen dann wird es noch einfacher und optisch ansprechend
so als DEMO Mode

Dann ist es also für Profis nicht möglich, dem TO zu helfen, sein Problem mit den RGB's zu lösen, die er ja nun schon mal hat?
Er hat ja nicht danach gefragt, welche LED's er da besser nehmen soll, sondern wie er seinen Code zum laufen bringt, damit es mit den RGB's , die er da hat, funktioniert.
Und hier hat der TO sich ja auch die Mühe gemacht, und seinen Code Angehängt, mit dem er es Probiert hat.

Natürlich ist es wichtig, Anfänger auf besser geeignete Hardware hinzuweisen, wenn er sich da völlig vergriffen hat, aber das hat der TO sich hier ja nicht mit seinen RGB's.

@bmbbsr: ich weiss, dass Du ein grosser Fan der programierbaren WS2812b bist, und ich bin das ja auch, nur es muss ja nicht immer WS2812b sein, manchmal tun es auch normale RGB-LED's.

LG Stefan

Also machen wir mal eine Rechnung.
wenn man nur 2 Farben darstellen will/muß dann sind das 18 LED. bei RGB sind das 27 LED.
Ein ATmega auf dem Arduino kann unabhängig von der Größe nicht unendlich viel Strom an den Ausgängen liefern. Da der TO einen Arduno MEGA hat und somit einen ATmega2560.
Der kann laut Datenblatt am Spannungsversorgungspinns 200mA haben. Rechnen wir das auf die LEDanzahl um dann ergibt das ca 11mA bzw 7,4mA

Wenn man jedes LED betrachtet dann hat das 3 Zustände: Aus; Eine Farbe; Andere Farbe.
Eine Farbe kann nur eingesschaltet werden wenn:
Der entsprechende Taster gedrückt ist und wenn die Position des Spielsteins frei ist, sprich das LED an der stelle aus ist.
Jetzt weiß ich nicht wie der TO das mit den 2 Spielern realisieren wollte weil ja 2 Spieler jeweils ihre Farbe setzen möchten. 18 statt 9 Taster wäre eine Lösung. Automatisches bwechseln der Farbe eine andere Möglichkeit. Mit 2 weiteren Tastern die Farbe wählen und dann die Position mit den 9 Tastern eine dritte.

Der TO scheint Doppelklicks verwenden zu wollen. Dazu muß aber die Flanke erkannt werden, Entprellt werden und auch eine zeitliches Fenster verwendet werden.

Kurz und Lang drücken wäre auch einen Möglichkeit um die Farbe zu bestimmen.

Also bei 1 mal soll es rot werden und bei 2 mal blau werden.

Damit es nicht violett wird mußt Du rot abschalten wenn Du blau einschaltest.

Grüße Uwe

Hi

Denke - so einen Aufwand müssen wir nicht betreiben.
Die Farben werden abwechselnd gesetzt - also ist der nächste Taster, Der gedrückt wird, definitiv für die nächste Farbe.
Wenn Der erneut gedrückt wird (Prellen oder eben erneutes Drücken) macht Das gar Nichts - das Feld wurde soeben belegt - mehr als eine Farbe geht nicht -> Endprellen hier nicht nötig.
18 Pins dürfte der MEGA frei haben und mit jeweils 10mA blieben wir auch unter den erwähnten 200mA Gesamt.
Ob's überhaupt 10mA werden müssen, bräuchte einen Versuch - man will Das ja auch ohne Sonnenbrille spielen können wollen.

Ob man die Farbe, Die anfängt, auswählbar macht? Warum? Der erste Spieler bekommt Rot ... fertig.
(ok ok ... oder Blau ... aber dann immer!)

Danach wird 'nur noch' darauf gewartet, daß einer der 9 Taster Leben zeigt.
Wenn das Feld bereits gesetzt ist: Wir machen NIX
Sonst wird das Feld in der gerade anstehenden Farbe gesetzt.
Nachdem ein Feld gesetzt wurde, prüfen wir auch direkt, ob '3 in einer Reihe' sind - dann können wir das Spiel nämlich vorzeitig beenden - ggf. die drei Gewinner-Felder blinken lassen.

Wie das Spiel neu startet - ob über einen weiteren Taster, nach Zeit oder stur per Reset - bliebe noch sich auszudenken.

Denke: Machbar - der MEGA bietet genügend Pins und der Strom könnte auch ausreichend sein (MESSEN - wenn's raucht, issa hin).

Für Nano/Uno könnte man noch mit Port-Expandern spielen - auch, weil man dort sowohl die LED, wie den Taster an einem I/O verarzten kann - bzw. kann man Das eh.
Damit der Strom nicht Überhand nimmt, die leuchtenden LED nur einzeln aufleuchten lassen - 1/9tel Leuchtdauer (würde Das mit millis() aufziehen) und Es ist egal, wie viele LED wirklich leuchten - der Maximal-Strom bleibt nahezu identisch.

MfG

Warum 18 Taster? 3 für die Zeilen und 3 für die Spalten neben dem Spielfeld angeordnet, sollten doch auch ausreichen (entsprechende Programmierung vorausgesetzt)

Hi

Klar geht Das auch - etwas Intelligenz integriert wird die letzte LED schon gesetzt, bevor man den 2.ten Taster betätigt hat.
... bin davon ausgegangen, daß beleuchtete Taster genommen würden ... aber ja, eher unwahrscheinlich, wenn man die LED selber verlötet - Das wird kaum in einen dann noch bedienbaren Taster passen :wink:

Also 6 Taster, 3x Zeile, 3x Spalte - geht genauso.
Auch hier ist, meiner Meinung nach, kein Endprellen in dem Sinne nötig - die erste Erkennung verweist auf die Zeile/Spalte, die zweite Erkennung dann auf den Gegenpart. (also 2x Zeile muß man ausschließen)
Wenn der 2.te Tastendruck klar ist (die Zeile hat nur noch eine freie Stelle), muß natürlich entsprechend gewartet werden, daß der Spieler nicht doch noch den 2.ten Taster drückt und Das dann für den Gegenspieler gewertet wird.
Vll. doch die Intelligenz weg lassen und der Spieler MUSS 2 Taster betätigen.

MfG