Register ist voll belegt.
Fast alle
Register ist voll belegt.
Fast alle
Wir werden es auflösen
Jetzt habe Ich aber viele Fehler
redefinition!
Ja, Du hast den alten Teil nicht gelöscht.
Zurück auf Anfang.
Mach einen neuen leeren Sketch auf.
Mach einen neuen TAB auf. Speichere den als tt.h
kopiere den Inhalt da rein.
Gehe in den Sketch-TAB und lösche den kompletten Inhalt.
Kopiere den zweiten Teil da rein.
kompiliere.
Du hast das Feld von hinten aufgerollt
Digit 0 = Bank 7
Digit 1 = Bank 6
Digit 2 = Bank 5
Digit 3 = Bank 4
Digit 4 = Bank 3
Digit 5 = Bank 2
Digit 6 = Bank 1
Dann ist das schick.
Dann erzähl mal, was auf den Bänken drauf ist.
Bank 1 müsste der Spielstand Einer/A sein?
Ich bin zu blöd um zu verstehen, was Du mir sagen willst.
Und da ist auch der GPIO als Angabepin, der ja so nicht mehr existiert.
Aufgabe: Gib mir etwas, woraus ich sehe an welchen Pins der Register ich was sehe.
Fang mit Register 1 - Pin 1 an.
(Dabei gehe ich zu Deinen Gunsten davon aus, dass der letzte Pin je Chip Nummer 8 ist)
Die beiden GPIO bitte Ignorieren!!!!
Auf dem Zettel.
Relay Karte
1 PC817(so heißt die Karte wo Ich die gekauft habe?) Kanal 1 ist Digit6 Pin1
1 Kanal 2 Pin2
Und so zieht es sich kronologisch durch
Es sind die 7 Segment Anzeigen von meinem Tisch.
Ich hoffe Ich habe es gut genug erklärt, ansonsten schreibe Ich es komplett aus
Register 1 | Register 2 | Register 3 | Register 4 | Register 5 | Regsiter 6 | Register 7
12345678 12345678 12345678 12345678 12345678 12345678 12345678
abcdefga bcdefgab cdefgabc defgabcd efgabcde fgabcdef gabcdefg
# # # # # # # #
Das würde bedeuten, dass Du mit 7 Register 8 Digits darstellen kannst.
Es fehlt der Aufschlag.
Spieler B | Spieler A | Timer | ||||
---|---|---|---|---|---|---|
Punkte | Sätze | Punkte | Sätze | einer | zehner | hunderter |
Register 7 | Register 6 | Register 5 | Register 4 | Register 3 | Register 2 | Register 1 |
12345678 | 12345678 | 12345678 | 12345678 | 1234567 | 1234567 | 1234567 |
abcdefg(bc) | abcdefg Aufschlag | abcdefg(bc) | abcdefg Aufschlag | abcdefg | abcdefg | abcdefg |
Jetzt kommt langsam Dämmerung.
Register 7 - PIN 8 bedient 2 Segmente um damit eine 1 darzustellen.
Register 6 - PIN 8 bedient den Aufschlagpunkt.
Register 5/4 dementsprechend.
Mensch war das eine Geburt...
Jawohl ja
Boah....
Ich häng hier noch am Getränkeautomat/Cocktailmaker.
Dann was essen.
Ich denk mal in 30 Minuten gehts weiter. Also auch Zeit fr Dich
Okay
So.
Der ausgelagerte Tab bleibt wie er ist.
Der Haupt-Tab bekommt das hier.
Und jetzt wird es vermutlich genau falsch rum sein....
#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();
optoTest();
allNew();
}
void loop()
{
getKeys(); // Holt Tastenzustände
checkKeys(); // wertet Tasten aus
displaySpieler();
printToOpto();
}
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);
printSegment(2, optoPins, laenge);
}
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;
printSegment(2, allPins, laenge);
delay(100);
}
}
Alle Optokoppler sind auf High bis auf 6 da sind alle Low
Wenn Ich taster drücke Zählen die 7 segment Anzeigen aber keine Optokoppler.
Drücke Ich Aufschlag a geht von dem Timer der einer A weg
Ich denke das du die Optokoppler invertieren must, da ja an den 7 Segment Anzeigen ein High signal aus bedeutet, oder?
oh, das macht das natürlich nochmal aufwendiger, aber geht....
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);
for (byte b = 0; b < laenge; b++)
{ optoPins[b] = !optoPins[b]; }
printSegment(2, optoPins, laenge);
}
Und hier die Variante, die das komplett umkehrt:
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);
}
Leider hat sich nichts geändert außer das die Timer Anzeige jetzt recht"Fraktal" aussieht
Optokoppler unverändert