Zunächst aber mal zu dem was Du mir auf #118 zugesand hattest. Geht, nur keine Übernahme der Zeiteinstellung mit dem Poti in das Programm.
Bei E0.7 auf 1 beginnt A1.1 an zu blinken, unterschiedlich lang, nur bleibt z.B. die ganze Note unabhängig davon auf ca. 900 ms.
Das mit dem Poti zum Einstellen der Spielgeschwindigkeit ist aber sinnvoll!
Die Notenlänge einer ganzen Note bleibt bei 32 * Grundtakt. Die Länge des Grundtaktes ändert sich aber. Bei Linksanschlag des Potie 32*
16ms (doppelte Geschwindigkeit) und bei Rechtsanschlag 32
*79ms (2,5mal langsamer). Normalgeschwindigkeit ist 32*
31ms. Wenn das Potie auf 29..31ms (31 +/-1 -1ms Korrektor für TON-Timer) steht, dann leuchtet A1.1 mit Dauerlicht als Hinweis, dass die Normalgeschwindigkeit "getroffen"/eingestellt ist. Das Dauerlicht oder das ganze Blinken kannst du auch rausnehmen. Man kann auch E0.7 ausschalten, dann ist die Potie-Verstellung deaktiviert und Normalgeschwindigkeit aktiv.
Beobachte mit der Statustabelle oder das Programm MAIN Netzwerk 3 bis 5 das SMB28 (Stellung Potie 0..255) und VW34 (PT für den Timer 16..79ms). Drehe einfach mal am Potie während die Melodie spielt und sieh', wie sich die Abspielgeschwindigkeit ändert.
Ich habe für die Tonleiter der Blockflöte Änderungen vor genommen s. Anhang.
Läuft aber nicht richtig. Nur bis A0.3, danach ist alles dunkel. Was ist da los?
Das wird daran liegen, dass du
VB106 am Zeilenanfang hingeschrieben hast an der Stelle, wo eigentlich VB105 ist (du hast dich verzählt) und daher das VB105 frei blieb und den Wert 0 hat, was das Ende der Abspielliste bedeutet. Du musst die Adresse nicht hinschreiben (das ist unnötig), MicroWIN zählt die Adressen selber mit.
Bei VB69 bin ich auf HEX umgestiegen, da bei #2 führende Nullen unterdrückt werden.
Ist HEX in solchem Fall notwendig?
Das ist halt so bei MicroWIN und vermutlich auch nicht änderbar, dass führende 0en bei 2# nicht geschrieben werden. Bei 16#00 und 16#01 hat MicroWIN auch eine Macke, dass die führende 0 entfernt wird. HEX ist kompakt und für mich auch übersichtlich, doch im Fall der Griffmuster ist 2#.... tatsächlich anschaulicher. Für das Programm ist es aber egal welche Darstellung man benutzt.
Endprocedere:
Wenn ich z.B. 4 Noten vor Schluss, beim VB106 das höchste Bit auf 1 setze, zum Ansteuern einer Lampe,
dann wäre
1. die Frage, wie selektiere ich das? Wie spreche ich das an? Damit mit diesem z.B. der A1.1 auf 1 gesetzt wird,
und am (nach!) Ende des Musikstückes wieder auf 0 ? Das wäre (neuerdings) das Signal, den Luftsack zu entlasten.
2. Es verändert sich der HEX Kode, im Beispiel VB 106 von 66 auf C6. Hat das nicht Auswirkungen auf den Ton?
Die Idee für die Funktion des Bit7 ist noch nicht implementiert, Bit7 wird aber ausgeblendet und dadurch ignoriert, damit es nicht stört. siehe SBR_31ms Netzwerk 7
AC0 WAND_B 16#07
Mit der Addition von 16#80 zu jeder Notenlänge, wo das rote Licht angehen soll, leidet aber die Lesbarkeit/Verständlichkeit, besonders wenn du lieber die Noten in ASCII-Code schreiben willst. Außerdem erhöht das die Chance für falsche Eingaben, z.B. 16#66 + 16#80 = 16#E6 und nicht 16#
C6. Ich denke, besser wäre zwei zusätzliche Sondercodes für das Einschalten und das Ausschalten des roten Lichtes. Dann kann es auch mehrmals in der Melodie geschaltet werden. Oder der Code nach früher/später versetzt werden, ohne die Codierung der Noten zu ändern. Und weil du ganz sicher bei der Eingabe von längeren Melodien Fehler machen wirst: was soll das Programm dann machen? Ich würde beim finden von unzulässigen Codes das rote Licht einschalten (und bis zum Ende eingeschaltet lassen), aber weiterspielen.
"Noten: c d e f g a h C D E" Eigentlich mit der Groß- und Kleinschreibung anders herum.
Kann ich aber wohl selber richtig zuordnen. Beim Schottischen beginnt es zudem mit G und endet auf a.
Dann schreibe bitte mal exakt, welche Noten du brauchst und wie du die Noten schreiben willst. Dann kann ich dir das noch einbauen. Oder ändere den Programmcode selber nach Bedarf. Ich habe erstmal mit Kleinbuchstaben angefangen, einfach weil die leichter einzugeben sind.
Wenn alle Deine Schreibweisen gleichwertig sind, dann würde ich mich für die erste entscheiden, dort hinter VB 100.
Also z.B. 'c1d2e4f8g6a3h4C4D4E4', 'E4c1d2e4f8g6a3h4C4D4E4'
Du kannst überall da, wo du willst, ein Komma oder eine Zeilenschaltung setzen zur übersichtlichen Auftrennung des Strings. (also ...Hochkomma Komma Hochkomma... = ...', '... ) Schreibst du immer nur 'xy' in eine Zeile, dann brauchst du 1000 Zeilen, schreibst du 'xyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxy' dann siehst du schlecht, an welcher Stelle der Melodie das gerade ist oder wo du einen Fehler gemacht hast. Du kannst den Melodie-'String' aufteilen wo immer du magst und auch gerne Kommentare dahinter schreiben oder Kommentarzeilen einfügen wo du magst. Du solltest nur nicht die VB-Adresse am Anfang der Zeile hinschreiben, insbesondere wenn die Adresse falsch ist.
Bei mehreren Musikstücken auf der SPS ist noch Folgendes nötig:
1. Nach Verlöschen der roten Lampe erst mal drucklos und damit tonlos. Für den Schottischen stellt sich Referenzton A ein 2#11111110.
Damit beginne ich auch generell, zusammen mit den Drohnen zu dröhnen, noch ohne Ablauf des eigentlichen Musikstücks.
2. Dann kommt der Beginn, mit E0.0 auf 1 (oder ich mache das mit einem Taster, der alternierend einen Merker setzt und rück setzt.)
3. Nach Ende des 1. Musikstückes unterhält man sich mit den Leuten.
Wenn gewünscht müsste es durch Betätigung eines weiteren Tasters, der auf E0.1 arbeitet, mit dem 2. Musikstück weiter gehen. Funktionen grundsätzlich wie beim 1.
4. Das ganze noch weitere Male. So oft, wie man Musikstücke unter bringt, und Eingänge zur Verfügung hat.
In meiner ersten Variante hatte ich einen kurzen Tastendruck an E0.0 verwendet zum Start des Abspielens bis zum Ende der Melodie. In der zweiten Variante habe ich einen Schalter eingeführt, der "Ein" bleiben muss solange die Melodie spielen soll, und bei Ausschalten springt der Abspielpointer wieder zurück, damit man das abspielen abbrechen kann. Wie du das Bedienen willst, insbesondere bei mehreren Melodien im Speicher, solltest du dir überlegen und darfst du gerne selber programmieren. Ich würde empfehlen, mache zwischen die Melodien ein oder mehrere 0-Bytes, dann stoppt das Abspielen da. Und mit einem weiteren Taster z.B. E0.1 könntest du bei jedem Tastendruck zur nächsten Melodie springen (zum nächsten bzw. letzten 0-Byte vor dem Anfang der nächsten Melodie) springen. Oder 3 Taster für Start bei Melodie 1 oder 2 oder 3. Und noch ein Taster oder Schalter, um das Abspielen temporär zu pausieren und fortzusetzen. Und ... und ... Das zu implementieren reizt mich aber nicht, das artet ja in Arbeit aus.
Das darfst du gerne selber programmieren. Und es ist ja eigentlich dein Projekt und dein Wille, das mit einer 214 zu machen. Ich habe dir "nur" das Grundprogramm geschrieben, um zu zeigen dass und wie es geht.
Falls du evtl. häufiger die Melodien ändern willst, dann müsstest du im Moment jedesmal einen neuen Datenbaustein mit MicroWIN in die 214 laden (in den EEPROM). Da könntest du mal nachdenken, das vielleicht besser mit Excel und z.B. Libnodave zu machen. Oder nimm ein HMI Panel. Da werden die Daten nur in den Goldcap-gepufferten Arbeitsspeicher RAM geladen.
Einfach nur mit "Daumen hoch" mich zu bedanken, war mir etwas schäbig.
Dann gib halt kein auffälliges "Danke". Ich habe hier schon genug "Danke" erhalten ...