Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Radar pour futur projet | |
| | Auteur | Message |
---|
gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Radar pour futur projet Jeu 14 Aoû 2014 - 18:57 | |
| Bonjour, Je partage ce bout de code pour de futurs projets. C'est un radar où dans l'attente de connexions avec le monde réel (Robotique, autre,) des échos sont crées aléatoirement. Ce code est vide, dans l'attente de toute idée. Gilles - Code:
-
' Radar 360° avec échos aléatoires pour projet robotique
' déclaration variable
' variable coordonées dim x,y ' ligne de balayage dim x1,y1,x2,y2 ' rand d'echo dim rand ' variable standard de boucle dim i ' position des échos dim dist dim px px=180 ' tempo des echos dim tp ' probabilité des échos dim pr pr=40 ' données prédéfinis variables x=0 ' déclaration label label balayage, sortie ' construction fenêtre principale maximize 0 : color 0,255,255,255 : caption 0,"Radar 1.0" ' affichage dans fenêtre button 102 : left 102,300 : width 102,110 : top 102,66 : font_color 102,145,145,145 : font_bold 102 : caption 102,"Exit" : on_click 102, sortie
' création du radar
2d_pen_width 5 : 2d_pen_color 2,2,2 : 2d_circle 750,300,200
' balayage balayage: for i=1 to 500 step 0.03 x=int(190*(cos(i))) y=int(190*(sin(i))) 2d_pen_width 5 : 2d_pen_color 0,0,0: 2d_line 750,300,750+x,300+y wait 20 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,750+x,300+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,751+x,301+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,749+x,299+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,749+x,301+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,751+x,299+y ' traitement écho rand=int((rnd(pr))) dist=int((rnd(px))) if rand=10 beep x=int((190-dist)*(cos(i))) y=int((190-dist)*(sin(i))) 2d_pen_width 5 : 2d_pen_color 255,0,0: 2d_circle 750+(x-1),300+(y-1),2 end_if next i end
' fin du programme sortie: terminate end | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Radar pour futur projet Jeu 14 Aoû 2014 - 19:23 | |
| Pas mal ! Qu'est-ce que tu veux connecter comme radar, et par quel interface ? EDIT Je vois que tu as mis tout ton traitement avant le END, dans la procédure principale qui en principe ne sert qu'à créer l'environnement d'exécution (les objets visuels, chargement de fichiers de paramètres, ...). Un bouton ou une ligne dans un menu devrait déclencher le traitement. Je me suis permis d'adapter ton programme à cette structure. Voici le résultat (pas de panique, la modif est minime !) : - Code:
-
' Radar 360° avec échos aléatoires pour projet robotique
' déclaration variable
' variable coordonées dim x,y ' ligne de balayage dim x1,y1,x2,y2 ' rand d'echo dim rand ' variable standard de boucle dim i ' position des échos dim dist dim px px=180 ' tempo des echos dim tp ' probabilité des échos dim pr pr=40 ' données prédéfinis variables x=0
' déclaration label label balayage, sortie
' construction fenêtre principale maximize 0 : color 0,255,255,255 : caption 0,"Radar 1.0"
' affichage dans fenêtre button 102 : left 102,300 : width 102,110 : top 102,66 : font_color 102,145,145,145 : font_bold 102 : caption 102,"Exit" : on_click 102, sortie button 103 : left 103,300 : width 103,110 : top 103,96 : font_color 103,145,145,145 : font_bold 103 : caption 103,"Start" : on_click 103, balayage
' création du radar
2d_pen_width 5 : 2d_pen_color 2,2,2 : 2d_circle 750,300,200
end
' balayage balayage: for i=1 to 500 step 0.03 x=int(190*(cos(i))) y=int(190*(sin(i))) 2d_pen_width 5 : 2d_pen_color 0,0,0: 2d_line 750,300,750+x,300+y wait 20 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,750+x,300+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,751+x,301+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,749+x,299+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,749+x,301+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line 750,300,751+x,299+y ' traitement écho rand=int((rnd(pr))) dist=int((rnd(px))) if rand=10 beep x=int((190-dist)*(cos(i))) y=int((190-dist)*(sin(i))) 2d_pen_width 5 : 2d_pen_color 255,0,0: 2d_circle 750+(x-1),300+(y-1),2 end_if next i end
' fin du programme sortie: terminate end
| |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Radar pour futur projet Ven 15 Aoû 2014 - 0:37 | |
| Klaus,
Je vais connecter un servo moteur avec un detecteur ultrason juste pour simuler un vrai radar. Le but est d'apporter de l'aide pour plus tard en apportant quelques brique de passion pour d'autre.
Gilles | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Radar pour futur projet Ven 15 Aoû 2014 - 0:41 | |
| Intéressant. Et prometteur... | |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Radar pour futur projet Sam 16 Aoû 2014 - 10:46 | |
| Bonjours, Encore du radar,et encore. Jack a parler de robotique, etc. Faisons honneur. Jack pour la connexion Arduino sans DLL, serait le pied, en soket aussi. Jack si tu le souhaite je t'envoie une Arduino YUN (Carte arduino avec WIFI). arduino yunJe continue donc les radar puisque c'est la base pour éviter qu'un robot se cogne partout. Le radar d'aujourd'hui capte des échos pour l'instant aléatoire (Il ne fait que ca pour l'instant) Le but est de trouver la meilleure sortie, et aussi de dessiner la carte en 3D des échos. Je partage toujours avec grand plaisir ces petits programmes qui ne servent à rien maintenant mais des briques pour panoramic dans le futur. Pour les critiques je suis preneur, chaques critiques est une pierre de plus dans les fondations. Pour les Sub, je débuterais bientôt. je continue doucement. Merci à Jack, et à la communauté Panoramic. - Code:
-
' description programme ' Un balayage en une passe trouve des échos, puis analyse l'image pour trouver la sortie la mieux adaptée ' Un tirage aléatoire des échos dans l'attente de connecter un interface servo ave un radar ultrason ' Création d'un dessin 3D de la scene
' déclaration de variable dim i : ' boucle dim y,x : ' Coordonnées balayage dim y1,x1 : ' Coordonnées centre radar dim degree : ' Variable degrée dim af : ' Variable affichage texte echo dim posiecho : ' Position aléatoire de l'echo (En remplacement interface) dim distance : ' Distance de l'echo aléatoire (En remplacement interface) dim rand : ' Probabilité d'echo (En remplacement interface) dim dist : ' Variable de distance echo (En remplacement interface) dim afpo : ' Variable position affichage echo (top) dim inecho : ' Incrementation echo dim tempoecho : ' Tempo affichage Echo (Pour eviter d'être écrasé) dim presecho : ' Echo trouvé dim xx,yy : ' Retard écho dim dist1 : ' Vrai distance dim alerte : ' echo distance minimale dim line1, line2, line3, line4 : ' position ligne périmètre ' valeur variable y1=650 X1=325 degree=0 posiecho=8 distance=200 afpo=30 inecho=2 tempoecho=1 presecho=0 alerte=20 ' déclaration de label label sortie, balayage, analyse
' déclaration fenêtre principale button 100 : left 100,10 : width 100,110 : top 100,650 : font_color 100,145,145,145 : font_bold 100 : caption 100,"Exit" : on_click 100, sortie button 101 : left 101,10 : width 101,110 : top 101,600 : font_color 101,145,145,145 : font_bold 101 : caption 101,"Start" : on_click 101, balayage button 102 : left 102,10 : width 102,110 : top 102,550 : font_color 102,145,145,145 : font_bold 102 : caption 102,"Analyse" : on_click 102, analyse hide 102 maximize 0 : color 0,200,200,255 : caption 0, "Reperage radar" alpha 1 : left 1,580 : top 1,650 : font_color 1,0,0,1 : font_bold 1 : ' affichage degree
' création du cadre radar 2d_pen_width 5 2d_rectangle 300,50,1000,600 end
balayage: for i=4.716 to 11 step 0.03 degree=degree+1.7142864 caption 1, "Degrées :" + str$(int(degree)) x=int(268*(cos(i))) y=int(268*(sin(i))) 2d_pen_width 5 : 2d_pen_color 0,0,0: 2d_line y1,x1,y1+x,x1+y wait 20 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1+1+x,x1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1+1+x,x1+1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1-1+x,x1-1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1-1+x,x1+1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1+1+x,x1-1+y ' Traitement echo si echo rand=int((rnd(posiecho))) dist=int((rnd(distance))) if rand=5 and presecho=0 dist=int((rnd(distance))) dist1=200-dist alerte=200-dist xx=int((268-dist)*(cos(i))) yy=int((268-dist)*(sin(i))) presecho=1 end_if if presecho>0 presecho=presecho+1 end_if
if presecho=15 if dist1<21 alpha inecho : font_color inecho,255,0,0 : left inecho,10 : top inecho,afpo : font_bold inecho : caption inecho, "Echo n°:"+str$(inecho)+"-degrée :"+ str$(int(degree))+" Dist="+str$(int(dist1)) + " Echo rapproché" 2d_pen_width 5 : 2d_pen_color 255,0,0: 2d_circle y1+(xx-1),x1+(yy-1),2 else 2d_pen_width 5 : 2d_pen_color 0,0,0: 2d_circle y1+(xx-1),x1+(yy-1),2 alpha inecho : font_color inecho,255,0,0 : left inecho,10 : top inecho,afpo : font_bold inecho : caption inecho, "Echo n°:"+str$(inecho)+"-degrée :"+ str$(int(degree))+" Dist="+str$(int(dist1)) font_color inecho,0,0,0 end_if inecho=inecho+1 afpo=afpo+15 presecho=0 beep end_if next i show 102 hide 101 end
analyse: beep end
sortie: terminate end | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Radar pour futur projet Sam 16 Aoû 2014 - 11:07 | |
| Ca prend forme ! J'ai quelques remarques à te faire, au sujet de la structure de ton code. 1. essaye de faire une indentation plus rigoureuse. Le code sera d'autant plus lisible et plus facile à maintenir. 2. les routines évènement (celles déclenchées par un ON_xxx comme un ON_CLICK, par exemple) sont des sous-programmes qui sont exécutées comme si elles avaient été appelées par la commande GOSUB. Il faut donc impérativement les terminer par RETURN et non par END, car sinon, tu perturbes la gestion interne de la pile des retours dans Panoramic. Certes, dans l'état actuel du programme, tu ne t'en rends pas encore compte. Mais lorsque tu utiliseras GOSUB à l'intérieur de ces routines, tu auras des surprises... 3. évite la commande WAIT sauf cas très particuliers. Elle est totalement bloquante et empêche Windows de gérer ses évènements pendant cette période. Autant dire qu'au niveau application, tout est figé et l'attente ne sert à rien, sauf à faire passer le temps. Utilise plutôt la commande PAUSE à la place. Je me suis permis de reformater ton code en tenant compte de ces idées. J'ai mis des commentaires explicatifs dans le source: - Code:
-
' description programme ' Un balayage en une passe trouve des échos, puis analyse l'image pour trouver la sortie la mieux adaptée ' Un tirage aléatoire des échos dans l'attente de connecter un interface servo ave un radar ultrason ' Création d'un dessin 3D de la scene
' déclaration de variable dim i : ' boucle dim y,x : ' Coordonnées balayage dim y1,x1 : ' Coordonnées centre radar dim degree : ' Variable degrée dim af : ' Variable affichage texte echo dim posiecho : ' Position aléatoire de l'echo (En remplacement interface) dim distance : ' Distance de l'echo aléatoire (En remplacement interface) dim rand : ' Probabilité d'echo (En remplacement interface) dim dist : ' Variable de distance echo (En remplacement interface) dim afpo : ' Variable position affichage echo (top) dim inecho : ' Incrementation echo dim tempoecho : ' Tempo affichage Echo (Pour eviter d'être écrasé) dim presecho : ' Echo trouvé dim xx,yy : ' Retard écho dim dist1 : ' Vrai distance dim alerte : ' echo distance minimale dim line1, line2, line3, line4 : ' position ligne périmètre ' valeur variable y1=650 X1=325 degree=0 posiecho=8 distance=200 afpo=30 inecho=2 tempoecho=1 presecho=0 alerte=20 ' déclaration de label label sortie, balayage, analyse
' déclaration fenêtre principale button 100 : left 100,10 : width 100,110 : top 100,650 : font_color 100,145,145,145 : font_bold 100 : caption 100,"Exit" : on_click 100, sortie button 101 : left 101,10 : width 101,110 : top 101,600 : font_color 101,145,145,145 : font_bold 101 : caption 101,"Start" : on_click 101, balayage button 102 : left 102,10 : width 102,110 : top 102,550 : font_color 102,145,145,145 : font_bold 102 : caption 102,"Analyse" : on_click 102, analyse hide 102 maximize 0 : color 0,200,200,255 : caption 0, "Reperage radar" alpha 1 : left 1,580 : top 1,650 : font_color 1,0,0,1 : font_bold 1 : ' affichage degree
' création du cadre radar 2d_pen_width 5 2d_rectangle 300,50,1000,600 end
balayage: for i=4.716 to 11 step 0.03 degree=degree+1.7142864 caption 1, "Degrées :" + str$(int(degree)) x=int(268*(cos(i))) y=int(268*(sin(i))) 2d_pen_width 5 : 2d_pen_color 0,0,0: 2d_line y1,x1,y1+x,x1+y pause 20 : ' <<<====== attention: wait est totalement bloquant ! wait 20 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1+1+x,x1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1+1+x,x1+1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1-1+x,x1-1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1-1+x,x1+1+y 2d_pen_width 5 : 2d_pen_color 255,255,255: 2d_line y1,x1,y1+1+x,x1-1+y ' Traitement echo si echo rand=int((rnd(posiecho))) dist=int((rnd(distance))) if rand=5 and presecho=0 dist=int((rnd(distance))) dist1=200-dist alerte=200-dist xx=int((268-dist)*(cos(i))) yy=int((268-dist)*(sin(i))) presecho=1 end_if if presecho>0 presecho=presecho+1 end_if ' tu aurais pu faire simplement: ' if presecho>0 then presecho=presecho+1
if presecho=15 if dist1<21 alpha inecho : font_color inecho,255,0,0 : left inecho,10 : top inecho,afpo : font_bold inecho : caption inecho, "Echo n°:"+str$(inecho)+"-degrée :"+ str$(int(degree))+" Dist="+str$(int(dist1)) + " Echo rapproché" 2d_pen_width 5 : 2d_pen_color 255,0,0: 2d_circle y1+(xx-1),x1+(yy-1),2 else 2d_pen_width 5 : 2d_pen_color 0,0,0: 2d_circle y1+(xx-1),x1+(yy-1),2 alpha inecho : font_color inecho,255,0,0 : left inecho,10 : top inecho,afpo : font_bold inecho : caption inecho, "Echo n°:"+str$(inecho)+"-degrée :"+ str$(int(degree))+" Dist="+str$(int(dist1)) font_color inecho,0,0,0 end_if inecho=inecho+1 afpo=afpo+15 presecho=0 beep end_if next i show 102 hide 101 return : ' end <<<====toujours terminer un sous-programme par RETURN !
analyse: beep return : ' end <<<====toujours terminer un sous-programme par RETURN !
sortie: terminate ' end <<<===== ce END ne sera jamais exécuté. TERMINATE est la dernière commande exécutée. | |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Radar pour futur projet Sam 16 Aoû 2014 - 11:19 | |
| Merci Klaus pour l'aide, je regarde le code modifié.
Sympas | |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Radar pour futur projet Sam 16 Aoû 2014 - 11:23 | |
| J'ai compris pour les Return, La différence entre pause et wait aussi.
Merci.
PS: Déjà j'essaye de ne plus utiliser de GOTO, source PAPY je crois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Radar pour futur projet Sam 16 Aoû 2014 - 11:37 | |
| C'est à ça que ça sert, le forum. Aider à faire progresser mutuellement... | |
| | | Contenu sponsorisé
| Sujet: Re: Radar pour futur projet | |
| |
| | | | Radar pour futur projet | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |