Zum Inhalt springen

Arduino Pinball Controller


Black Knight

Empfohlene Beiträge

vor 49 Minuten schrieb Black Knight:

Scheinbar filterst du tatsächlich den ersten Befehl raus, denn im Musiktest fangen die Musikstücke jetzt immer erst an, wenn sie eigentlich aufhören sollten.  

Ich vermute da kommen auch 'zwischendurch' Einzelbefehle. Ich schreib das um, dass er sich den Befehl merkt und den 'zweiten' nur ignoriert wenn er den selben code mitbringt.

vor 52 Minuten schrieb Black Knight:

Weißt du, wie ich das gleiche jetzt mit dem Lisy-PinMame machen kann? Kann ich unter Lisy auch einen X-Server starten oder läuft PinMame auch in der Konsole?  

Dazu habe ich mir etwas 'gebastelt'.

LISY ohne Autostart starten. Dann wenn Du über die Konsole (oder besser über ssh) auf der Kommandoebene in /home/pi bist mit ./run_lisy_apc im debugmode starten. Im debugmode macht er automatish einen einfachen UDP server auf dem Du Schalter 'schicken' kannst.

Dazu in einer zweiten ssh session nach /home/pi//lisy/src/lisy/testprogs/switches wechseln. Dort ist ein a.out was das schicken übernimmt. ( da stehen auch skripte an denen du dich orientieren kannst)

Das Format des Befehls ist "a.out 127.0.0.1 <switch>". Wobei Switch >100 den switch schliesst, und switch <100 den switch öffnet.

Beispiel script 'bumper':

./a.out 127.0.0.1 133
sleep 0.4
./a.out 127.0.0.1 33


Schliesst Schalter 33, wartet 0,4 Sekunden und öffnet Schalter 33 dann wieder

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 1,6Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

  • Black Knight

    642

  • bontango

    438

  • Volley

    100

  • jabdoa

    97

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

vor 8 Minuten schrieb bontango:

Ich schreib das um, dass er sich den Befehl merkt und den 'zweiten' nur ignoriert wenn er den selben code mitbringt.

So hatte ich das auch drin - das lief einwandfrei.

vor 9 Minuten schrieb bontango:

Dazu habe ich mir etwas 'gebastelt'.

Dazu bräuchte man aber immer noch einen angeschlossenen Flipper, oder?

Ich suche eigentlich einen Weg, um den Pi-PinMame komplett ohne Lisy bzw. APC zu testen. Dann könnten wir ganz sicher sein, dass es wirklich nur an PinMame liegt. Außerdem könnten wir so weitere System11C Geräte testen und du hättest die Möglichkeit das Problem auch ohne passendes Gerät nachstellen zu können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast Du nicht noch ne LISY_mini? Dann brauchst du nur nen Arduino via I2C oder USB connected ( bei USB ./run_lisy_mini starten) und ein Resistorarray damit die Switcheingänge vom Arduino nicht 'flattern'. So teste ich das immer.

grafik.png.b8c16cc8767c2f9c875e4b32f519488e.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 17 Minuten schrieb Black Knight:

So hatte ich das auch drin - das lief einwandfrei.

habe es angepasst, Update (selber dateiname) ist online

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb bontango:

habe es angepasst, Update (selber dateiname) ist online

Das scheint zu stimmen; jetzt hört es sich gut an.

vor einer Stunde schrieb bontango:

So teste ich das immer.

OK, probiere ich morgen mal.

Wenn du das Problem auch sehen möchtest, dann solltest du Rollergames starten, die Schalter für die Balltruhe (11, 12, 13) setzen, mit Schalter 5 2x Geld einwerfen und mit Schalter 3 ein Spiel starten.  
Er sollte dann 0x01 spielen und mit 0x50 das Rollergames Jingle. Dann kommt ein 0x02 dessen Bedeutung ich nicht kenne. 
Bis hierhin ist alles OK, aber dann kommen alle 5 Sekunden 0x03 Befehle, die da nicht hin gehören.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Stunden schrieb bontango:

ISY ohne Autostart starten. Dann wenn Du über die Konsole (oder besser über ssh) auf der Kommandoebene in /home/pi bist mit ./run_lisy_apc im debugmode starten. Im debugmode macht er automatish einen einfachen UDP server auf dem Du Schalter 'schicken' kannst.

Wenn ich ./run_lisy_apc aufrufe dann kann er keine serielle Verbindung aufbauen, beim Autostart aber schon. Hat das was mit diesem Getty Prozess zu tun?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im run_lisy_apc script stoppt er den Getty, sollte also gehen. Alternativ wie gesagt über USB mit run_lisy_mini

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb bontango:

Alternativ wie gesagt über USB mit run_lisy_mini

Ah Mist, wieder das Kleingedruckte nicht richtig gelesen. 
Mit run_lisy_mini läuft's.

Ich habe jetzt folgendes Schalterskript gebastelt:

#close trunk switch #1
./a.out 127.0.0.1 113
#close trunk switch #2
./a.out 127.0.0.1 112
#close trunk switch #3
./a.out 127.0.0.1 111
sleep 1
#insert 2 coins
./a.out 127.0.0.1 105
sleep 0.2
./a.out 127.0.0.1 5
sleep 1
./a.out 127.0.0.1 105
sleep 0.2
./a.out 127.0.0.1 5
sleep 1
#start game
./a.out 127.0.0.1 103
sleep 0.5
./a.out 127.0.0.1 3

Wenn ich das laufen lasse, dann bekomme ich danach folgende Meldungen:

[968.067229][0.354266] LISY_W_SWITCH_HANDLER (UDP Server Data received: 3
[968.067304][0.000075] LISY_W_SWITCH_HANDLER Switch#:3 action:0

[969.533528][1.466224] LISY_W sound_handler: board:1 0x1 (1)
[969.533681][0.000153] play soundindex 1 on board 1 
[969.533817][0.000136] API_write(3 bytes): 0x32 0x02 0x01
[969.533976][0.000159] STATISTICS: API_write 1544 bytes since last log
[969.534328][0.000352] API_write(1 bytes): 0x66
[969.535731][0.001403] API_read_byte: 0x00
[969.535860][0.000129] Error: LISY_BACK_WHEN_READY: timeout occured
[969.536038][0.000178] LISY_W sound_handler: board:1 0x50 (80)
[969.536303][0.000265] play soundindex 80 on board 1 
[969.536445][0.000142] API_write(3 bytes): 0x32 0x02 0x50
[969.536506][0.000061] API_write(1 bytes): 0x66
[969.539850][0.003344] API_read_byte: 0x00
[969.539889][0.000039] Error: LISY_BACK_WHEN_READY: timeout occured
[972.780190][3.240301] LISY_W sound_handler: board:1 0x50 (80)
[972.780344][0.000154] play soundindex 80 on board 1 
[972.780476][0.000132] API_write(3 bytes): 0x32 0x02 0x50
[972.780745][0.000269] API_write(1 bytes): 0x66
[972.784161][0.003416] API_read_byte: 0x00
[972.784344][0.000183] Error: LISY_BACK_WHEN_READY: timeout occured
[972.784546][0.000202] LISY_W sound_handler: board:1 0x2 (2)
[972.784663][0.000117] play soundindex 2 on board 1 
[972.784877][0.000214] API_write(3 bytes): 0x32 0x02 0x02
[972.785352][0.000475] API_write(1 bytes): 0x66
[972.788158][0.002806] API_read_byte: 0x00
[972.788283][0.000125] Error: LISY_BACK_WHEN_READY: timeout occured
[978.179211][5.390928] LISY_W sound_handler: board:1 0x2 (2)
[978.179273][0.000062] play soundindex 2 on board 1 
[978.179320][0.000047] API_write(3 bytes): 0x32 0x02 0x02
[978.179360][0.000040] STATISTICS: API_write 2554 bytes since last log
[978.179427][0.000067] API_write(1 bytes): 0x66
[978.182910][0.003483] API_read_byte: 0x00
[978.182951][0.000041] Error: LISY_BACK_WHEN_READY: timeout occured
[978.182999][0.000048] LISY_W sound_handler: board:1 0x3 (3)
[978.183035][0.000036] play soundindex 3 on board 1 
[978.183076][0.000041] API_write(3 bytes): 0x32 0x02 0x03
[978.183136][0.000060] API_write(1 bytes): 0x66
[978.187019][0.003883] API_read_byte: 0x00
[978.187060][0.000041] Error: LISY_BACK_WHEN_READY: timeout occured
[982.716650][4.529590] LISY_W sound_handler: board:1 0x3 (3)
[982.716709][0.000059] play soundindex 3 on board 1 
[982.716754][0.000045] API_write(3 bytes): 0x32 0x02 0x03
[982.716791][0.000037] STATISTICS: API_write 1327 bytes since last log
[982.716855][0.000064] API_write(1 bytes): 0x66
[982.721567][0.004712] API_read_byte: 0x00
[982.721610][0.000043] Error: LISY_BACK_WHEN_READY: timeout occured
[982.721660][0.000050] LISY_W sound_handler: board:1 0x3 (3)
[982.721696][0.000036] play soundindex 3 on board 1 
[982.721737][0.000041] API_write(3 bytes): 0x32 0x02 0x03
[982.721798][0.000061] API_write(1 bytes): 0x66
[982.725628][0.003830] API_read_byte: 0x00
[982.725668][0.000040] Error: LISY_BACK_WHEN_READY: timeout occured
[987.444135][4.718467] LISY_W sound_handler: board:1 0x3 (3)
[987.444194][0.000059] play soundindex 3 on board 1 
[987.444240][0.000046] API_write(3 bytes): 0x32 0x02 0x03
[987.444276][0.000036] STATISTICS: API_write 1388 bytes since last log
[987.444341][0.000065] API_write(1 bytes): 0x66
[987.448574][0.004233] API_read_byte: 0x00
[987.448618][0.000044] Error: LISY_BACK_WHEN_READY: timeout occured
[987.448664][0.000046] LISY_W sound_handler: board:1 0x3 (3)
[987.448701][0.000037] play soundindex 3 on board 1 
[987.448741][0.000040] API_write(3 bytes): 0x32 0x02 0x03
[987.448802][0.000061] API_write(1 bytes): 0x66
[987.452669][0.003867] API_read_byte: 0x00
[987.452709][0.000040] Error: LISY_BACK_WHEN_READY: timeout occured
[993.512925][6.060216] LISY_W sound_handler: board:1 0x3 (3)
[993.512986][0.000061] play soundindex 3 on board 1 
[993.513033][0.000047] API_write(3 bytes): 0x32 0x02 0x03
[993.513068][0.000035] STATISTICS: API_write 1773 bytes since last log
[993.513132][0.000064] API_write(1 bytes): 0x66
[993.515096][0.001964] API_read_byte: 0x00
[993.515140][0.000044] Error: LISY_BACK_WHEN_READY: timeout occured
[993.515191][0.000051] LISY_W sound_handler: board:1 0x3 (3)
[993.515228][0.000037] play soundindex 3 on board 1 
[993.515268][0.000040] API_write(3 bytes): 0x32 0x02 0x03
[993.515329][0.000061] API_write(1 bytes): 0x66
[993.519217][0.003888] API_read_byte: 0x00
[993.519256][0.000039] Error: LISY_BACK_WHEN_READY: timeout occured

D.h. bis [978.182999] ist alles OK und dann kommen die falschen 0x03 Kommandos.

Damit solltest du das Problem jetzt auch nachstellen können.

Wenn ich statt Rollergames Dr.Dude starte bekomme ich übrigens keine ständig wiederkehrenden Soundkommandos, es könnte also ein reines Rollergames Problem sein.


 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe das Soundproblem mit dem Dr. Dude übrigens nochmal mit dem Windows PinMame verifiziert. Wenn ich die Schalter da genauso aktiviere wie über das Schalterskript in Lisy, dann kommen auch genau die gleichen Soundkommandos wie in Lisy.  
Das stärkt die Vermutung, dass der Dr. Dude in Lisy funktioniert und wir es nicht mit einem allgemeinen System11C Problem zu tun haben. Möglicherweise ist es tatsächlich nur ein Problem mit dem Rollergames.

Wie ist denn der aktuelle Stand, hast du noch irgendwas herausgefunden?  
Wenn es sich tatsächlich nur um einen einzigen Flipper handelt, dann möchte ich deswegen jetzt auch kein Fass aufmachen.

Kennst du noch jemanden, den wir diesbezüglich mal fragen könnten?  
Da der Bug im Windows PinMame ja offensichtlich gefixt ist, müsste es doch jemanden geben der sich daran erinnern kann, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

was mich grad beim Log wundert sind die Timeouts, nicht dass das ein selbstgemachtes Problem ist ...

unterstuetzt Du "LISY_BACK_WHEN_READY" ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um ehrlich zu sein weiß ich gar nicht, was Lisy da stört.

Laut Protokoll sendet Lisy das Sync-Kommando 0x66 und bekommt sofort 0x00 als Antwort. 
Das sieht für mich erst mal OK aus, also verstehe ich diesen Error gar nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

bei meinem Testaufbau mit USB kommen die Timeouts nicht, wohl aber die sich wiederholenden Sound#3 Kommandos,

die kommen aber definitv vom soundboard treiber.

Koenntest Du bei deinem windows pinmame mal einen printf in ./src/wpc/sndbrd.c setzen und schauen ob er die Wiederholungen da macht?

Zeile 81 bietet sich an:

 

void sndbrd_data_w(int board, int data) {
  const struct sndbrdIntf *b = intf[board].brdIntf;
  if(b && (b->flags & SNDBRD_NOTSOUND)==0) {
        snd_cmd_log(board, data);

printf("sndbrd_data_w board:%d data:%d\n",board,data);


#if defined(LISY_SUPPORT)
        lisy_sound_handler( board, data );
#endif
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich PinMame unter Windows starte geht immer eine Shell im Hintergrund auf. Dort gibt PinMame mir die Soundkommandos aus und die sind auch alle doppelt:

Zitat

se\PinMAME_VC2019 -window -rp .. rollr_l2
RTH: sndbrd_data_w:00
RTH: sndbrd_data_w:00
RTH: sndbrd_data_w:00
RTH: sndbrd_data_w:79
RTH: sndbrd_data_w:79
RTH: sndbrd_data_w:01
RTH: sndbrd_data_w:01
RTH: sndbrd_data_w:50
RTH: sndbrd_data_w:50
RTH: sndbrd_data_w:02

Auch hier kann man am Timing sehen, dass das erste Kommando immer am Anfang und das zweite immer am Ende des entsprechenden Sounds kommt. Daher ist das Komando 0x02 auch nur einmal vorhanden, da das Musikstück zu diesem Zeitpunkt noch lief.

Hilft dir das schon oder soll ich den printf trotzdem noch einbauen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ach ja und hier gibt es keine sich wiederholenden 0x03 Kommandos.

Bearbeitet von Black Knight
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Minuten schrieb Black Knight:

Dort gibt PinMame mir die Soundkommandos aus und die sind auch alle doppelt:

nanu, ist da schon ein printf drin ????

welchen pinmame code hast du da?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei mir steht pinmame-code-r4748

und die entsprechende Strelle sieht bei mir so aus:

Zitat

void sndbrd_data_w(int board, int data) {    
    //static int mysounddata = 0;
  const struct sndbrdIntf *b = intf[board].brdIntf;
  /*
  if ((data & 0x0f) != mysounddata)
  {      
      mysounddata = (data & 0x0f);
      printf("RTH: sndbrd_data_w:%x\n", mysounddata);
}
  */
  printf("RTH: sndbrd_data_w:%02x\n", data);

  if(b && (b->flags & SNDBRD_NOTSOUND)==0)
    snd_cmd_log(board, data);
  if (b && (coreGlobals.soundEn || (b->flags & SNDBRD_NOTSOUND)) && b->data_w) {
#if 0
    if((b->flags & SNDBRD_NOTSOUND)==0)
        snd_cmd_log(board, data);
#endif
    if (b->flags & SNDBRD_NODATASYNC)
      b->data_w(board, data);
    else
    {
      sndbrd_sync_w(b->data_w, board, data);
      //snd_cmd_log(board, data);
    }
  }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 22 Stunden schrieb Black Knight:

Bei mir steht pinmame-code-r4748

dann hast Du ne alte codebase die ich Dir mal kopiert hatte, da ist der printf schon drin.

Dann hab ich aktuell keine wirkliche Idee, zumal der wpc code in windows und unix pinmame identisch ist.

Allerdings hatte ich einen Fall bei Gottlieb Sys1 wo der unix compiler ein statement anders (falsch)

übersetzt hatte als der windows compiler, weshalb anfangs sys1 auf windows lief, auf unix aber nicht.

Aber das jetzt zu finden ....

Bearbeitet von bontango
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb bontango:

Aber das jetzt zu finden ....

Macht es denn Sinn diese Frage mal auf Pinside oder im PinMame Forum zu stellen?  
Vielleicht hat ja jemand eine Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aus der Erfahrung in der Vergangenheit wenig. Ohne jetzt grosskotzig klingen zu wollen, aber auf dem Level treiben sich da sehr wenige Leute rum. Ich hatte damals Kontakt zu nem Entwickler, der ist Momentan aber 'im Stress' und etwas kurz angebunden

Aber Du kannst es ja mal versuchen

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb bontango:

Aber Du kannst es ja mal versuchen

Ich werde im nächsten Release einfach schreiben, dass der Rollergames im Unix-PinMame nicht richtig funktioniert und dann gleich mal um sachdienliche Hinweise bitten - mal sehen, ob was kommt.

Vorher will ich den Pinbot aber wieder in Betrieb nehmen, dann kann ich gleich das Sound-Looping im Exception-Handling prüfen.

Hattest du diese LISY_BACK_WHEN_READY Fehler eigentlich nachstellen können oder treten die bei dir nicht auf?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 26.4.2021 um 10:09 schrieb bontango:

Aber das jetzt zu finden ....

In den ROM files muss doch auch eine HW Beschreibung drin sein. Kann man da einen einfachen Vergleich zwischen Rollergames und Dr.Dude machen? 
Vielleicht ist ja da beim Rollergames irgendwas anders und der Unix-PinMame fällt drauf rein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Die neue SW Version ist released und ich habe die Doku aktualisiert.

Nähere Infos gibt's im Changelog

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

×
×
  • Neu erstellen...

Wichtige Information

Datenschutzerklärung und Registrierungsbedingungen