Ein Schiedsrichtertisch für Tischtennis mit 74HC595 und 74HC165

Aehm. das geht nicht.
Es gibt nur 2 Varianten.
Entweder die LED leuchtet bei HI oder bei LOW.
Im #219 hab ich das bit auf 0 gesetzt, was leuchten soll. Das heisst, dass jedes Digit EINZELN leuchten musste.

Eigentlich war das auch so gedacht in #237 - aber die 4 bool Werte waren da noch falsch rum.

Der hier macht also genau das sebe, nur ist die Richtung anders rum

void printToOpto()
{
  constexpr byte chips {7};
  constexpr byte laenge {chips * 8};
  bool optoPins[laenge] {0};  // Zwischenspeicher komplette Register
  //
  bool *spielerAeiner = &optoPins[0];    // Die Reihenfolge stimmt, aber die Richtung ???
  //bool *spielerAzehner = &optoPins[7];
  bool *spielerASatz = &optoPins[8];
  //bool *aufschlagA = &optoPins[15];
  bool *spielerBeiner = &optoPins[16];
  //bool *spielerBzehner = &optoPins[23];
  bool *spielerBSatz = &optoPins[24];
  //bool *aufschlagB = &optoPins[31];
  bool *timeMinuteEiner = &optoPins[32];
  bool *timeSekundeZehner = &optoPins[40];
  bool *timeSekundeEiner = &optoPins[48];
  //
  memset(optoPins, 0, laenge);
  memcpy(spielerAeiner, dec[spieler[0].points % 10], 7);
  optoPins[7] = !spieler[0].points / 10;
  optoPins[15] = !spieler[0].aufschlag ;
  memcpy(spielerASatz, dec[spieler[0].sets % 10], 7);
  memcpy(spielerBeiner, dec[spieler[1].points % 10], 7);
  optoPins[23] = !spieler[1].points / 10;
  optoPins[31] = !spieler[1].aufschlag;
  memcpy(spielerBSatz, dec[spieler[1].sets % 10], 7);
  memcpy(timeMinuteEiner, dec[zeit.minute % 10], 7);
  memcpy(timeSekundeZehner, dec[zeit.sekunde / 10], 7);
  memcpy(timeSekundeEiner, dec[zeit.sekunde % 10], 7);
  bool out[laenge] {0};
  for (byte b = 0; b < laenge; b++)
  { out[b] = optoPins[laenge - b]; }
  printSegment(2, out, laenge);
}

Ich bin jetzt auch grade etwas überfragt....

Dein Testprogramm wo Ich die Optokoppler zuordnen sollte hat tadelloß funktioniert

Grade nochmal getestet

 bool *spielerAeiner = &optoPins[0];    // Die Reihenfolge stimmt, aber die Richtung ???
  //bool *spielerAzehner = &optoPins[7];
  bool *spielerASatz = &optoPins[8];
  //bool *aufschlagA = &optoPins[15];
  bool *spielerBeiner = &optoPins[16];
  //bool *spielerBzehner = &optoPins[23];
  bool *spielerBSatz = &optoPins[24];
  //bool *aufschlagB = &optoPins[31];
  bool *timeMinuteEiner = &optoPins[32];
  bool *timeSekundeZehner = &optoPins[40];
  bool *timeSekundeEiner = &optoPins[48];

Sind die OptoPins nicht verkehrtherum?

Ok, dann warte.
Ich versuche mal irgedwas auf den Anzeigen zu projizieren...

Darum:

Der dreht den kompletten Inhalt um. - aber egal. Ich probier das nochmal.

Meinst du vom Timer?

den die anderen Taster ( + - Reset )funktionieren auf den 7 Segment Anzeigen,

Auf den Anzeigen sind wir gestern durch.
Für die Optokoppler gilt:
Der Inhalt ist der gleiche. Die Ansteuerung ist eine andere

Ja okay wollte nur sicher gehen.

Sind wir vielleicht auf dem Bus von dem Timer gelandet anstelle von den Optokoppler?
Nur eine Idee?

So, neuer Versuch.
Es muss jedes Segment einzeln leuchten.
Parallel wid die ID auf dem SerMon ausgegeben.
Ich will wissen, welche ID's die aufschläge haben.

#include "tt.h"

/*
   Großanzeige
   Spieler A:
   spiel: Chip 1 Einer / Auf welchem Chip ist BC
   satz: Chip 2
   Aufschlag:
   Spieler B:
   spiel: Chip 3 Einer / Chip ? BC
   satz: Chip 4
   Aufschlag:
   Zeit: Chip 5 - Einer / Chip 6 - Zehner / Chip 7 - Hunderter
*/

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Tischtennis Display"));
  //display init
  for (byte b = 0; b < displays; b++)
  {
    pinMode(regpin[b].clock, OUTPUT);
    pinMode(regpin[b].data, OUTPUT);
    pinMode(regpin[b].latch, OUTPUT);
    digitalWrite(regpin[b].clock, LOW);
    digitalWrite(regpin[b].data, LOW);
    digitalWrite(regpin[b].latch, LOW);
  };
  pinMode(keypad.clock, OUTPUT);
  pinMode(keypad.data, INPUT);
  pinMode(keypad.latch, OUTPUT);
  digitalWrite(keypad.clock, LOW);
  digitalWrite(keypad.latch, LOW);
//  segmentTest();
  allNew();
}

void loop()
{
  optoTest();
}


void optoTest()
{
  constexpr byte chips {7};
  constexpr byte laenge {chips * 8};
  bool allPins[laenge] {0};
  for (byte b = 0; b < chips * 8; b++)
  {
    memset(allPins, 1, laenge);
    allPins[b] = 0;
    Serial.print(F("Ausgabe auf PIN-ID: "));
    Serial.println(b);
    printSegment(2, allPins, laenge);
    delay(200);
  }
}

Du sprichts definitiv die Anzeige vom Timer an

Mach ne 1 draus, wo jetzt die 2 ist.

Nicht böse sein, aber Ich muss ins Bett.

Morgen habe Ich mehr Zeit

Gute Nacht

Nu denn.
Damit ist aber das Fertigstellungs-Timing erledigt.

Jetzt laufen die Optokoppler

Hat bei sieben angefangen

Daher sagte Ich auch vorhin mit der Reihenfolge der Optopins nicht stimmen würde

Und wo ist der scheiss Aufschlagpunkt für A und B - das ist mein Bezugspunkt. Den Rest bekomme ich hin.
Ich brauche das, was Dir auf dem Sermon ausgegeben wird.

Vielleicht auf GPIO18/42 oder hab ich da eine Änderung nicht mitbekommen?

Ok - geh schlafen.
Ich hab auch einen schweren Tag hinter und einen solchen vor mir.
Mein Messengerdienst hat ein Backup eingespielt nachdem die Schlüssel erneuert wurden;
Ich habe ganz andere Probleme als darauf zu warten, dass Du mir einfach das machst was ich brauche.

Schluß für heute - und morgen gibts Du mir die ID die Dir auf dem Seriellen Monitor angezeigt wird, wenn die Aufschlagpunkte leuchten.

Mahlzeit

Angabe Spieler A ist 24
Angabe Spieler B ist 40

Sag ich doch. Wenn man jetzt genau hinsieht, passt das nämlich nicht:

Dann versuch ich mal das jetzt passend zu machen.
Hab ja grad den Cocktailmaker fertig :wink: