Seite 3 von 4
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 07.01.2023 13:53
von mk-soft
Wer hat den Arduino programmiert. Du selber?
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 07.01.2023 14:06
von druckernrw
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
Verfasst: 07.01.2023 14:22
von jacdelad
So, der Code probiert alle Verbindungsvarianten an COM11 mit 9600 bps durch:
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()
Kriegst du da eine Verbindung (unabhängig davon, was dann für Daten empfangen werden oder auch nicht)?
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 07.01.2023 17:13
von druckernrw
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.
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 07.01.2023 19:07
von jacdelad
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.
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 07.01.2023 20:38
von HeX0R
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
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
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 08.01.2023 15:11
von druckernrw
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?
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 08.01.2023 15:40
von Benubi
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).
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 08.01.2023 15:54
von HeX0R
druckernrw hat geschrieben: 08.01.2023 15:11
Ja genau. Da geht es jetzt.
Und wo war nun der Fehler?
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:
com 11 als beispiel.
Das übliche 9600 gedöns....
werte gehen ein .... 11200,11400,11599....44100...700000
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.
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_()
Re: Arduino und Purebasic Sound wiedergabe
Verfasst: 08.01.2023 16:06
von druckernrw
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.
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
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.