FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» un nouveau editeur panobasic
par pascal10000 Hier à 21:52

» COMPILATEUR V 0.9 beta 7 du 10 aout 2017
par Jack Hier à 20:23

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Hier à 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Hier à 19:58

» Compilateur FBPano
par jean_debord Hier à 8:49

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

» Troncature dans une image
par JL35 Mer 9 Aoû 2017 - 13:45

» A chacun son point de vue
par papydall Mar 8 Aoû 2017 - 17:20

» Problème avec les chaines de caractères
par bignono Dim 6 Aoû 2017 - 9:33

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 clavier_afficheur

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
loulou08

avatar

Nombre de messages : 63
Age : 74
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

MessageSujet: clavier_afficheur   Jeu 17 Oct 2013 - 19:58

bonsoir a tous
 un inutilitaire de plus quoique ?

mode d'emploi dans la bordure de la fenetre
Code:

 error_french
 height 0,600
 top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
 caption 0,"double-cliquer sur un afficheur pour lui donner le focus. cliquer sur une touche "
 dim digit7,digi,lft,nb_dig
 label number
 label 7_segments:gosub 7_segments
 lft=30:nb_dig=4
 for i=1 to nb_dig
 digi=i*100
 digit7_segments(digi,50,lft)
 on_double_click digi,number
 lft=lft+170
 width 0,lft+30
 next i

 color digi+8,22,220,22
 digit7=digi
 label clavier_numerique : gosub clavier_numerique
 dim N%,V%,P%,H%,W%,T%,L%,CR%,CV%,CB%,CT$
dim FN$,FS%,FB%,FI%,FU%,RF%,GF%,BF%

' ======
end :' ==
' ======
number:
digit7=number_double_click
for i=1 to nb_dig
 digi=i*100
 color digi+8,162,162,162
 next i
color digit7+8,20,220,22
return


7_segments:

 dim segment$,led$  ,del,point,digist1,digit2,digit3,digit4,i
label affiche
return
sub  digit7_segments(digit,tp,lt)
container digit: top digit,tp:left digit,lt:width digit,150:height digit,250
color digit,130,130,130:caption digit,"afficheur 7_segments         "
alpha digit+1:top digit+1,20:left digit+1,40:parent digit+1,digit  : caption digit+1,"A"
color digit+1,162,162,162 :width digit+1,60:height digit+1,21
alpha digit+2:top digit+2,35:left digit+2,105 :parent digit+2,digit : caption digit+2,"B"
color digit+2,162,162,162 :width digit+2,21:height digit+2,75
alpha digit+3:top digit+3,130:left digit+3,105 :parent digit+3,digit: caption digit+3,"C"
color digit+3,162,162,162 :width digit+3,21:height digit+3,75
alpha digit+4:top digit+4,200:left digit+4,40:parent digit+4,digit  : caption digit+4,"D"
color digit+4,162,162,162 :width digit+4,60:height digit+4,21
alpha digit+5:top digit+5,130:left digit+5,15 :parent digit+5,digit : caption digit+5,"E"
color digit+5,162,162,162 :width digit+5,21:height digit+5,75
alpha digit+6:top digit+6,35:left digit+6,15 :parent digit+6,digit  : caption digit+6,"F"
color digit+6,162,162,162 :width digit+6,21:height digit+6,75
alpha digit+7:top digit+7,110:left digit+7,40:parent digit+7,digit : caption digit+7,"G"
color digit+7,162,162,162 :width digit+7,60:height digit+7,21

alpha digit+8:top digit+8,220:left digit+8,115 :parent digit+8,digit: caption digit+8,"P"
color digit+8,162,162,162 :width digit+8,21:height digit+8,21
 end_sub
'  ===============================
affiche:
for i= 0 to 6
    led$=mid$(segment$,i+1,1)
    del=val(led$)
    if i=0 and del=1 then color digit7+1,10,250,10
    if i=0 and del=0 then color digit7+1,162,162,162
    if i=1 and del=1 then color digit7+2,10,250,10
    if i=1 and del=0 then color digit7+2,162,162,162
    if i=2 and del=1 then color digit7+3,10,250,10
    if i=2 and del=0 then color digit7+3,162,162,162
    if i=3 and del=1 then color digit7+4,10,250,10
    if i=3 and del=0 then color digit7+4,162,162,162
    if i=4 and del=1 then color digit7+5,10,250,10
    if i=4 and del=0 then color digit7+5,162,162,162
    if i=5 and del=1 then color digit7+6,10,250,10
    if i=5 and del=0 then color digit7+6,162,162,162
    if i=6 and del=1 then color digit7+7,10,250,10
    if i=6 and del=0 then color digit7+7,162,162,162
next i
return
'  ====================================
clavier_numerique:
label clavier
dim num,aff$,tch,lt_cav

num=digi+100
lt_cav=(width(0)/2-100)

 '              NUM => numero system de depart
 '               :   TP  => top  clavier
 '               :   :  lt_cav  => left clavier
 '               :   :   :
   clavier_hexa(num,320,lt_cav)

return
'=============================
clavier:
 for i=1 to 16
  if clicked(i+num)=1 then tch=i-1
 next i
select tch
case 0 :segment$="1111110":gosub affiche:return
case 1 :segment$="0110000":gosub affiche:return
case 2 :segment$="1101101":gosub affiche:return
case 3 :segment$="1111001":gosub affiche:return
case 4 :segment$="0110011":gosub affiche:return
case 5 :segment$="1011011":gosub affiche:return
case 6 :segment$="1011111":gosub affiche:return
case 7 :segment$="1110000":gosub affiche:return
case 8 :segment$="1111111":gosub affiche:return
case 9 :segment$="1111011":gosub affiche:return
case 10 :segment$="1110111":gosub affiche:return
case 11 :segment$="0011111":gosub affiche:return
case 12 :segment$="1001110":gosub affiche:return
case 13 :segment$="0111101":gosub affiche:return
case 14 :segment$="1001111":gosub affiche:return
case 15 :segment$="1000111":gosub affiche:return
end_select
return
' ===============
  sub clavier_hexa(num,tp,lt)
 dim_local  i,j,ii
 container num+20:top num+20,tp:left num+20,lt
 caption num+20,"clavier_alphanumérique"
 height  num+20,200: color num+20,200,200,50
 for i=1 to 16
 ii=ii+1:if ii=5 then j=j+1:ii=1
 button i+num:width i+num,21:parent i+num,num+20
 top i+num,(j*30)+30: left i+num,(ii*30)+5
 caption i+num,hex$(i-1)
 on_click i+num,clavier
 next i
 end_sub

 ' ==============================

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramicetardinouno.blogspot.fr/
bignono

avatar

Nombre de messages : 1085
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: clavier_afficheur   Jeu 17 Oct 2013 - 20:04

C'est sympa comme afficheur!Smile 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clavier_afficheur   Jeu 17 Oct 2013 - 20:24

C’est joli  loulou08.
Seul petit regret : les lettres A,C,E et F sont en majuscules (et c’est ce qu’il faut) mais les lettres b et d sont en minuscules (et pour ça, on ne peut rien!)  


Dernière édition par papydall le Ven 18 Oct 2013 - 2:19, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7961
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 17 Oct 2013 - 20:32

heu...et comment on affiche 10 ou 100 ou 1000...scratch

Mais c'est vrai que c' est sympa comme affichage.
Bravo loulou08
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clavier_afficheur   Jeu 17 Oct 2013 - 20:40

@Ygeronimi

Pour afficher 10, on affiche 1 puis on affiche 0 à la suite.
De même pour afficher 1000 , on affiche 1, puis on affiche 0 puis on affiche 0 puis on affiche 0 puis … ouf c’est fini ! Very Happy

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jean Claude

avatar

Nombre de messages : 4988
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: clavier_afficheur   Jeu 17 Oct 2013 - 21:13

Bravo, beau travail.

Je vois bien une application pour le carte ARDUINO (Sauf erreur).

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clavier_afficheur   Jeu 17 Oct 2013 - 21:19

@loulou08

En ligne 38, tu déclares par DIM les variables  digist1 (avec un s), digit2, digit3, digit4 et tu ne l’utilises pas dans le programme.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 0:23

bonsoir a tous
juste un mot "super"
@ jean claude
tu peux trouver sur mon webdav le programme "parallele" ecrit avec l'aide te tous et specialement papydall
il permet de connecter un affichage digital avec panoramic
la partie interressante est le convertisseur de code binaire (merci papydall)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 1:09

mindstorm , je t’en prie, il n’y a pas de quoi me remercier : on apprend tous les uns des autres.


Dernière édition par papydall le Ven 18 Oct 2013 - 12:52, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 2:17

@loulou08

Le sous-programme affiche :
Code:
affiche:
for i= 0 to 6
    led$=mid$(segment$,i+1,1)
    del=val(led$)    
    if i=0 and del=1 then color digit7+1,10,250,10
    if i=0 and del=0 then color digit7+1,162,162,162
    if i=1 and del=1 then color digit7+2,10,250,10
    if i=1 and del=0 then color digit7+2,162,162,162
    if i=2 and del=1 then color digit7+3,10,250,10
    if i=2 and del=0 then color digit7+3,162,162,162
    if i=3 and del=1 then color digit7+4,10,250,10
    if i=3 and del=0 then color digit7+4,162,162,162
    if i=4 and del=1 then color digit7+5,10,250,10
    if i=4 and del=0 then color digit7+5,162,162,162
    if i=5 and del=1 then color digit7+6,10,250,10
    if i=5 and del=0 then color digit7+6,162,162,162
    if i=6 and del=1 then color digit7+7,10,250,10
    if i=6 and del=0 then color digit7+7,162,162,162
' next i
' return
contient 14 tests IF . En y regardant de plus près pour comprendre sa logique, on peut l’optimiser en un seul test IF !!! qui devient ainsi :
Code:
affiche:
for i= 0 to 6
    led$=mid$(segment$,i+1,1)
    del=val(led$)    
    if del = 1 then color digit7+1+i,10,250,10 : else : color digit7+1+i,162,162,162
 next i
 return
Hé bien ça marche!  Smile


Le sous-programme clavier :
Code:
clavier:
 for i=1 to 16
  if clicked(i+num)=1 then tch=i-1
 next i
select tch
case 0 :segment$="1111110": gosub affiche:return
case 1 :segment$="0110000": gosub affiche:return
case 2 :segment$="1101101": gosub affiche:return
case 3 :segment$="1111001": gosub affiche:return
case 4 :segment$="0110011": gosub affiche:return
case 5 :segment$="1011011": gosub affiche:return
case 6 :segment$="1011111": gosub affiche:return
case 7 :segment$="1110000": gosub affiche:return
case 8 :segment$="1111111": gosub affiche:return
case 9 :segment$="1111011": gosub affiche:return
case 10 :segment$="1110111": gosub affiche:return
case 11 :segment$="0011111": gosub affiche:return
case 12 :segment$="1001110": gosub affiche:return
case 13 :segment$="0111101": gosub affiche:return
case 14 :segment$="1001111": gosub affiche:return
case 15 :segment$="1000111": gosub affiche:return
end_select
gosub affiche
return
qui comporte 16 fois les instructions gosub affiche : return peut ne comporter qu'une seule instruction gosub affiche

Code:
clavier:
  for i=1 to 16
     if clicked(i+num)=1 then tch=i-1
  next i
  select tch
     case 0 :segment$="1111110"
     case 1 :segment$="0110000"
     case 2 :segment$="1101101"
     case 3 :segment$="1111001"
     case 4 :segment$="0110011"
     case 5 :segment$="1011011"
     case 6 :segment$="1011111"
     case 7 :segment$="1110000"
     case 8 :segment$="1111111"
     case 9 :segment$="1111011"
     case 10 :segment$="1110111"
     case 11 :segment$="0011111"
     case 12 :segment$="1001110"
     case 13 :segment$="0111101"
     case 14 :segment$="1001111"
     case 15 :segment$="1000111"
  end_select
  gosub affiche
return
Par ailleurs, je voie que tu mets un peu partout tantôt un LABEL, tantôt un DIM.
Je te déconseille cette manière de coder. Cela prouve que tu n’as pas pris le temps nécessaire pour structurer ton programme et que tes idées viennent en fonction de l’avancement de ton code.  La maintenance de ton programme deviendra assez difficile si un jour tu te décides à l’améliorer.
Utilise autant que faire se peut les procédures SUB qui peuvent être indépendantes de tout programme qui l’utiliserait en les paramétrant. Là tu y mettras tes variables locales. Et enfin aère un peu le code : il gagnera en lisibilité.

Quelqu’un a dit :
« Un bon algorithme est comme un couteau tranchant —il fait exactement ce que l’on attend de lui, avec un minimum d’efforts. L’emploi d’un mauvais algorithme pour résoudre un problème revient à essayer de couper un steak avec un tournevis : vous finirez sans doute par obtenir un résultat digeste, mais vous accomplirez beaucoup plus d’efforts que nécessaire, et le résultat aura peu de chances d’être esthétiquement satisfaisant.»


Ce sont des conseils amicaux et tu n'est pas obligé de les suivre.  lol!

Mon délire ne diminue en rien ton mérite d'avoir essayé  et réussi ton programme qui est fonctionnel.Very Happy

A+


Dernière édition par papydall le Ven 18 Oct 2013 - 12:56, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
mindstorm

avatar

Nombre de messages : 530
Age : 48
Localisation : charente
Date d'inscription : 13/02/2013

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 8:18

bonjour a tous
MERCI papydall d'etre si modeste
MERCI papydall de prendre le temps de relire les codes pour nous donner le petit plus
MERCI de nous presenter des codes mathematiques incroyable
bon tu as compris
lol! 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 8:58

Merci pour cet excellent outil (très bien pour simuler l'électronique  Wink )
Je te mets ma version qui a des similitudes avec les propositions de Papydall: (Je ne reprends pas ses explications, je dois partir au travail)
Code:
'  ====================================
'  Afficheur 7 ségments par loulou08
'  Source écrit en Basic Panoramic
'  ====================================

 label number, clavier

 dim digit7,digi,lft,nb_dig,segment$, led$,del,point,i,num,aff$,tch,lt_cav
 dim N%,V%,P%,H%,W%,T%,L%,CR%,CV%,CB%,CT$
 dim FN$,FS%,FB%,FI%,FU%,RF%,GF%,BF%

 error_french
 height 0,600 :  top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2
 caption 0,"double-cliquer sur un afficheur pour lui donner le focus. cliquer sur une touche "

 lft=30:nb_dig=4

 for i=1 to nb_dig
   digi=i*100 :  digit7_segments(digi,50,lft)
   on_double_click digi,number
   lft=lft+170 : width 0,lft+30
 next i

 color digi+8,22,220,22
 digit7=digi : num=digi+100 : lt_cav=(width(0)/2-100)

'  ====================================
'  NUM    =>   numero system de depart
'  TP     =>   top  clavier
'  lt_cav =>   left clavier
'               :   :   :
 clavier_hexa(num,320,lt_cav)

end
' ======


'  ===============================
number:
digit7=number_double_click
for i=1 to nb_dig
  digi=i*100 : color digi+8,162,162,162
next i
color digit7+8,20,220,22
return

'  ===============================
sub  digit7_segments(digit,tp,lt)
  container digit: top digit,tp:left digit,lt:width digit,150:height digit,250
  color digit,130,130,130:caption digit, "Afficheur " + str$(digit/100)
  alpha digit+1:top digit+1,20:left digit+1,40:parent digit+1,digit
  color digit+1,162,162,162 :width digit+1,60:height digit+1,21
  alpha digit+2:top digit+2,35:left digit+2,105 :parent digit+2,digit
  color digit+2,162,162,162 :width digit+2,21:height digit+2,75
  alpha digit+3:top digit+3,130:left digit+3,105 :parent digit+3,digit
  color digit+3,162,162,162 :width digit+3,21:height digit+3,75
  alpha digit+4:top digit+4,200:left digit+4,40:parent digit+4,digit
  color digit+4,162,162,162 :width digit+4,60:height digit+4,21
  alpha digit+5:top digit+5,130:left digit+5,15 :parent digit+5,digit
  color digit+5,162,162,162 :width digit+5,21:height digit+5,75
  alpha digit+6:top digit+6,35:left digit+6,15 :parent digit+6,digit
  color digit+6,162,162,162 :width digit+6,21:height digit+6,75
  alpha digit+7:top digit+7,110:left digit+7,40:parent digit+7,digit
  color digit+7,162,162,162 :width digit+7,60:height digit+7,21
  alpha digit+8:top digit+8,220:left digit+8,115 :parent digit+8,digit
  color digit+8,162,162,162 :width digit+8,21:height digit+8,21
end_sub
 
'  ===============================
sub affiche()
for i= 0 to 6
    led$=mid$(segment$,i+1,1)
    del=val(led$)
    if del = 1 then color digit7+1+i,10,250,10 : else : color digit7+1+i,162,162,162
next i
end_sub


'=============================
clavier:
 for i=1 to 16
  if clicked(i+num)=1 then tch=i-1
 next i
select tch
  case 0  :segment$="1111110"
  case 1  :segment$="0110000"
  case 2  :segment$="1101101"
  case 3  :segment$="1111001"
  case 4  :segment$="0110011"
  case 5  :segment$="1011011"
  case 6  :segment$="1011111"
  case 7  :segment$="1110000"
  case 8  :segment$="1111111"
  case 9  :segment$="1111011"
  case 10 :segment$="1110111"
  case 11 :segment$="0011111"
  case 12 :segment$="1001110"
  case 13 :segment$="0111101"
  case 14 :segment$="1001111"
  case 15 :segment$="1000111"
end_select
affiche()
return

' ===============
 sub clavier_hexa(num,tp,lt)
 dim_local  i,j,ii
 container num+20:top num+20,tp:left num+20,lt
 caption num+20,"clavier_alphanumérique"
 height  num+20,200: color num+20,200,200,50
 for i=1 to 16
   ii=ii+1:if ii=5 then j=j+1:ii=1
   button i+num:width i+num,21:parent i+num,num+20
   top i+num,(j*30)+30: left i+num,(ii*30)+5
   caption i+num,hex$(i-1)
   on_click i+num,clavier
 next i
 end_sub
' ==============================


Dernière édition par Jicehel le Ven 18 Oct 2013 - 12:20, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
loulou08

avatar

Nombre de messages : 63
Age : 74
Localisation : Champagne-Ardenne
Date d'inscription : 16/05/2010

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 10:59

Bonjour
je vous remercie d' avoir étudie mon programme
je prends note  de vos conseils avisés

Pour ''b et c''  c'est le problème de l'afficheur 7 segments
il faut un afficheur 14 ou 16 segments
comme j'ai pris la solution   de facilité en prenant un
ALPHA comme voyant  pour éviter les fichiers ''BMP'' (pas pratique sur un Forum)
on ne peux pas  incliner un ALPHA
oui j'avais une idée pour la carte Arduino  

Merci a tous et bonne  journée
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramicetardinouno.blogspot.fr/
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 11:20

Bonjour tout le monde.

Le  code de Jicehel  (qui fait exactement la même chose que celui de loulou08) est mieux  structuré, son étude et sa maintenance sera plus facile.
Personnellement je procède ainsi ou presque.

NB : ligne 8, il manque une virgule entre les 2 variables segment$ et led$
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: clavier_afficheur   Ven 18 Oct 2013 - 12:23

Merci papydall, j'avais corrigé la déclaration car je n'avais pas fait attention aux digit1, 2, 3 et 4. En lisant les commentaires, je m'en suis rendu compte et je les avais supprimés du listing publié en retirant une virgule de trop Wink

En tout cas, loulou08, si tu as d'autres contrôles du même acabit, je suis très preneur, c'est super pratique et esthétique.


Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 13:43

J'ai une petite question, j'ai repris le code de loulou08 sur son site avec les progress_bar, mais je n'arrive pas à un affichage très propre, les segments ne s'affichent pas assez rapidement (en utilisant les progress bar).
Je dois donc mal m'y prendre ou j'ai oublié une astuce.

Code:
error_french
 dim nun_afficheur,compt%
  nun_afficheur=100 : digit7_segments(nun_afficheur,50,130,"afficheur 7_segments        ")
  for compt% = 9 to 0 step -1
    affiche(nun_afficheur,compt%)
    pause 200 : display : pause 200 : display
    pause 600 : display
  next compt%
' =======
end :' ==
' =======

'
sub  digit7_segments(digit,tp,lt,titre$)
dim_local i
  container digit: top digit,tp:left digit,lt:width digit,150:height digit,250
  caption digit, titre$
  for i=1 to 7
    progress_bar digit+i: parent digit+i,digit : hide digit+i
    min digit+i,0:max digit+i,1
    if i = 1 or i = 4 or i = 7
            left digit+i,40 : width digit+i, 60
            if i = 1 then top digit+i,20
            if i = 4 then top digit+i,200
            if i = 7 then top digit+7,110
    else
            if i = 2 or i = 3 then left digit + i, 105
            if i = 5 or i = 6 then left digit + i, 15
            if i = 2 or i = 6 then top  digit + i, 35
            if i = 3 or i = 5 then top  digit + i, 130
            width digit+i,75
    end_if
    if i = 2 or i = 3 or i = 5 or i=6 then vertical digit+i
    show digit + i
  next i
  alpha digit+8:top digit+8,220:left digit+8,115 :parent digit+8,digit: caption digit+8,"P"
  color digit+8,220,220,220 :width digit+8,21:height digit+8,21
end_sub



sub affiche(digit,valeur)
dim_local del, led$,i,segment$

  if valeur > 10 then led$=right$(str$(int(valeur)),1) :  valeur = val(led$)
  select valeur
    case 0 :segment$="1111110"
    case 1 :segment$="0110000"
    case 2 :segment$="1101101"
    case 3 :segment$="1111001"
    case 4 :segment$="0110011"
    case 5 :segment$="1011011"
    case 6 :segment$="1011111"
    case 7 :segment$="1110000"
    case 8 :segment$="1111111"
    case 9 :segment$="1111011"
  end_select
 
  for i= 1 to 7
    led$=mid$(segment$,i,1) :  del=val(led$)
    if del=1
        position digit+i,1
    else
        position digit+i,0
    end_if
  next i
  display
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 15:08

Bonjour Jicehel,

J'avais un petit programme équivalent, si ça te conviens...

Code:
DIM n% , nn% , x% , aff$(10) , px%(7) , py%(7)

aff$(0)="1011111" : aff$(1)="0000011" : aff$(2)="1110110" : aff$(3)="1110011" : aff$(4)="0101011"
aff$(5)="1111001" : aff$(6)="1111101" : aff$(7)="1000011" : aff$(8)="1111111" : aff$(9)="1111011"

px%(1)=5 : py%(1)=0 : px%(2)=5 : py%(2)=28 : px%(3)=5 : py%(3)=56 : px%(4)=0 : py%(4)=5
px%(5)=0 : py%(5)=32 : px%(6)=35 : py%(6)=5 : px%(7)=35 : py%(7)=28+5

HEIGHT 0,140 : WIDTH 0,500 : COLOR 0,0,0,0
PICTURE 1 : PARENT 1,0 : LEFT 1,20 : TOP 1,20 : HEIGHT 1,60 : WIDTH 1,450 : COLOR 1,0,0,0
2D_TARGET_IS 1 : 2D_FILL_COLOR 0,255,0
affichage(0123456789)

END

SUB affichage(x$)
   FOR nn%=1 TO LEN(x$)
      x%=VAL(MID$(x$,nn%,1))
      FOR n%=1 TO 7
         IF MID$(aff$(x%),n%,1)="1"
            IF n%=1 OR n%=2 OR n%=3
               2D_RECTANGLE px%(n%)+(nn%*45-45),py%(n%),px%(n%)+(nn%*45-45)+30,py%(n%)+4
            ELSE
               2D_RECTANGLE px%(n%)+(nn%*45-45),py%(n%),px%(n%)+(nn%*45-45)+4,py%(n%)+23
            END_IF
         END_IF
      NEXT n%
   NEXT nn%
END_SUB

A toi de l'adapter !
Bon courage Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 15:21

Bonjour, j'ai modifié ainsi:
Code:
error_french
 dim nun_afficheur,compt%
  nun_afficheur=100 : digit7_segments(nun_afficheur,50,130,"afficheur 7_segments        ")
  for compt% = 9 to 0 step -1
    affiche(nun_afficheur,compt%)
    wait 200
    wait 600 : display
  next compt%
' =======
end :' ==
' =======

===============================================================================
sub  digit7_segments(digit,tp,lt,titre$)
  dim_local i
  container digit: top digit,tp:left digit,lt:width digit,150:height digit,250
  caption digit, titre$
  for i=1 to 7
    progress_bar digit+i: parent digit+i,digit : hide digit+i
    min digit+i,0:max digit+i,1
    if i = 1 or i = 4 or i = 7
            left digit+i,40 : width digit+i, 60
            if i = 1 then top digit+i,20
            if i = 4 then top digit+i,200
            if i = 7 then top digit+7,110
    else
            if i = 2 or i = 3 then left digit + i, 105
            if i = 5 or i = 6 then left digit + i, 15
            if i = 2 or i = 6 then top  digit + i, 35
            if i = 3 or i = 5 then top  digit + i, 130
            width digit+i,75
    end_if
    if i = 2 or i = 3 or i = 5 or i=6 then vertical digit+i
    show digit + i
  next i
  alpha digit+8:top digit+8,220:left digit+8,115 :parent digit+8,digit: caption digit+8,"P"
  color digit+8,220,220,220 :width digit+8,21:height digit+8,21 :wait 500
end_sub

==============================

sub affiche(digit,valeur)
  dim_local del, led$,i,segment$
  for i = 1 to 7
    position i+digit,0
  next i
  if valeur > 10 then led$=right$(str$(int(valeur)),1) :  valeur = val(led$)
  select valeur
    case 0 :segment$="1111110"
    case 1 :segment$="0110000"
    case 2 :segment$="1101101"
    case 3 :segment$="1111001"
    case 4 :segment$="0110011"
    case 5 :segment$="1011011"
    case 6 :segment$="1011111"
    case 7 :segment$="1110000"
    case 8 :segment$="1111111"
    case 9 :segment$="1111011"
  end_select

  for i= 1 to 7
    led$=mid$(segment$,i,1) :  del=val(led$)
    if del=1
        position digit+i,1
    else
        position digit+i,0
    end_if
  next i
  wait 1000
  display
end_sub
Revenir en haut Aller en bas
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 17:42

Oui, j'ai resimplifié un peu et j'ai mis un temps d'attente "incompréssible" dans la sub
Comme ça le "pause 400" de la boucle principal c'est juste pour avoir un décompte à la seconde, mais le pause 600 en fin de boucle, c'est juste pour que cela fonctionne dans tous les cas d'appels par le programme principal (si on retire le "pause 400", on voit quand même l'afficheur afficher le nombre demandé).

Code:
error_french
 dim nun_afficheur,compt%
  nun_afficheur=100 : digit7_segments(nun_afficheur,50,130,"afficheur 7_segments        ")
  for compt% = 9 to 0 step -1
    affiche(nun_afficheur,compt%)
    pause 400
  next compt%
  caption 0,"Terminé"
' =======
end :' ==
' =======

===============================================================================
sub  digit7_segments(digit,tp,lt,titre$)
  dim_local i
  container digit: top digit,tp:left digit,lt:width digit,150:height digit,250
  caption digit, titre$
  for i=1 to 7
    progress_bar digit+i: parent digit+i,digit : hide digit+i
    min digit+i,0:max digit+i,1
    if i = 1 or i = 4 or i = 7
            left digit+i,40 : width digit+i, 60
            if i = 1 then top digit+i,20
            if i = 4 then top digit+i,200
            if i = 7 then top digit+7,110
    else
            if i = 2 or i = 3 then left digit + i, 105
            if i = 5 or i = 6 then left digit + i, 15
            if i = 2 or i = 6 then top  digit + i, 35
            if i = 3 or i = 5 then top  digit + i, 130
            width digit+i,75
    end_if
    if i = 2 or i = 3 or i = 5 or i=6 then vertical digit+i
    show digit + i
  next i
  alpha digit+8:top digit+8,220:left digit+8,115 :parent digit+8,digit: caption digit+8,"P"
  color digit+8,220,220,220 :width digit+8,21:height digit+8,21 :wait 500
end_sub

==============================

sub affiche(digit,valeur)
  dim_local del, led$,i,segment$
  for i = 1 to 7
    position digit+i,0
  next i
  if valeur > 10 then led$=right$(str$(int(valeur)),1) :  valeur = val(led$)
  select valeur
    case 0 :segment$="1111110"
    case 1 :segment$="0110000"
    case 2 :segment$="1101101"
    case 3 :segment$="1111001"
    case 4 :segment$="0110011"
    case 5 :segment$="1011011"
    case 6 :segment$="1011111"
    case 7 :segment$="1110000"
    case 8 :segment$="1111111"
    case 9 :segment$="1111011"
  end_select
  for i= 1 to 7
    led$=mid$(segment$,i,1) :  del=val(led$)
    if del=1 then position digit+i,1
  next i
  pause 600
end_sub

Je suis quand même surpris qu'il faille 600ms pour pouvoir afficher les ségments en utilisant le progress bar.
Il faudrait voir en compilant.

Bon sinon, on peut toujours faire des Alpha comme initialement et là, c'est beaucoup plus rapide à l'execution.
Donc le premier est plus beau mais il nécessite qu'il y ait au moins 600 ms entre 2 affichage et le second est moins beau mais fonctionne très rapidement.

Code:
error_french
 dim nun_afficheur,compt%
  nun_afficheur=100 : digit7_segments(nun_afficheur,50,130,"afficheur 7_segments        ")
  for compt% = 9 to 0 step -1
    affiche(nun_afficheur,compt%)
    pause 100
  next compt%
  caption 0,"Terminé"
' =======
end :' ==
' =======

===============================================================================
sub  digit7_segments(digit,tp,lt,titre$)
  dim_local i
  container digit: top digit,tp:left digit,lt:width digit,150:height digit,250
  caption digit, titre$
  for i=1 to 7
    alpha digit+i: parent digit+i,digit : hide digit+i
    if i = 1 or i = 4 or i = 7
            left digit+i,40 : width digit+i, 60 : :height digit+i,21
            if i = 1 then top digit+i,20
            if i = 4 then top digit+i,200
            if i = 7 then top digit+7,110
    else
            if i = 2 or i = 3 then left digit + i, 105
            if i = 5 or i = 6 then left digit + i, 15
            if i = 2 or i = 6 then top  digit + i, 35
            if i = 3 or i = 5 then top  digit + i, 130
            height digit+i,75 : width digit+i, 21
    end_if
    show digit + i
  next i
  alpha digit+8:top digit+8,220:left digit+8,115 :parent digit+8,digit: caption digit+8,"P"
  color digit+8,220,220,220 :width digit+8,21:height digit+8,21 :wait 500
end_sub

==============================

sub affiche(digit,valeur)
  dim_local del, led$,i,segment$

  if valeur > 10 then led$=right$(str$(int(valeur)),1) :  valeur = val(led$)
  select valeur
    case 0 :segment$="1111110"
    case 1 :segment$="0110000"
    case 2 :segment$="1101101"
    case 3 :segment$="1111001"
    case 4 :segment$="0110011"
    case 5 :segment$="1011011"
    case 6 :segment$="1011111"
    case 7 :segment$="1110000"
    case 8 :segment$="1111111"
    case 9 :segment$="1111011"
  end_select
  for i= 1 to 7
    led$=mid$(segment$,i,1) :  del=val(led$)
    if del=1 then color digit+i,10,240,10 : else: color digit+i,220,220,220
  next i
end_sub

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 17:51

Je n'ai pas étudié tout le post, et je suis peut-être à côté de la plaque, mais il n'y a pas une police de caractères type 'segments', ce qui faciliterait bien les choses pour l'affichage ? avec la taille et la couleur appropriée.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 18:26

C'est vrai que c'est une solution aussi.
Dans ce cas là, on peut utiliser:
http://dl.dafont.com/dl/?f=digital_7 (ou http://www.fontspace.com/style-7/digital-7)
http://www.fontspace.com/download/746/d75e8aae1b7c44cdaf20635c512e062c/allen-r-walden_crystal.zip

Après c'est un choix. Soit d'ajouter la police, soit de rajouter 2 petites procédures.

Au fait Loulou08, c'est les vacances ? Plus grand choses sur ton site actuellement pour Arduino ou en Panoramic ...
(Tu ne croyais quand même pas que l'on ne s'en renderait pas compte !! Wink )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 19:11

Il y a aussi les polices db7Segments, ou DigifaceWide, et celle que je préfère Digital-7 Mono
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 20:07

Après reste à l'intégrer en data au programme et à gérer si elle est installée ou non et faire l'installation si nécessaire affraid
En tout cas, ça donne plusieurs moyen d'obtenir le résultat escompté.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: clavier_afficheur   Jeu 23 Avr 2015 - 21:25

C'est vrai, tu as raison, si on veut diffuser le programme il faut que la police soit installée, et ce n'est pas standard, finalement il vaut sans doute dessiner les chiffres, par programme, c'est plus universel.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: clavier_afficheur   Ven 24 Avr 2015 - 1:16

Pour intégrer un fichier dans un exécutable, il y a aussi la solution d'utiliser des "ressources". Ce sont justement des fichiers intégrés dans un exécutable ou dans une DLL, et Windows a les moyens (via un API) de les utiliser, extraire, supprimer etc.

Certes, Panoramic ne donne pas accès à ces fonctions. Mais KGF.dll a les outils nécessaires. On peut ajouter, par un programme Panoramic (si, si !) un ou plusieurs fichiers dans un exécutable sous forme de ressource, et cet exécutable peut ensuite utiliser ou extraire ces ressources et les restituer sous forme de fichiers. C'est un moyen plus "élégant" de transporter des images, sons etc, mais en fait n'importe quoi, y compris d'autres exécutables ou DLLs. On peut même y inclure un programme d'installation qui, une fois extrait et lancé par la commande EXECUTE, va installer, disons une police, un ActiveX, une application, ...

Tout est possible. Certes, pas en Panoramic pur, mais les utilisateurs de KGF.dll n'y verront qu'un inconvénient mineur...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: clavier_afficheur   

Revenir en haut Aller en bas
 
clavier_afficheur
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» clavier_afficheur

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Les inutilitaires-
Sauter vers: