Arduino und Purebasic Sound wiedergabe
Re: Arduino und Purebasic Sound wiedergabe
Wer hat den Arduino programmiert. Du selber?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 13
- Registriert: 27.12.2022 22:52
- Computerausstattung: er ist beige
- Wohnort: Halle Westf
Re: Arduino und Purebasic Sound wiedergabe
Ja das programm hab ich gemacht. Es gibt da so hübsche hilfsmittel wie ardublock mit dem man bausteine zusammensetzt und sich so ein code schreibt. Läuft und macht was es soll.
Re: Arduino und Purebasic Sound wiedergabe
So, der Code probiert alle Verbindungsvarianten an COM11 mit 9600 bps durch:
Kriegst du da eine Verbindung (unabhängig davon, was dann für Daten empfangen werden oder auch nicht)?
Code: Alles auswählen
Dim Parity.l(4)
Dim Bits.b(1)
Dim StoppBits.f(2)
Dim Handshake.l(3)
Parity(0)=#PB_SerialPort_NoParity
Parity(1)=#PB_SerialPort_EvenParity
Parity(2)=#PB_SerialPort_MarkParity
Parity(3)=#PB_SerialPort_OddParity
Parity(4)=#PB_SerialPort_SpaceParity
Bits(0)=7
Bits(1)=8
StoppBits(0)=1
StoppBits(1)=1.5
StoppBits(2)=2
Handshake(0)=#PB_SerialPort_NoHandshake
Handshake(1)=#PB_SerialPort_RtsHandshake
Handshake(2)=#PB_SerialPort_RtsCtsHandshake
Handshake(3)=#PB_SerialPort_XonXoffHandshake
OpenConsole("Serial Port Test")
For loop1=0 To 4
For loop2=0 To 1
For loop3=0 To 2
For loop4=0 To 3
OpenSerialPort(0,"COM11",9600,Parity(loop1),Bits(loop2),StoppBits(loop3),Handshake(loop4),1024,1024)
If IsSerialPort(0)
Break 4
EndIf
Next
Next
Next
Next
If IsSerialPort(0)
PrintN("Verbindung hergestellt!")
*puffer=AllocateMemory(1024,#PB_Memory_NoClear)
Repeat
While AvailableSerialPortInput(0)
BytesRead=ReadSerialPortData(0,*puffer,1024)
If BytesRead
For iLoop=0 To BytesRead-1
PrintN(Str(PeekL(*puffer)))
Next
EndIf
Wend
Delay(1000)
ForEver
Else
PrintN("Keine Verbindung!")
EndIf
Input()
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
-
- Beiträge: 13
- Registriert: 27.12.2022 22:52
- Computerausstattung: er ist beige
- Wohnort: Halle Westf
Re: Arduino und Purebasic Sound wiedergabe
erstmal danke danke das ihr euch da auch gedanken macht.
Hmm, verbinden kann ich es damit. Es dauert ca 20 sek bis da ein paar zahlen ankommen.
dann zeigt er aber andere zahlen an.
Hab es auch noch mit anderen Geschwindigkeiten wie 19200 versucht aber ist genauso.
352980272
352980272
352980272
352980272
352980272
352980272
352980272
da sollten eigentlich zahlen
40000
41250
41500... kommen. immer mit neuer zeile. so zeigt es mir die Arduino ide auch im seriellen monitor an.
Hab es mal mit einem Terminal Programm gecheckt. "Com11, 19200, parity keine, stop bit 1, Bits 8". Damit kommt das richtige an.
Hmm, verbinden kann ich es damit. Es dauert ca 20 sek bis da ein paar zahlen ankommen.
dann zeigt er aber andere zahlen an.

Hab es auch noch mit anderen Geschwindigkeiten wie 19200 versucht aber ist genauso.
352980272
352980272
352980272
352980272
352980272
352980272
352980272
da sollten eigentlich zahlen
40000
41250
41500... kommen. immer mit neuer zeile. so zeigt es mir die Arduino ide auch im seriellen monitor an.
Hab es mal mit einem Terminal Programm gecheckt. "Com11, 19200, parity keine, stop bit 1, Bits 8". Damit kommt das richtige an.
Re: Arduino und Purebasic Sound wiedergabe
Dann hast du aber schon mal Schritt eins geschafft: Du hast ihn verbunden.
Bei den Zahlen die kommen kann ich nicht wirklich helfen, solange wir nicht wissen, in welchem Format sie kommen. Sieht mir aber irgendwie nach LongInt aus. Aber vielleicht ist es ein Statuscode und noch nicht die Frequenz.
Bei den Zahlen die kommen kann ich nicht wirklich helfen, solange wir nicht wissen, in welchem Format sie kommen. Sieht mir aber irgendwie nach LongInt aus. Aber vielleicht ist es ein Statuscode und noch nicht die Frequenz.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Arduino und Purebasic Sound wiedergabe
Wenn das Terminal das richtig anzeigt, kommt es wohl als Ascii Zeichen.
Du hast jetzt die korrekten Bedingungen (Com11, 19200, parity keine, stop bit 1, Bits 8 ), kann ja jetzt nicht so schwer sein, damit zu arbeiten.
Hier mal nen kleines Testgerüst
Du hast jetzt die korrekten Bedingungen (Com11, 19200, parity keine, stop bit 1, Bits 8 ), kann ja jetzt nicht so schwer sein, damit zu arbeiten.
Hier mal nen kleines Testgerüst
Code: Alles auswählen
OpenConsole("Serial Port Test")
If OpenSerialPort(0, "COM11", 19200, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
*Buffer = AllocateMemory(1024)
PrintN("Press ESC Key to abort")
PrintN("")
Repeat
Length = AvailableSerialPortInput(0)
If Length = 0
Delay(25)
Else
BytesRead = ReadSerialPortData(0, *Buffer, Length)
If BytesRead
Print(PeekS(*Buffer, BytesRead, #PB_Ascii))
EndIf
EndIf
Until Inkey() = #ESC$
Else
PrintN("Keine Verbindung!")
Input()
EndIf
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
-
- Beiträge: 13
- Registriert: 27.12.2022 22:52
- Computerausstattung: er ist beige
- Wohnort: Halle Westf
Re: Arduino und Purebasic Sound wiedergabe
Ja genau. Da geht es jetzt.
Und wo war nun der Fehler?
Jetzt müssen die Zahlen nur noch die Sound ausgabe modifizieren.
Vielen Dank, wieder einen Schritt weiter..
So jetzt mal ne frage zum sound. Ich habe viele sachen auch unter blitzbasic3d vor einiger zeit mal versucht. Muss man sounds auch als channel deklarieren und dann höhe, r/l und lautstärke zu beeinflussen?
und verzeiht meine dumme frage. wie poste ich hier Bilder?
Und wo war nun der Fehler?

Jetzt müssen die Zahlen nur noch die Sound ausgabe modifizieren.
Vielen Dank, wieder einen Schritt weiter..
So jetzt mal ne frage zum sound. Ich habe viele sachen auch unter blitzbasic3d vor einiger zeit mal versucht. Muss man sounds auch als channel deklarieren und dann höhe, r/l und lautstärke zu beeinflussen?
und verzeiht meine dumme frage. wie poste ich hier Bilder?
Re: Arduino und Purebasic Sound wiedergabe
Hallo
Ein problem beim PB Linux Versionen ist, daß die meisten Manipulationsbefehle Tonhöhe/Frequenz/Panning nicht funktionieren, bestenfalls leere Platzhalter sind.
Hier ist das was du tun könntest, als einfacher workaround, nach Schwierigkeitsstufe geordnet (so stelle ich mir das jedenfalls vor):
1) Verschiedene Sounds benutzen. Jeder sound erhält seinen Frequenzbereich und entsprechend wird jener abgespielt / lauter gestellt, oder ausgeschaltet / gemutet. Das ist ganz in Ordnung so, ich habe bei einigen Spielen zufällig geschaut die auf 3D Engines funktionieren, und so werden Automotoren Geräusche auch gehandhabt, des Weiteren gibt es noch Beschleunigungs- und Entschleunigungssounds, je Frequenzbereich (bzw. Gang im Spiel).
2) Wenn Du einen kurzen Piep Sound benutzt, kannst Du den "einfach" öfter/seltener je Frequenz abspielen lassen.
3) Kombinieren von 1+2
4) Externe audio library benutzen, i.d.R. wird diese dann über DLL/SO eingebunden
5) Linux Audio Befehle direkt benutzen, oder SDL2 (glaube ich). Dafür müsstest Du aber auch etwas in die Audio-Formate dich tiefer einarbeiten und das ist eher für fortgeschrittene Benutzer (ich habe mich da noch nicht hingewagt).
Ein problem beim PB Linux Versionen ist, daß die meisten Manipulationsbefehle Tonhöhe/Frequenz/Panning nicht funktionieren, bestenfalls leere Platzhalter sind.
Hier ist das was du tun könntest, als einfacher workaround, nach Schwierigkeitsstufe geordnet (so stelle ich mir das jedenfalls vor):
1) Verschiedene Sounds benutzen. Jeder sound erhält seinen Frequenzbereich und entsprechend wird jener abgespielt / lauter gestellt, oder ausgeschaltet / gemutet. Das ist ganz in Ordnung so, ich habe bei einigen Spielen zufällig geschaut die auf 3D Engines funktionieren, und so werden Automotoren Geräusche auch gehandhabt, des Weiteren gibt es noch Beschleunigungs- und Entschleunigungssounds, je Frequenzbereich (bzw. Gang im Spiel).
2) Wenn Du einen kurzen Piep Sound benutzt, kannst Du den "einfach" öfter/seltener je Frequenz abspielen lassen.
3) Kombinieren von 1+2
4) Externe audio library benutzen, i.d.R. wird diese dann über DLL/SO eingebunden
5) Linux Audio Befehle direkt benutzen, oder SDL2 (glaube ich). Dafür müsstest Du aber auch etwas in die Audio-Formate dich tiefer einarbeiten und das ist eher für fortgeschrittene Benutzer (ich habe mich da noch nicht hingewagt).
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Arduino und Purebasic Sound wiedergabe
Genaugenommen war es Dein Fehler!
Für eine RS232 Verbindung ist es unerlässlich, die richtigen Kommunikationsparameter zu kennen.
Du selbst hast aber alle auf die falsche Fährte geführt:
9600Baud ist aber was völlig anderes als 19200, d.h. alle Bits kämen bei 9600 völlig verschoben an, genauso mit falscher Datenbitanzahl, Parity Setting, usw. Da kommt dann "Datensalat" an.com 11 als beispiel.
Das übliche 9600 gedöns....
werte gehen ein .... 11200,11400,11599....44100...700000
Auch so Wischi-Waschi-Aussagen wie "Werte gehen ein"...
Also bitte, wenn Du sowas machen möchtest, musst Du Dich schon erst mal selbst darum kümmern herauszufinden, WIE die Werte denn genau ankommen.
Das kann Integer, Longs, ASCII, UTF-8, oder Bananenschalen sein, und das muss ja in irgendeiner SDK-Anleitung genau beschrieben sein.
Genaugenommen hab ich nur zwischen den Zeilen von all Deinen Aussagen gelesen.
Bei dem Frequenz-Ton bin ich aber raus, falls Dein Programm unter Windows läuft, nimm doch einfach Beep_()
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
-
- Beiträge: 13
- Registriert: 27.12.2022 22:52
- Computerausstattung: er ist beige
- Wohnort: Halle Westf
Re: Arduino und Purebasic Sound wiedergabe
Nun gut ich bin Windows nutzer. Habe es auch schon zum laufen bekommen.
Es pfeift schonmal in den entsprechen Frequenzen.
Zusätzlich zu den Zahlen sendet der arduino auch noch andere befehle in Text form. Diese müsste ich jetzt erstmal herausfiltern. Quasi ignorieren. Sonst setzt mir das Programm immer die Frequenz auf "0" wenn so ein befehl kommt.
ach ja und zu deiner aussage:
9600Baud ist aber was völlig anderes als 19200, d.h. alle Bits kämen bei 9600 völlig verschoben an, genauso mit falscher Datenbitanzahl, Parity Setting, usw. Da kommt dann "Datensalat" an.
ich habe beide geschwindigkeiten ausprobiert um einen fehler auszuschliessen. 9600 und auch 19200. Natürlich habe ich den Arduino auch auf den entsprechenden Wert umprogrammiert.
Es pfeift schonmal in den entsprechen Frequenzen.
Zusätzlich zu den Zahlen sendet der arduino auch noch andere befehle in Text form. Diese müsste ich jetzt erstmal herausfiltern. Quasi ignorieren. Sonst setzt mir das Programm immer die Frequenz auf "0" wenn so ein befehl kommt.
Code: Alles auswählen
InitSound() ; Initialisieren des Sound-Systems
UseOGGSoundDecoder() ; Verwenden von Ogg-Dateien
LoadSound(0, "C:\DTMF\TurbineSoundkurz.ogg")
OpenConsole("Serial Port Test")
If OpenSerialPort(0, "COM11", 19200, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
*Buffer = AllocateMemory(1024)
PrintN("Press ESC Key to abort")
PrintN("")
SetSoundFrequency(0, 1000)
PlaySound(0, #PB_Sound_Loop, 100)
Repeat
Length = AvailableSerialPortInput(0)
If Length = 0
Delay(25)
Else
BytesRead = ReadSerialPortData(0, *Buffer, Length)
If BytesRead
Wert$ = PeekS(*Buffer, BytesRead, #PB_Ascii)
Print(Wert$)
SetSoundFrequency(0, Val(Wert$))
EndIf
EndIf
Until Inkey() = #ESC$
Else
PrintN("Keine Verbindung!")
Input()
EndIf
9600Baud ist aber was völlig anderes als 19200, d.h. alle Bits kämen bei 9600 völlig verschoben an, genauso mit falscher Datenbitanzahl, Parity Setting, usw. Da kommt dann "Datensalat" an.
ich habe beide geschwindigkeiten ausprobiert um einen fehler auszuschliessen. 9600 und auch 19200. Natürlich habe ich den Arduino auch auf den entsprechenden Wert umprogrammiert.