Page 1 sur 1

Purebasic command arduino [RESOLUT]

Publié : lun. 10/avr./2023 4:29
par Ekim
Bonsoirs à tous :D

J'ai conçu une carte avec un contrôleur Arduino nano pour interagir avec une appli PB, hors, une fois les boutons de la carte, les éléments de la fenêtre Pb ne réagit pas toujours comme convenu,

Peut être que la méthode utilisé n'est pas la bonne, je vous laisse en juger :?

Code : Tout sélectionner


Port$ = "COM3"

If OpenSerialPort(0, Port$, 9600, 0, 8, 1, 0, 4, 4)
	Delay(1000)
	
	If OpenWindow(0, 0, 0, 220, 100, "Test commande arduino", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)	
		TextGadget(1, 10, 15, 200, 30, "",#PB_Text_Border)
		ButtonGadget(2, 10, 60, 100, 30, "Fermer")
		
		If CreateImage(10, 100, 20,24,$00FF00) And CreateImage(11, 60, 100,24,$0000FF)
			ImageGadget(3, 110, 60, 100, 30,ImageID(10),#PB_Image_Border)
		EndIf
		
		Repeat
			Event = WaitWindowEvent(1)
			
			Bytes = AvailableSerialPortInput(0)
			
			If Bytes
				*Byte = AllocateMemory(Bytes)
				com = ReadSerialPortData(0, *Byte, Bytes)
				
				If com
					Rep$ = PeekS(*Byte, #PB_ByteLength,#PB_UTF8)
					
					If FindString(Rep$,"Command1",1)
						SetGadgetText(1,"Tst")
					EndIf
					
					If FindString(Rep$,"Command2",1)
						SetGadgetState(3,ImageID(11))
					EndIf
					
					If FindString(Rep$,"Command3",1)
						CloseWindow(0)
						End 
					EndIf
				EndIf
			EndIf
			
; 			Select Event
; 					
; 				Case #PB_Event_Gadget
; 					Select EventGadget()
; 						Case 1 
; 							CloseWindow(0)
; 							End  
; 					EndSelect
; 					
; 			EndSelect
		Until Event = #PB_Event_CloseWindow
	EndIf
EndIf

End


n'hésitez pas à corriger :wink:

Re: Purebasic command arduino

Publié : mar. 11/avr./2023 15:09
par Ollivier
Ekim a écrit :les éléments de la fenêtre Pb ne réagit pas toujours comme convenu
Bonjour,

- quels éléments exactement ?
- comment réagissent-ils exactement ?
- comment est-il exactement convenu qu'ils réagissent ?

Si les symptômes sont différents les uns des autres, ne se limiter qu'à l'observation d'un seul élément, dans un premier temps, pour répondre à ces trois questions.

Cordialement

Re: Purebasic command arduino

Publié : mar. 11/avr./2023 15:33
par Marc56
Deux choses aussi, mais je pense que tu sais déjà:
  • Les communications série utilisent des buffers. Donc il faut savoir si tout a été transmis avant de traiter la réponse. Penser aux saut de lignes et à ajouter un caractère de fin de chaine si le programme n'en a pas transmis. etc.
  • Chaque fois qu'on ouvre la communication vers une carte Arduino, elle se réinitialise (le programme chargé en flash redémarre). donc si tu te connecte plusieurs fois, les données de la carte se remettent à zéro à chaque fois. On peut contrer cela en faisant une soudure je ne sais plus où.
:wink:

Re: Purebasic command arduino

Publié : mer. 12/avr./2023 0:29
par Ekim
Bonsoirs @Ollivier et @Marc56

Avant tout, merci pour votre intervention)

Pour la 1ère question, pour ce cas de figure volontairement simplifier, cela concerne principalement le "ImageGadget", le changement d'image ne s'opère pas bizarrement malgré le fait que la commande soit bien passée en l'occurrence pour ce cas précis "Command2"

Ensuite, comment sont ils sensés réagir?, je voulais tout bonnement remplacer les évènements gadget habituels par les captures de commandes envoyés par Arduino (je m'étais fortement inspiré de la méthode QT pour réaliser des interfaces graphique pour des appli qui ne sont pas sensés en avoir! comme Arduino par exemple)

@Marc56, les commandes parviennent très bien jusqu'à Pb sans aucuns soucis même!
Note: concernant la réinitialisation, effectivement en cour circuitant le reset, on crée un "état mémoire", pour ceux qui veulent téléverser qu'une seul fois effectivement sa pourrait les intéresser)

Re: Purebasic command arduino

Publié : mer. 12/avr./2023 22:27
par Ekim
@Marc56 tu avais raison finalement car j'ai pris la peine de contrôler les paquets de commande en lecture direct des buffers et il s'avère que je ne recevais pas correctement les "déclencheurs" permettant d'interagir avec les éléments de la fenêtre, voici une capture buffer via le débugeur intégré:

Code : Tout sélectionner

Connexion réussit au port série COM3
UC60 Video (Normal)
Command1
Command1
Command1
Command1
Command1
Command
Command
Command2
Command2
Command2
Command2
Command2
Command2
Com
Command3
Command3
Command3
Command3
Command3
Command3
Command3
Command3
Command3


sachant que les seules "déclencheurs" attendus sont "Command1,Command2,Command3"
donc, apparemment, le programme tel qu'il est écrit, prend en charge uniquement soit la 1ère, soit la dernière itération :roll:

donc ta remarque était au contraire très pertinente et je m'en excuse :wink:

Re: Purebasic command arduino [RESOLUT]

Publié : jeu. 13/avr./2023 3:41
par Ekim
Bon je suis enfin parvenu à résoudre le problème grâce à "FreeMemory(*Byte)" tout simplement :lol: