Forum Liberty Basic France
• Index
(*** titre d'origine : entrer au clavier une valeur numérique. ***)
Ce n'est pas que je sois foncièrement contre cet "OK" de validation, mais il me semble plus simple, quand on entre un nombre au clavier, de finir par un "enter" au lieu de lâcher le clavier et de courir après la souris.
Hello tout le monde !
Ceci est de l'apprentissage de JustBasic, les fréquences utilisées dans le programme ne sont qu'un prétexte et je n'ai pas cherché à savoir si dans la vraie vie on peut les additionner comme ça. Sans doutes oui, mais c'est pas le but...
Comme c'est de la recherche, il y a aussi des bouts de code qui ne sont pas de mon fait (merci à Roland et à l'illustre inconnu).
Cette version est à base de roues codeuses.
A chaque changement de chiffre d'une roue, le nombre correspondant est recalculé.
Le programme devient long parce que j'ai fait au plus simple. Faire plus compact ajoutera un couche de réflexion, mais il y a sûrement moyen.
Il y a 4 nombres, l'attribution de leurs chiffres est codée en dur dans le programme, ce qui revient à une floppée de sous-programmes parfois quasiment identiques, aux numéros de boutons près.
Telles qu'elles sont actuellement programmées, les roues codeuses utilisent 2 buttons et 1 statictext par chiffre.
Le clavier n'est pas pris en compte.
Les chiffres sont indépendants les uns des autres, et passer de 9 à 0 n'incrémentera pas la roue directement à gauche. il y a quand même une exception pour le contrôle de volume : quand il dépassera 100, il sera automatiquement plafonné à 100.
Il me semble qu'on ne peut pas mettre plus de 100 contrôles par programme, donc 33 roues maxi ?
Voilà la chose, bonne lecture^^ :
Code VB :
(édité pour rectification d'un bug dans le sous-programme [chiffre15Down])
Edité par Christophe Le 20/12/2015 à 16h49
Ce n'est pas que je sois foncièrement contre cet "OK" de validation, mais il me semble plus simple, quand on entre un nombre au clavier, de finir par un "enter" au lieu de lâcher le clavier et de courir après la souris.
Hello tout le monde !
Ceci est de l'apprentissage de JustBasic, les fréquences utilisées dans le programme ne sont qu'un prétexte et je n'ai pas cherché à savoir si dans la vraie vie on peut les additionner comme ça. Sans doutes oui, mais c'est pas le but...
Comme c'est de la recherche, il y a aussi des bouts de code qui ne sont pas de mon fait (merci à Roland et à l'illustre inconnu).
Cette version est à base de roues codeuses.
A chaque changement de chiffre d'une roue, le nombre correspondant est recalculé.
Le programme devient long parce que j'ai fait au plus simple. Faire plus compact ajoutera un couche de réflexion, mais il y a sûrement moyen.
Il y a 4 nombres, l'attribution de leurs chiffres est codée en dur dans le programme, ce qui revient à une floppée de sous-programmes parfois quasiment identiques, aux numéros de boutons près.
Telles qu'elles sont actuellement programmées, les roues codeuses utilisent 2 buttons et 1 statictext par chiffre.
Le clavier n'est pas pris en compte.
Les chiffres sont indépendants les uns des autres, et passer de 9 à 0 n'incrémentera pas la roue directement à gauche. il y a quand même une exception pour le contrôle de volume : quand il dépassera 100, il sera automatiquement plafonné à 100.
Il me semble qu'on ne peut pas mettre plus de 100 contrôles par programme, donc 33 roues maxi ?
Voilà la chose, bonne lecture^^ :
Code VB :
dim courbeF1(500) dim courbeF2(500) dim courbeF3(500) 'data pi=3.1415926536 t=0 'longueur division longdiv=50 'pixels entre chaque division. considérer la division comme un trait sans épaisseur 'même si la division fera un pixel de large 'secondes par division long1=0.005 long2=0.002 long3=0.001 long4=0.0005 long5=0.0002 long6=0.0001 'secondes par division, pour affichage long1aff$=str$(long1*1000) long2aff$=str$(long2*1000) long3aff$=str$(long3*1000) long4aff$=str$(long4*1000) long5aff$=str$(long5*1000) long6aff$=str$(long6*1000) gosub [rouesCodeuses] 'pour préparer l'affichage d'un bouton "up", d'un "down" et d'un chiffre '(les valeurs des fréquences et volumes sont pré-réglées dans [rouesCodeuses] F1=nombre1:T1=1/F1:omega1=2*pi*F1 F2=nombre3:T2=1/F2:omega2=2*pi*F2 nomainwin WindowWidth = 800: UpperLeftX = 200 WindowHeight = 600: UpperLeftY = 200 graphicbox #1.gb 280,15,500,500 groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100 radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20 radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20 radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20 radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20 radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20 radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20 open "..." for window_nf as #1 #1 "trapclose [quit]" print #1.Nbr1,fonteNom$ print #1.Ch1,fonte$ print #1.Ch2,fonte$ print #1.Ch3,fonte$ print #1.Ch4,fonte$ print #1.Ch5,fonte$ print #1.Nbr2,fonteNom$ print #1.Ch6,fonte$ print #1.Ch7,fonte$ print #1.Ch8,fonte$ print #1.Nbr3,fonteNom$ print #1.Ch9,fonte$ print #1.Ch10,fonte$ print #1.Ch11,fonte$ print #1.Ch12,fonte$ print #1.Ch13,fonte$ print #1.Nbr4,fonteNom$ print #1.Ch14,fonte$ print #1.Ch15,fonte$ print #1.Ch16,fonte$ print #1.Ch1,chiffre1$ print #1.Ch2,chiffre2$ print #1.Ch3,chiffre3$ print #1.Ch4,chiffre4$ print #1.Ch5,chiffre5$ print #1.Ch6,chiffre6$ print #1.Ch7,chiffre7$ print #1.Ch8,chiffre8$ print #1.Ch9,chiffre9$ print #1.Ch10,chiffre10$ print #1.Ch11,chiffre11$ print #1.Ch12,chiffre12$ print #1.Ch13,chiffre13$ print #1.Ch14,chiffre14$ print #1.Ch15,chiffre15$ print #1.Ch16,chiffre16$ print #1.rdb3,"setfocus" gosub [sinusoides] 'calcul sinusoides, dessin écran et affichage sinusoides #1.gb "flush" wait Function Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) value = chiffre1*10000+chiffre2*1000+chiffre3*100+chiffre4*10+chiffre5 Nombre5ch=value End Function [quit] close #1 end [SParDiv1_On] deltaT=long1/longdiv:gosub [sinusoides]:wait [SParDiv1_off] wait [SParDiv2_On] deltaT=long2/longdiv:gosub [sinusoides]:wait [SParDiv2_Off] wait [SParDiv3_On] deltaT=long3/longdiv:gosub [sinusoides]:wait [SParDiv3_Off] wait [SParDiv4_On] deltaT=long4/longdiv:gosub [sinusoides]:wait [SParDiv4_off] wait [SParDiv5_On] deltaT=long5/longdiv:gosub [sinusoides]:wait [SParDiv5_Off] wait [SParDiv6_On] deltaT=long6/longdiv:gosub [sinusoides]:wait [SParDiv6_Off] wait [sinusoides] 'calcul des sinusoides t=0 for a=0 to 499 courbeF1(a)=(vol1*sin(omega1*t))/2 courbeF2(a)=(vol2*sin(omega2*t))/2 'courbeF3(a)=40*sin(omega3*t) courbeF3(a)=courbeF1(a)+courbeF2(a) t=t+deltaT next 'dessin de l'écran cls #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0" for x= 0 to 500 step longdiv #1.gb "line ";x;" 0 ";x;" 500" next for y= 0 to 500 step longdiv #1.gb "line 0 ";y;" 500 ";y next 'affichage des courbes sur l'écran #1.gb "color green" ph=180:midY1=50:midY2=150:midY3=350 oldY1=midY1:oldY2=midY2:oldY3=midY3 for n= 0 to 499 x=n y=midY1+courbeF1(n) #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y oldX1=x:oldY1=y y=midY2+courbeF2(n) #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y oldX2=x:oldY2=y y=midY3+courbeF3(n) #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y oldX3=x:oldY3=y next return [chiffre1Up] if chiffre1=9 then chiffre1=0 else chiffre1=chiffre1+1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre1$=str$(chiffre1) print #1.Ch1,chiffre1$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre1Down] if chiffre1=0 then chiffre1=9 else chiffre1=chiffre1-1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre1$=str$(chiffre1) print #1.Ch1,chiffre1$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre2Up] if chiffre2=9 then chiffre2=0 else chiffre2=chiffre2+1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre2$=str$(chiffre2) print #1.Ch2,chiffre2$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre2Down] if chiffre2=0 then chiffre2=9 else chiffre2=chiffre2-1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre2$=str$(chiffre2) print #1.Ch2,chiffre2$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre3Up] if chiffre3=9 then chiffre3=0 else chiffre3=chiffre3+1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre3$=str$(chiffre3) print #1.Ch3,chiffre3$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre3Down] if chiffre3=0 then chiffre3=9 else chiffre3=chiffre3-1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre3$=str$(chiffre3) print #1.Ch3,chiffre3$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre4Up] if chiffre4=9 then chiffre4=0 else chiffre4=chiffre4+1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre4$=str$(chiffre4) print #1.Ch4,chiffre4$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre4Down] if chiffre4=0 then chiffre4=9 else chiffre4=chiffre4-1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre4$=str$(chiffre4) print #1.Ch4,chiffre4$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre5Up] if chiffre5=9 then chiffre5=0 else chiffre5=chiffre5+1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre5$=str$(chiffre5) print #1.Ch5,chiffre5$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre5Down] if chiffre5=0 then chiffre5=9 else chiffre5=chiffre5-1 nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) chiffre5$=str$(chiffre5) print #1.Ch5,chiffre5$ omega1=2*pi*nombre1:gosub [sinusoides] wait [chiffre6Up] if chiffre6=0 then chiffre6=1 else chiffre6=0 print #1.Ch6,str$(chiffre6) nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8) if nombre2>100 then gosub [ecrete] vol1=nombre2:gosub [sinusoides] wait [chiffre6Down] if chiffre6=1 then chiffre6=0 else chiffre6=1 print #1.Ch6,str$(chiffre6) nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8) if nombre2>100 then gosub [ecrete] vol1=nombre2:gosub [sinusoides] wait [chiffre7Up] if chiffre7=9 then chiffre7=0 else chiffre7=chiffre7+1 nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8) if nombre2>100 then gosub [ecrete] chiffre7$=str$(chiffre7):print #1.Ch7,chiffre7$ vol1=nombre2:gosub [sinusoides] wait [chiffre7Down] if chiffre7=0 then chiffre7=9 else chiffre7=chiffre7-1 if chiffre6=1 then chiffre6=0:chiffre6$=str$(chiffre6):print #1.Ch6,chiffre6$ nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8) if nombre2>100 then gosub [ecrete] chiffre7$=str$(chiffre7) print #1.Ch7,chiffre7$ vol1=nombre2:gosub [sinusoides] wait [chiffre8Up] if chiffre8=9 then chiffre8=0 else chiffre8=chiffre8+1 nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8) if nombre2>100 then gosub [ecrete] chiffre8$=str$(chiffre8) print #1.Ch8,chiffre8$ vol1=nombre2:gosub [sinusoides] wait [chiffre8Down] if chiffre8=0 then chiffre8=9 else chiffre8=chiffre8-1 if chiffre6=1 then chiffre6=0:chiffre6$=str$(chiffre6):print #1.Ch6,chiffre6$ nombre2=Nombre5ch(0, 0, chiffre6, chiffre7, chiffre8) if nombre2>100 then gosub [ecrete] chiffre8$=str$(chiffre8) print #1.Ch8,chiffre8$ vol1=nombre2:gosub [sinusoides] wait [chiffre9Up] if chiffre9=9 then chiffre9=0 else chiffre9=chiffre9+1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre9$=str$(chiffre9) print #1.Ch9,chiffre9$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre9Down] if chiffre9=0 then chiffre9=9 else chiffre9=chiffre9-1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre9$=str$(chiffre9) print #1.Ch9,chiffre9$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre10Up] if chiffre10=9 then chiffre10=0 else chiffre10=chiffre10+1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre10$=str$(chiffre10) print #1.Ch10,chiffre10$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre10Down] if chiffre10=0 then chiffre10=9 else chiffre10=chiffre10-1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre10$=str$(chiffre10) print #1.Ch10,chiffre10$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre11Up] if chiffre11=9 then chiffre11=0 else chiffre11=chiffre11+1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre11$=str$(chiffre11) print #1.Ch11,chiffre11$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre11Down] if chiffre11=0 then chiffre11=9 else chiffre11=chiffre11-1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre11$=str$(chiffre11) print #1.Ch11,chiffre11$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre12Up] if chiffre12=9 then chiffre12=0 else chiffre12=chiffre12+1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre12$=str$(chiffre12) print #1.Ch12,chiffre12$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre12Down] if chiffre12=0 then chiffre12=9 else chiffre12=chiffre12-1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre12$=str$(chiffre12) print #1.Ch12,chiffre12$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre13Up] if chiffre13=9 then chiffre13=0 else chiffre13=chiffre13+1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre13$=str$(chiffre13) print #1.Ch13,chiffre13$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre13Down] if chiffre13=0 then chiffre13=9 else chiffre13=chiffre13-1 nombre3=Nombre5ch(chiffre9, chiffre10, chiffre11, chiffre12, chiffre13) chiffre13$=str$(chiffre13) print #1.Ch13,chiffre13$ omega2=2*pi*nombre3:gosub [sinusoides] wait [chiffre14Up] if chiffre14=0 then chiffre14=1 else chiffre14=0 print #1.Ch14,str$(chiffre14) nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16) if nombre4>100 then gosub [ecrete] vol2=nombre4:gosub [sinusoides] wait [chiffre14Down] if chiffre14=1 then chiffre14=0 else chiffre14=1 print #1.Ch14,str$(chiffre14) nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16) if nombre4>100 then gosub [ecrete] vol2=nombre4:gosub [sinusoides] wait [chiffre15Up] if chiffre15=9 then chiffre15=0 else chiffre15=chiffre15+1 print #1.Ch15,str$(chiffre15) nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16) if nombre4>100 then gosub [ecrete] vol2=nombre4:gosub [sinusoides] wait [chiffre15Down] if chiffre15=0 then chiffre15=9 else chiffre15=chiffre15-1 if chiffre14=1 then chiffre14=0:chiffre14$=str$(chiffre14):print #1.Ch14,chiffre14$ nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16) if nombre4>100 then gosub [ecrete] chiffre15$=str$(chiffre15) print #1.Ch15,chiffre15$ vol2=nombre4:gosub [sinusoides] wait [chiffre16Up] if chiffre16=9 then chiffre16=0 else chiffre16=chiffre16+1 nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16) if nombre4>100 then gosub [ecrete] vol2=nombre4:gosub [sinusoides] chiffre16$=str$(chiffre16) print #1.Ch16,chiffre16$ wait [chiffre16Down] if chiffre16=0 then chiffre16=9 else chiffre16=chiffre16-1 if chiffre14=1 then chiffre14=0:chiffre14$=str$(chiffre14):print #1.Ch14,chiffre14$ nombre4=Nombre5ch(0, 0, chiffre14, chiffre15, chiffre16) if nombre4>100 then gosub [ecrete] vol2=nombre4:gosub [sinusoides] chiffre16$=str$(chiffre16) print #1.Ch16,chiffre16$ wait [ecrete] if nombre2>100 then nombre2=100 chiffre6=1:print #1.Ch6,str$(chiffre6) chiffre7=0:print #1.Ch7,str$(chiffre7) chiffre8=0:print #1.Ch8,str$(chiffre8) end if if nombre4>100 then nombre4=100 chiffre14=1:print #1.Ch14,str$(chiffre14) chiffre15=0:print #1.Ch15,str$(chiffre15) chiffre16=0:print #1.Ch16,str$(chiffre16) end if return [rouesCodeuses] 'dimensions des roues hauteurNom=20 largeur=20 'largeur des roues intervalleH=23 'intervalle entre roues separmilliers=10 'espace séparant les miliers des centaines hauteurB=20 'hauteur des boutons "up" et "dwn" intervalleV=2 'intervalle entre boutons et chiffre hauteurChif=25 'hauteur de la zone recevant le chiffre PasH=largeur+intervalle fonte$="!font arial 15 25" fonteNom$="!font arial 12" 'disposition d'affichage nombre 1 à 5 chiffres nom1$="Fréquence 1:" PosXnb1=20 PosYnb1=10 nombre1=1200 nombre1$=right$(space$(5) + str$(nombre1),5) largeurNom1=5*largeur 'disposition d'affichage nombre 2 à 3 chiffres nom2$="Volume :" PosXnb2=180 PosYnb2=10 nombre2=70:vol1=nombre2 nombre2$=right$(space$(3) + str$(nombre2),3) largeurNom2=3*largeur 'disposition d'affichage nombre 3 à 5 chiffres nom3$="Fréquence 2:" PosXnb3=20 PosYnb3=110 nombre3=1500 nombre3$=right$(space$(5) + str$(nombre3),5) largeurNom3=5*largeur 'disposition d'affichage nombre 4 à 3 chiffres nom4$="Volume :" PosXnb4=180 PosYnb4=110 nombre4=70:vol2=nombre4 nombre4$=right$(space$(3) + str$(nombre4),3) largeurNom4=3*largeur '**** affichage nombre 1 **** 'nom du nombre XTitre1 = PosXnb1 YTitre1 = PosYnb1 statictext #1.Nbr1, nom1$, XTitre1, YTitre1, largeurNom1, hauteurNom PosYnb1 = PosYnb1 + hauteurNom + intervalleV 'affichage du chiffre des dizaines de milliers du nombre 1 chiffre1$ = mid$(nombre1$,1,1) chiffre1 = val(chiffre1$) X1 = PosXnb1 Y1up = PosYnb1 Y1ch = Y1up + hauteurB + intervalleV Y1dn = Y1ch + hauteurChif + intervalleV button #1.Ch1Up, "+", [chiffre1Up], UL, X1, Y1up, largeur, hauteurB statictext #1.Ch1, chiffre1$, X1, Y1ch, largeur, hauteurChif button #1.Ch1Dwn, "-", [chiffre1Down], UL, X1, Y1dn, largeur, hauteurB 'affichage du chiffre des miliers du nombre 1 chiffre2$=mid$(nombre1$,2,1) chiffre2=val(chiffre2$) X2 = X1 + intervalleH Y2up = PosYnb1 Y2ch = Y2up + hauteurB + intervalleV Y2dn = Y2ch + hauteurChif + intervalleV button #1.Ch2Up, "+", [chiffre2Up], UL, X2, Y2up, largeur, hauteurB statictext #1.Ch2, chiffre2$, X2, Y2ch, largeur, hauteurChif button #1.Ch2Dwn, "-", [chiffre2Down], UL, X2, Y2dn, largeur, hauteurB 'affichage du chiffre des centaines du nombre 1 chiffre3$=mid$(nombre1$,3,1) chiffre3=val(chiffre3$) X3 = X2 + separmilliers + intervalleH Y3up = PosYnb1 Y3ch = Y3up + hauteurB + intervalleV Y3dn = Y3ch + hauteurChif + intervalleV button #1.Ch3Up, "+", [chiffre3Up], UL, X3, Y3up, largeur, hauteurB statictext #1.Ch3, chiffre3$, X3, Y3ch, largeur, hauteurChif button #1.Ch3Dwn, "-", [chiffre3Down], UL, X3, Y3dn, largeur, hauteurB 'affichage du chiffre des dizaines du nombre 1 chiffre4$=mid$(nombre1$,4,1) chiffre4=val(chiffre4$) X4 = X3 + intervalleH Y4up = PosYnb1 Y4ch = Y4up + hauteurB + intervalleV Y4dn = Y4ch + hauteurChif + intervalleV button #1.Ch4Up, "+", [chiffre4Up], UL, X4, Y4up, largeur, hauteurB statictext #1.Ch4, chiffre4$, X4, Y4ch, largeur, hauteurChif button #1.Ch4Dwn, "-", [chiffre4Down], UL, X4, Y4dn, largeur, hauteurB 'affichage du chiffre des unités du nombre 1 chiffre5$=mid$(nombre1$,5,1) chiffre5=val(chiffre5$) X5 = X4 + intervalleH Y5up = PosYnb1 Y5ch = Y5up + hauteurB + intervalleV Y5dn = Y5ch + hauteurChif + intervalleV button #1.Ch5Up, "+", [chiffre5Up], UL, X5, Y5up, largeur, hauteurB statictext #1.Ch5, chiffre5$, X5, Y5ch, largeur, hauteurChif button #1.Ch5Dwn, "-", [chiffre5Down], UL, X5, Y5dn, largeur, hauteurB '**** affichage nombre 2 **** 'nom du nombre XTitre2 = PosXnb2 YTitre2 = PosYnb2 statictext #1.Nbr2, nom2$, XTitre2, YTitre2, largeurNom2, hauteurNom PosYnb2 = PosYnb2 + hauteurNom + intervalleV 'affichage du chiffre des centaines du nombre 2 chiffre6$ = mid$(nombre2$,1,1) chiffre6 = val(chiffre6$) X6 = PosXnb2 Y6up = PosYnb2 Y6ch = Y6up + hauteurB + intervalleV Y6dn = Y6ch + hauteurChif + intervalleV button #1.Ch6Up, "+", [chiffre6Up], UL, X6, Y6up, largeur, hauteurB statictext #1.Ch6, chiffre6$, X6, Y6ch, largeur, hauteurChif button #1.Ch6Dwn, "-", [chiffre6Down], UL, X6, Y6dn, largeur, hauteurB 'affichage du chiffre des dizaines du nombre 2 chiffre7$=mid$(nombre2$,2,1) chiffre7=val(chiffre7$) X7 = X6 + intervalleH Y7up = PosYnb1 Y7ch = Y7up + hauteurB + intervalleV Y7dn = Y7ch + hauteurChif + intervalleV button #1.Ch7Up, "+", [chiffre7Up], UL, X7, Y7up, largeur, hauteurB statictext #1.Ch7, chiffre7$, X7, Y7ch, largeur, hauteurChif button #1.Ch7Dwn, "-", [chiffre7Down], UL, X7, Y7dn, largeur, hauteurB 'affichage du chiffre des unités du nombre 1 chiffre8$=mid$(nombre2$,3,1) chiffre8=val(chiffre8$) X8 = X7 + intervalleH Y8up = PosYnb1 Y8ch = Y8up + hauteurB + intervalleV Y8dn = Y8ch + hauteurChif + intervalleV button #1.Ch8Up, "+", [chiffre8Up], UL, X8, Y8up, largeur, hauteurB statictext #1.Ch8, chiffre8$, X8, Y8ch, largeur, hauteurChif button #1.Ch8Dwn, "-", [chiffre8Down], UL, X8, Y8dn, largeur, hauteurB '**** affichage nombre 3 **** 'nom du nombre XTitre3 = PosXnb3 YTitre3 = PosYnb3 statictext #1.Nbr3, nom3$, XTitre3, YTitre3, largeurNom3, hauteurNom PosYnb3 = PosYnb3 + hauteurNom + intervalleV 'affichage du chiffre des dizaines de milliers du nombre 3 chiffre9$ = mid$(nombre3$,1,1) chiffre9 = val(chiffre9$) X9 = PosXnb3 Y9up = PosYnb3 Y9ch = Y9up + hauteurB + intervalleV Y9dn = Y9ch + hauteurChif + intervalleV button #1.Ch9Up, "+", [chiffre9Up], UL, X9, Y9up, largeur, hauteurB statictext #1.Ch9, chiffre9$, X9, Y9ch, largeur, hauteurChif button #1.Ch9Dwn, "-", [chiffre9Down], UL, X9, Y9dn, largeur, hauteurB 'affichage du chiffre des miliers du nombre 3 chiffre10$=mid$(nombre3$,2,1) chiffre10=val(chiffre10$) X10 = X9 + intervalleH Y10up = PosYnb3 Y10ch = Y10up + hauteurB + intervalleV Y10dn = Y10ch + hauteurChif + intervalleV button #1.Ch10Up, "+", [chiffre10Up], UL, X10, Y10up, largeur, hauteurB statictext #1.Ch10, chiffre10$, X10, Y10ch, largeur, hauteurChif button #1.Ch10Dwn, "-", [chiffre10Down], UL, X10, Y10dn, largeur, hauteurB 'affichage du chiffre des centaines du nombre 3 chiffre11$=mid$(nombre3$,3,1) chiffre11=val(chiffre11$) X11 = X10 + separmilliers + intervalleH Y11up = PosYnb3 Y11ch = Y11up + hauteurB + intervalleV Y11dn = Y11ch + hauteurChif + intervalleV button #1.Ch11Up, "+", [chiffre11Up], UL, X11, Y11up, largeur, hauteurB statictext #1.Ch11, chiffre11$, X11, Y11ch, largeur, hauteurChif button #1.Ch11Dwn, "-", [chiffre11Down], UL, X11, Y11dn, largeur, hauteurB 'affichage du chiffre des dizaines du nombre 3 chiffre12$=mid$(nombre3$,4,1) chiffre12=val(chiffre12$) X12 = X11 + intervalleH Y12up = PosYnb3 Y12ch = Y12up + hauteurB + intervalleV Y12dn = Y12ch + hauteurChif + intervalleV button #1.Ch12Up, "+", [chiffre12Up], UL, X12, Y12up, largeur, hauteurB statictext #1.Ch12, chiffre12$, X12, Y12ch, largeur, hauteurChif button #1.Ch12Dwn, "-", [chiffre12Down], UL, X12, Y12dn, largeur, hauteurB 'affichage du chiffre des unités du nombre 3 chiffre13$=mid$(nombre3$,5,1) chiffre13=val(chiffre13$) X13 = X12 + intervalleH Y13up = PosYnb3 Y13ch = Y13up + hauteurB + intervalleV Y13dn = Y13ch + hauteurChif + intervalleV button #1.Ch13Up, "+", [chiffre13Up], UL, X13, Y13up, largeur, hauteurB statictext #1.Ch13, chiffre13$, X13, Y13ch, largeur, hauteurChif button #1.Ch13Dwn, "-", [chiffre13Down], UL, X13, Y13dn, largeur, hauteurB '**** affichage nombre 4 **** 'nom du nombre XTitre4 = PosXnb4 YTitre4 = PosYnb4 statictext #1.Nbr4, nom4$, XTitre4, YTitre4, largeurNom4, hauteurNom PosYnb4 = PosYnb4 + hauteurNom + intervalleV 'affichage du chiffre des centaines du nombre 4 chiffre14$ = mid$(nombre4$,1,1) chiffre14 = val(chiffre14$) X14 = PosXnb4 Y14up = PosYnb4 Y14ch = Y14up + hauteurB + intervalleV Y14dn = Y14ch + hauteurChif + intervalleV button #1.Ch14Up, "+", [chiffre14Up], UL, X14, Y14up, largeur, hauteurB statictext #1.Ch14, chiffre14$, X14, Y14ch, largeur, hauteurChif button #1.Ch14Dwn, "-", [chiffre14Down], UL, X14, Y14dn, largeur, hauteurB 'affichage du chiffre des dizaines du nombre 4 chiffre15$=mid$(nombre4$,2,1) chiffre15=val(chiffre15$) X15 = X14 + intervalleH Y15up = PosYnb4 Y15ch = Y15up + hauteurB + intervalleV Y15dn = Y15ch + hauteurChif + intervalleV button #1.Ch15Up, "+", [chiffre15Up], UL, X15, Y15up, largeur, hauteurB statictext #1.Ch15, chiffre15$, X15, Y15ch, largeur, hauteurChif button #1.Ch15Dwn, "-", [chiffre15Down], UL, X15, Y15dn, largeur, hauteurB 'affichage du chiffre des unités du nombre 4 chiffre16$=mid$(nombre4$,3,1) chiffre16=val(chiffre16$) X16 = X15 + intervalleH Y16up = PosYnb4 Y16ch = Y16up + hauteurB + intervalleV Y16dn = Y16ch + hauteurChif + intervalleV button #1.Ch16Up, "+", [chiffre16Up], UL, X16, Y16up, largeur, hauteurB statictext #1.Ch16, chiffre16$, X16, Y16ch, largeur, hauteurChif button #1.Ch16Dwn, "-", [chiffre16Down], UL, X16, Y16dn, largeur, hauteurB return
(édité pour rectification d'un bug dans le sous-programme [chiffre15Down])
Edité par Christophe Le 20/12/2015 à 16h49
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Bah, comme il y a trente six façons d'entrer des nombres à la souris; il n'y a pas grand intérêt à passer par le clavier
Le principe des roues est nickel, sauf que les unités ne sont pas vraiment utiles; mais bon, pourquoi pas.
Faire interagir les roues entre elles pour le passage de 9 à 0 ne présente pas de difficultés, mais est aussi sans intérêt.
Dans la vraie vie, non seulement on peut additionner les fréquences, mais on peut moduler l'une par l'autre en amplitude, en fréquence ou en phase
D'ailleurs, tu pourrais introduire une roue de plus pour le déphasage d'une fréquence (des deux, ne servirait à rien puisque le déphasage est relatif de l'une à l'autre)
Une modulation d'amplitude ne serait pas mal (une HF modulée en BF)
Manquerait plus qu'envoyer ça sur une antenne en modulant avec un micro pour faire une radio locale
Je ne connaissais pas ce truc là:
" nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)" Drôlement pratique
Il ne me semble pas l'avoir vu dans la doc
Du beau boulot, bien propre; j'aimerais pouvoir en faire autant
contre cet "OK" de validation
Bah, comme il y a trente six façons d'entrer des nombres à la souris; il n'y a pas grand intérêt à passer par le clavier
Le principe des roues est nickel, sauf que les unités ne sont pas vraiment utiles; mais bon, pourquoi pas.
Faire interagir les roues entre elles pour le passage de 9 à 0 ne présente pas de difficultés, mais est aussi sans intérêt.
Dans la vraie vie, non seulement on peut additionner les fréquences, mais on peut moduler l'une par l'autre en amplitude, en fréquence ou en phase
D'ailleurs, tu pourrais introduire une roue de plus pour le déphasage d'une fréquence (des deux, ne servirait à rien puisque le déphasage est relatif de l'une à l'autre)
Une modulation d'amplitude ne serait pas mal (une HF modulée en BF)
Manquerait plus qu'envoyer ça sur une antenne en modulant avec un micro pour faire une radio locale
Je ne connaissais pas ce truc là:
" nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)" Drôlement pratique
Il ne me semble pas l'avoir vu dans la doc
Du beau boulot, bien propre; j'aimerais pouvoir en faire autant
____________________
Roro
Roro
Citation:
Bah, comme il y a trente six façons d'entrer des nombres à la souris; il n'y a pas grand intérêt à passer par le clavier
C'est pas faux, c'est sans doutes une vieille habitude venue du temps où je programmais sur mon MSX sans souris, donc je cherche encore à faire un truc pour lequel JB n'est pas conçu, je commence à avoir l'habitude...
La tentative suivante, parce que toute cette flopée de boutons et le kilomètre de code pour leur gestion ne me plaisent qu'à moitié, consistera, dans un fenêtre graphique, à définir une zone par chiffre. Quand la souris est dans la zone, la zone devient "active" : un clic gauche dans la zone fait tourner la roue d'un chiffre vers le bas, un clic droit fait tourner la roue d'un chiffre vers le haut. Le nouveau chiffre est alors dessiné avec des fonctions de dessin (ce ne sera plus un caractère à ski). ça ne devrait pas être hors de portée, comme système... Si le coeur t'en dit (au vu des x+n dispositifs que tu as pondu dans l'autre fil, hein ?) Ceci dit j'abuse pas : je travaille de mon côté aussi.
Cependant le résultat n'est pas pour tout de suite, vu mon emploi du temps.
Autres avantages de la roue codeuse : il n'y a pas d'erreur de saisie à gérer, et le nombre est formaté d'avance.
Citation:
on peut additionner les fréquences, mais on peut moduler l'une par l'autre en amplitude, en fréquence ou en phase
Pour les additions, les modulations et manipulations de fréquences, je connais les principes généraux mais je ne suis pas à l'aise avec les équations : j'ai toujours trouvé, avec un certain désespoir, que ce qui passe dans un câble est plus compliqué que la sinusoïde qu'on dessine en 2D. Ceci dit, je vais me pencher sur icelles, ce serait sympa de moduler le canal A par le canal B du générateur, je te l'accorde, de même pour le déphasage.
Pour notre radio locale, je ne crois pas qu'on puisse gérer autre chose qu'un truc périodique en tant que signal modulant avec JB, ce qui exclut toute entrée ligne ou micro. Mais on peut envisager des trucs sympas en modes numériques, comme la SSTV des radio-amateurs, psk31, et autres modes passant dans 3 kHz de bande passante, JB/LB pouvant générant les fichiers wav adéquats sortant par la carte audio branchée sur un émetteur. Je n'ai pas l'émetteur, ni la licence qui doit aller avec.
Citation:
Roland, tu es décidément fâché avec les fonctions
Juste en dessous de l'open "..." for window et de sa série de print#1, on a :
Code VB :
Citation:
Du beau boulot, bien propre; j'aimerais pouvoir en faire autant
Eh bien, met des espaces dans les grandes expressions mathématiques et n'hésite pas à insérer des lignes vides. Pour ma part je cherche assez systématiquement à rendre le code le plus lisible possible, c'est pas toujours évident.
Edité par Christophe Le 14/12/2015 à 20h46
Bah, comme il y a trente six façons d'entrer des nombres à la souris; il n'y a pas grand intérêt à passer par le clavier
C'est pas faux, c'est sans doutes une vieille habitude venue du temps où je programmais sur mon MSX sans souris, donc je cherche encore à faire un truc pour lequel JB n'est pas conçu, je commence à avoir l'habitude...
La tentative suivante, parce que toute cette flopée de boutons et le kilomètre de code pour leur gestion ne me plaisent qu'à moitié, consistera, dans un fenêtre graphique, à définir une zone par chiffre. Quand la souris est dans la zone, la zone devient "active" : un clic gauche dans la zone fait tourner la roue d'un chiffre vers le bas, un clic droit fait tourner la roue d'un chiffre vers le haut. Le nouveau chiffre est alors dessiné avec des fonctions de dessin (ce ne sera plus un caractère à ski). ça ne devrait pas être hors de portée, comme système... Si le coeur t'en dit (au vu des x+n dispositifs que tu as pondu dans l'autre fil, hein ?) Ceci dit j'abuse pas : je travaille de mon côté aussi.
Cependant le résultat n'est pas pour tout de suite, vu mon emploi du temps.
Autres avantages de la roue codeuse : il n'y a pas d'erreur de saisie à gérer, et le nombre est formaté d'avance.
Citation:
on peut additionner les fréquences, mais on peut moduler l'une par l'autre en amplitude, en fréquence ou en phase
Pour les additions, les modulations et manipulations de fréquences, je connais les principes généraux mais je ne suis pas à l'aise avec les équations : j'ai toujours trouvé, avec un certain désespoir, que ce qui passe dans un câble est plus compliqué que la sinusoïde qu'on dessine en 2D. Ceci dit, je vais me pencher sur icelles, ce serait sympa de moduler le canal A par le canal B du générateur, je te l'accorde, de même pour le déphasage.
Pour notre radio locale, je ne crois pas qu'on puisse gérer autre chose qu'un truc périodique en tant que signal modulant avec JB, ce qui exclut toute entrée ligne ou micro. Mais on peut envisager des trucs sympas en modes numériques, comme la SSTV des radio-amateurs, psk31, et autres modes passant dans 3 kHz de bande passante, JB/LB pouvant générant les fichiers wav adéquats sortant par la carte audio branchée sur un émetteur. Je n'ai pas l'émetteur, ni la licence qui doit aller avec.
Citation:
" nombre1=Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5)" Drôlement pratique
Il ne me semble pas l'avoir vu dans la doc
Il ne me semble pas l'avoir vu dans la doc
Roland, tu es décidément fâché avec les fonctions

Juste en dessous de l'open "..." for window et de sa série de print#1, on a :
Code VB :
Function Nombre5ch(chiffre1, chiffre2, chiffre3, chiffre4, chiffre5) value = chiffre1*10000+chiffre2*1000+chiffre3*100+chiffre4*10+chiffre5 Nombre5ch=value End Function
Citation:
Du beau boulot, bien propre; j'aimerais pouvoir en faire autant
Eh bien, met des espaces dans les grandes expressions mathématiques et n'hésite pas à insérer des lignes vides. Pour ma part je cherche assez systématiquement à rendre le code le plus lisible possible, c'est pas toujours évident.
Edité par Christophe Le 14/12/2015 à 20h46
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Faire tourner les roues sur le principe du déplacement souris avec des zones, c'est tout à fait faisable
Et je vais le faire; foin des boutons !
Mais alors, il n'y a plus besoin de faire tourner chiffre par chiffre, puisqu'on qu'avec une réponse souris géométrique , on peut avoir la finesse pour les petites valeur et avoir aussi une large plage sans devoir faire un Km à la souris
Bon sang...! Mais c'est bien sûr ! Une putan de fonction ! C'est vraiment hyper puissant ce truc.Je dois avoir peur de me blesser avec. Lol!
Citation:
Citation:
M'en parle pas, moi j'essaie de compresser au maximum.
Je me suis d'ailleurs fait engueuler par cassiope pour coder comme un cochon
Ne te plains pas j'indente, et je laisse une marge
Pour moi, si la ligne suivante est vide, c'est que le code est fini. Lol!
Mais promis, je vais faire un effort
Et je vais le faire; foin des boutons !
Mais alors, il n'y a plus besoin de faire tourner chiffre par chiffre, puisqu'on qu'avec une réponse souris géométrique , on peut avoir la finesse pour les petites valeur et avoir aussi une large plage sans devoir faire un Km à la souris
Bon sang...! Mais c'est bien sûr ! Une putan de fonction ! C'est vraiment hyper puissant ce truc.Je dois avoir peur de me blesser avec. Lol!
Citation:
Eh bien, met des espaces
Citation:
n'hésite pas à insérer des lignes vides
M'en parle pas, moi j'essaie de compresser au maximum.
Je me suis d'ailleurs fait engueuler par cassiope pour coder comme un cochon
Ne te plains pas j'indente, et je laisse une marge
Pour moi, si la ligne suivante est vide, c'est que le code est fini. Lol!
Mais promis, je vais faire un effort
____________________
Roro
Roro
Bon, j'avais fait avec des zones , mais c'est pas bon, ça prends beaucoup trop de place
Ton principe de roue codeuse est bon
Mais y a moyen de faire plus simple et même hyper simple
Le blème, c'est que l'affichage graphique se cale à gauche, et donc pour garder l'affichage aligné sous les boutons il faut recaler en fonction du nombre de chiffres
L'avantage, c'est que c'est le nombre qui est traité directement; y a pas besoin de le reconstruire (avec ta fonction de la mort); et du coup, le passage 9 --> 10 se fait tout seul
Je mets une ébauche
Code VB :
Ton principe de roue codeuse est bon
Mais y a moyen de faire plus simple et même hyper simple
Le blème, c'est que l'affichage graphique se cale à gauche, et donc pour garder l'affichage aligné sous les boutons il faut recaler en fonction du nombre de chiffres
L'avantage, c'est que c'est le nombre qui est traité directement; y a pas besoin de le reconstruire (avec ta fonction de la mort); et du coup, le passage 9 --> 10 se fait tout seul
Je mets une ébauche
Code VB :
NOMAINWIN WindowWidth = 280 WindowHeight = 460 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) BUTTON #1.pdm, "+", [pdm], UL, 10, 20, 20, 20 BUTTON #1.pm, "+", [pm], UL, 30, 20, 20, 20 BUTTON #1.pc, "+", [pc], UL, 50, 20, 20, 20 BUTTON #1.pd, "+", [pd], UL, 70, 20, 20, 20 BUTTON #1.pu, "+", [pu], UL, 90, 20, 20, 20 BUTTON #1.mdm, "-", [mdm], UL, 10, 75, 20, 20 BUTTON #1.mm, "-", [mm], UL, 30, 75, 20, 20 BUTTON #1.mc, "-", [mc], UL, 50, 75, 20, 20 BUTTON #1.md, "-", [md], UL, 70, 75, 20, 20 BUTTON #1.mu, "-", [mu], UL, 90, 75, 20, 20 GRAPHICBOX #1.fr 0, 0, 280, 460 OPEN "Help" FOR window_nf AS #1 #1, "TRAPCLOSE [closeHelp]" '----------------------------- INIT GRAPH-------------------------- #1.fr , "down;fill 236 233 216" freq=10000:vol=50 #1.fr, "color black;backcolor 236 233 216" #1.fr, "place 5 15": #1.fr, "\Fréquence Hz" #1.fr, "font courier_new 24 bold" #1.fr, "color blue;backcolor 236 233 216" ' #1.fr, "place ";"10";" ";"65": #1.fr, "\"; str$(int(freq)) gosub [affreq] wait [pdm]'-------plus freq=freq+10000:gosub [affreq]:wait [pm] freq=freq+1000:gosub [affreq]:wait [pc] freq=freq+100:gosub [affreq]:wait [pd] freq=freq+10:gosub [affreq]:wait [pu] freq=freq+1:gosub [affreq]:wait [mdm]'---------moins freq=freq-10000:gosub [affreq]:wait [mm] freq=freq-1000:gosub [affreq]:wait [mc] freq=freq-100:gosub [affreq]:wait [md] freq=freq-10:gosub [affreq]:wait [mu] freq=freq-1:gosub [affreq]:wait [affreq] if freq > 80000 then freq=80000 if freq < 1 then freq=1 freq$=str$(freq): lonfreq=len(freq$) select case lonfreq case 1 xxf=95 case 2 xxf=71 case 3 xxf=50 case 4 xxf=30 case 5 xxf=10 end select #1.fr,"place ";"10";" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 115 90" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxf;" ";"65": #1.fr, "\"; str$(int(freq)) return [closeHelp] CLOSE #1 END
____________________
Roro
Roro
C'est en effet beaucoup plus court pour le même résultat, et on économise des statictext. Je crois que c'est "LE" bon code.
Pour l'alignement des chiffres, faut se résoudre à mettre des zéros au début de la chaîne, les espaces n'ayant pas la même dimension que les caractères (au moins sur ma bizarroïde version Wine)
j'ai donc remplacé :
#1.fr, "place ";"10";" ";"65": #1.fr, "\"; str$(int(freq))
par
#1.fr, "place ";"10";" ";"65": #1.fr, "\"; right$("00000"+str$(int(freq)),5)
On a donc des 0 devant le nombre s'il fait moins de 5 chiffres. J'ai complété ta version avec les boutons "-" (c'était trop tentant
)
j'ai modifié la chaine de formatage pour adapter les caractères aux dimensions des boutons :
#1.fr, "font courier_new 24 bold" est devenue #1.fr, "font courier_new 22 35 bold"
J'ai également déplacé l'instruction "if freq > 80000 then freq=80000" dans le sous-programme [affreq], autrement elle n'était efficace que pour la première roue.
Quand je pense que je me suis pris la tête (presque) tout le week-end pour mon usine à boutons... Chapeau bas, Mister.
Your code a little bit modifié (j'ai gardé ta mise en page) :
Code VB :
Pour l'alignement des chiffres, faut se résoudre à mettre des zéros au début de la chaîne, les espaces n'ayant pas la même dimension que les caractères (au moins sur ma bizarroïde version Wine)
j'ai donc remplacé :
#1.fr, "place ";"10";" ";"65": #1.fr, "\"; str$(int(freq))
par
#1.fr, "place ";"10";" ";"65": #1.fr, "\"; right$("00000"+str$(int(freq)),5)
On a donc des 0 devant le nombre s'il fait moins de 5 chiffres. J'ai complété ta version avec les boutons "-" (c'était trop tentant

j'ai modifié la chaine de formatage pour adapter les caractères aux dimensions des boutons :
#1.fr, "font courier_new 24 bold" est devenue #1.fr, "font courier_new 22 35 bold"
J'ai également déplacé l'instruction "if freq > 80000 then freq=80000" dans le sous-programme [affreq], autrement elle n'était efficace que pour la première roue.
Quand je pense que je me suis pris la tête (presque) tout le week-end pour mon usine à boutons... Chapeau bas, Mister.
Your code a little bit modifié (j'ai gardé ta mise en page) :
Code VB :
NOMAINWIN WindowWidth = 280 WindowHeight = 460 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) BUTTON #1.pdm, "+", [pdm], UL, 10, 20, 20, 20 BUTTON #1.pm, "+", [pm], UL, 30, 20, 20, 20 BUTTON #1.pc, "+", [pc], UL, 50, 20, 20, 20 BUTTON #1.pd, "+", [pd], UL, 70, 20, 20, 20 BUTTON #1.pu, "+", [pu], UL, 90, 20, 20, 20 BUTTON #1.mdm, "-", [mdm], UL, 10, 70, 20, 20 BUTTON #1.mm, "-", [mm], UL, 30, 70, 20, 20 BUTTON #1.mc, "-", [mc], UL, 50, 70, 20, 20 BUTTON #1.md, "-", [md], UL, 70, 70, 20, 20 BUTTON #1.mu, "-", [mu], UL, 90, 70, 20, 20 GRAPHICBOX #1.fr 0, 0, 280, 460 OPEN "Help" FOR window_nf AS #1 #1, "TRAPCLOSE [closeHelp]" '----------------------------- INIT GRAPH-------------------------- #1.fr , "down;fill 236 233 216" freq=2000:vol=50 #1.fr, "color black;backcolor 236 233 216" #1.fr, "place 5 15": #1.fr, "\Fréquence Hz" #1.fr, "font courier_new 22 35 bold" #1.fr, "color blue;backcolor 236 233 216" gosub [affreq] wait [pdm] freq=freq+10000 gosub [affreq] wait [pm] freq=freq+1000 gosub [affreq] wait [pc] freq=freq+100 gosub [affreq] wait [pd] freq=freq+10 gosub [affreq] wait [pu] freq=freq+1 gosub [affreq] wait [mdm] freq=freq-10000 gosub [affreq] wait [mm] freq=freq-1000 gosub [affreq] wait [mc] freq=freq-100 gosub [affreq] wait [md] freq=freq-10 gosub [affreq] wait [mu] freq=freq-1 gosub [affreq] wait [affreq] if freq > 80000 then freq=80000 if freq < 0 then freq = 0 freq$=str$(freq): lonfreq=len(freq$) select case lonfreq case 1 xxf=100 case 2 xxf=80 case 3 xxf=60 case 4 xxf=40 case 5 xxf=20 end select #1.fr,"place ";xxf;" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 110 90" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";"10";" ";"65": #1.fr, "\"; right$("00000"+str$(int(freq)),5) return [closeHelp] CLOSE #1 END
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Alors, c'est que tu a pris le code incognito
Car je l'ai modifié depuis plusieurs fois et si tu mate ma dernière mouture tu verra qu moi aussi j'ai mis les bornes là où tu dis.
J'ai tenté de réduire avec une sub handle (à la cassiope), mais c'est vraiment trop la merde ces subs, quand on est dedans, on peut plus en sortir, il faut faire tout le prog en subs.
C'est comme les fonctions de la mort, mais en pire.
Je garde ça pour quand je serai grand.
Mais je vais quand même réessayer crogneugneu! sinon le code va faire un kilomètre de long.
Aparté: Heureusement qu'on est que deux à poster, parce qu'on a mit une de ces panique
Si nephtys qui aime bien que tout soit bien rangé, voit ça, il va péter un câble.
Je vais essayer de ranger sans mettre plus de souk; c'est pas gagné.
J'ai également déplacé l'instruction "if freq > 80000 then fr
Alors, c'est que tu a pris le code incognito
Car je l'ai modifié depuis plusieurs fois et si tu mate ma dernière mouture tu verra qu moi aussi j'ai mis les bornes là où tu dis.
J'ai tenté de réduire avec une sub handle (à la cassiope), mais c'est vraiment trop la merde ces subs, quand on est dedans, on peut plus en sortir, il faut faire tout le prog en subs.
C'est comme les fonctions de la mort, mais en pire.
Je garde ça pour quand je serai grand.
Mais je vais quand même réessayer crogneugneu! sinon le code va faire un kilomètre de long.
Aparté: Heureusement qu'on est que deux à poster, parce qu'on a mit une de ces panique
Si nephtys qui aime bien que tout soit bien rangé, voit ça, il va péter un câble.
Je vais essayer de ranger sans mettre plus de souk; c'est pas gagné.
____________________
Roro
Roro
SUITE DE: 16/12/15 à 00h03
Bon, dis donc, j'ai un cas de conscience; j'ai voulu ranger...Et ben y a pas moyen.
Si je coupe des messages, y a plus aucune cohérence dans le fil; si je les déplace, c'est pareil.
Je parle des 3 pages de: "Débutant/Récupérer le texte d'une TEXTBOX ?"
La solution que je vois, c'est de supprimer tout ce qui ne se rapporte pas au titre.
Qu'en pense-tu ?
Si tu veux rapatrier des trucs de là-bas à ici, fait une liste des "date et heure"
Et pour le titre d'ici, je propose "Sinusoïdes".
A part ça, j'ai intégré les deux roues "Fréquence" à ton code je fais les volumes
Je vais tenter de raccorder, je garanti rien.
On doit pouvoir se resservir de [sinusoide], bien que ce sera totalement illogique puisque c'est la base de temps, mais comme au niveau visu le résultat est le même, on aurait tort de se gêner.
Note que la modulation d'amplitude, elle y est déjà. si on mets une HF en 1 et une BF en 2 on a en 3 une superbe onde modulée.Ton additionneur marche vraiment au poil.
Bon, dis donc, j'ai un cas de conscience; j'ai voulu ranger...Et ben y a pas moyen.
Si je coupe des messages, y a plus aucune cohérence dans le fil; si je les déplace, c'est pareil.
Je parle des 3 pages de: "Débutant/Récupérer le texte d'une TEXTBOX ?"
La solution que je vois, c'est de supprimer tout ce qui ne se rapporte pas au titre.
Qu'en pense-tu ?
Si tu veux rapatrier des trucs de là-bas à ici, fait une liste des "date et heure"
Et pour le titre d'ici, je propose "Sinusoïdes".
A part ça, j'ai intégré les deux roues "Fréquence" à ton code je fais les volumes
Je vais tenter de raccorder, je garanti rien.
On doit pouvoir se resservir de [sinusoide], bien que ce sera totalement illogique puisque c'est la base de temps, mais comme au niveau visu le résultat est le même, on aurait tort de se gêner.
Note que la modulation d'amplitude, elle y est déjà. si on mets une HF en 1 et une BF en 2 on a en 3 une superbe onde modulée.Ton additionneur marche vraiment au poil.
____________________
Roro
Roro
Suite de: 16/12/15 à 00h03
Et de: 16/12/15 à 10h56
Voila ce que ça donne , je n'ai pas pu m'empêcher de mettre un bouton "Valide" (plus simple)
Je n'ai pas mis tes modifs de formatage because chez moi il ne les faut pas
Soit dit en passant, ton aversion pour Windows est un combat d'arrière garde
Essaie donc de démonter le tableau de bord de ta bagnole, tu ne va pourtant pas y mettre un tableau "libre" avec toutes les vis apparentes (pareil pour ton disque dur et ton grille pain)
Code VB :
Et de: 16/12/15 à 10h56
Voila ce que ça donne , je n'ai pas pu m'empêcher de mettre un bouton "Valide" (plus simple)
Je n'ai pas mis tes modifs de formatage because chez moi il ne les faut pas
Soit dit en passant, ton aversion pour Windows est un combat d'arrière garde
Essaie donc de démonter le tableau de bord de ta bagnole, tu ne va pourtant pas y mettre un tableau "libre" avec toutes les vis apparentes (pareil pour ton disque dur et ton grille pain)
Code VB :
nomainwin WindowWidth = 800: UpperLeftX = 200 WindowHeight = 600: UpperLeftY = 200 BUTTON #1.pdm1, "+", [pdm1], UL, 10, 25, 20, 20 '---freq 1 BUTTON #1.pm1, "+", [pm1], UL, 30, 25, 20, 20 BUTTON #1.pc1, "+", [pc1], UL, 50, 25, 20, 20 BUTTON #1.pd1, "+", [pd1], UL, 70, 25, 20, 20 BUTTON #1.pu1, "+", [pu1], UL, 90, 25, 20, 20 BUTTON #1.mdm1, "-", [mdm1], UL, 10, 75, 20, 20 BUTTON #1.mm1, "-", [mm1], UL, 30, 75, 20, 20 BUTTON #1.mc1, "-", [mc1], UL, 50, 75, 20, 20 BUTTON #1.md1, "-", [md1], UL, 70, 75, 20, 20 BUTTON #1.mu1, "-", [mu1], UL, 90, 75, 20, 20 BUTTON #1.pdm2, "+", [pdm2], UL, 130, 25, 20, 20 '---freq 2 BUTTON #1.pm2, "+", [pm2], UL, 150, 25, 20, 20 BUTTON #1.pc2, "+", [pc2], UL, 170, 25, 20, 20 BUTTON #1.pd2, "+", [pd2], UL, 190, 25, 20, 20 BUTTON #1.pu2, "+", [pu2], UL, 210, 25, 20, 20 BUTTON #1.mdm2, "-", [mdm2], UL, 130, 75, 20, 20 BUTTON #1.mm2, "-", [mm2], UL, 150, 75, 20, 20 BUTTON #1.mc2, "-", [mc2], UL, 170, 75, 20, 20 BUTTON #1.md2, "-", [md2], UL, 190, 75, 20, 20 BUTTON #1.mu2, "-", [mu2], UL, 210, 75, 20, 20 BUTTON #1.pcv1, "+", [pcv1], UL, 50, 120, 20, 20 '---Volume 1 BUTTON #1.pdv1, "+", [pdv1], UL, 70, 120, 20, 20 BUTTON #1.puv1, "+", [puv1], UL, 90, 120, 20, 20 BUTTON #1.mcv1, "-", [mcv1], UL, 50, 170, 20, 20 BUTTON #1.mdv1, "-", [mdv1], UL, 70, 170, 20, 20 BUTTON #1.muv1, "-", [muv1], UL, 90, 170, 20, 20 BUTTON #1.pcv2, "+", [pcv2], UL, 170, 120, 20, 20 BUTTON #1.pdv2, "+", [pdv2], UL, 190, 120, 20, 20 '---Volume 2 BUTTON #1.puv2, "+", [puv2], UL, 210, 120, 20, 20 BUTTON #1.mcv2, "-", [mcv2], UL, 170, 170, 20, 20 BUTTON #1.mdv2, "-", [mdv2], UL, 190, 170, 20, 20 BUTTON #1.muv2, "-", [muv2], UL, 210, 170, 20, 20 BUTTON #1.vali, "Valid", [valid], UL, 100, 210, 70, 25 graphicbox #1.gb 280,15,500,500 groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100 GRAPHICBOX #1.fr 5, 5, 250, 385 radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20 radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20 radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20 radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20 radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20 radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20 open "..." for window_nf as #1 #1 "trapclose [quit]" '----------------------------- INIT GRAPH-------------------------- #1.fr , "down;fill 236 233 216" freq1=1000:vol=50: freq2=60:vol1=40:vol2=20 #1.fr, "color black;backcolor 236 233 216" #1.fr, "place 5 15": #1.fr, "\Fréq 1 Hz": #1.fr, "place 125 15": #1.fr, "\Fréq 2 Hz" #1.fr, "place 5 110": #1.fr, "\Volume 1 mW": #1.fr, "place 125 110": #1.fr, "\Volume 2 mW" #1.fr, "font courier_new 24 bold" #1.fr, "color blue;backcolor 236 233 216" gosub [affreq1]: gosub [affreq2] gosub [affvol1]: gosub [affvol2] '----------------------------- INIT PARAM-------------------------- dim courbeF1(500):dim courbeF2(500): dim courbeF3(500) pi=3.1415926536 'F1=440:T1=1/F1:omega1=2*pi*F1 ' F2=660:T2=1/F2:omega2=2*pi*F2 'F3=44100:T3=1/F3:omega3=2*pi*F3 [valid] omega1=2*pi*int(freq1) omega2=2*pi*int(freq2) t=0 longdiv=50 'larg div (pxls). trait div = 1 pxl ~~0 long1=0.005 'secondes par division long2=0.002 long3=0.001 long4=0.0005 long5=0.0002 long6=0.0001 long1aff$=str$(long1*1000) 'secondes par division, pour affichage long2aff$=str$(long2*1000) long3aff$=str$(long3*1000) long4aff$=str$(long4*1000) long5aff$=str$(long5*1000) long6aff$=str$(long6*1000) '***************************Fin init param************************** gosub [sinusoides] gosub [ecran] gosub [dessin] #1.gb "flush" goto [SParDiv1_On] wait '----------------------- PRIMO WAIT------------------- [SParDiv1_On] deltaT=long1/longdiv:goto [rafraich] [SParDiv1_off] wait [SParDiv2_On] deltaT=long2/longdiv:goto [rafraich] [SParDiv2_Off] wait [SParDiv3_On] deltaT=long3/longdiv:goto [rafraich] [SParDiv3_Off] wait [SParDiv4_On] deltaT=long4/longdiv:goto [rafraich] [SParDiv4_off] wait [SParDiv5_On] deltaT=long5/longdiv:goto [rafraich] [SParDiv5_Off] wait [SParDiv6_On] deltaT=long6/longdiv:goto [rafraich] [SParDiv6_Off] wait '--------------------------------- [rafraich] gosub [sinusoides] cls gosub [ecran] gosub [dessin] #1.gb "flush" wait '-------------------------------------------- [sinusoides] t=0 for a=0 to 499 courbeF1(a)=vol1*sin(omega1*t) courbeF2(a)=vol2*sin(omega2*t) 'courbeF3(a)=40*sin(omega3*t) courbeF3(a)=courbeF1(a)+courbeF2(a) t=t+deltaT next return [ecran] #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0" for x= 0 to 500 step longdiv #1.gb "line ";x;" 0 ";x;" 500" next for y= 0 to 500 step longdiv #1.gb "line 0 ";y;" 500 ";y next return [dessin] #1.gb "color green" ph=180:midY1=50:midY2=150:midY3=350 oldY1=midY1:oldY2=midY2:oldY3=midY3 for n= 0 to 499 x=n y=midY1+courbeF1(n) #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y oldX1=x:oldY1=y y=midY2+courbeF2(n) #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y oldX2=x:oldY2=y y=midY3+courbeF3(n) #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y oldX3=x:oldY3=y next return wait '------------------------ Variation Freq 1 ---------------------- [pdm1]'-------plus freq1=freq1+10000:gosub [affreq1]:wait [pm1] freq1=freq1+1000:gosub [affreq1]:wait [pc1] freq1=freq1+100:gosub [affreq1]:wait [pd1] freq1=freq1+10:gosub [affreq1]:wait [pu1] freq1=freq1+1:gosub [affreq1]:wait [mdm1]'---------moins freq1=freq1-10000:gosub [affreq1]:wait [mm1] freq1=freq1-1000:gosub [affreq1]:wait [mc1] freq1=freq1-100:gosub [affreq1]:wait [md1] freq1=freq1-10:gosub [affreq1]:wait [mu1] freq1=freq1-1:gosub [affreq1]:wait [affreq1] if freq1 > 80000 then freq1=80000 if freq1 < 1 then freq1=1 freq1$=str$(freq1): lonfreq1=len(freq1$) select case lonfreq1 case 1 xxf=95 case 2 xxf=71 case 3 xxf=50 case 4 xxf=30 case 5 xxf=10 end select #1.fr,"place ";"10";" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 115 90" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxf;" ";"65": #1.fr, "\"; str$(int(freq1)) return wait '------------------------ Variation Freq 2 ---------------------- [pdm2]'-------plus freq2=freq2+10000:gosub [affreq2]:wait [pm2] freq2=freq2+1000:gosub [affreq2]:wait [pc2] freq2=freq2+100:gosub [affreq2]:wait [pd2] freq2=freq2+10:gosub [affreq2]:wait [pu2] freq2=freq1+1:gosub [affreq2]:wait [mdm2]'---------moins freq2=freq2-10000:gosub [affreq2]:wait [mm2] freq2=freq2-1000:gosub [affreq2]:wait [mc2] freq2=freq2-100:gosub [affreq2]:wait [md2] freq2=freq2-10:gosub [affreq2]:wait [mu2] freq2=freq2-1:gosub [affreq2]:wait [affreq2] if freq2 > 80000 then freq2=80000 if freq2 < 1 then freq2=1 freq2$=str$(freq2): lonfreq2=len(freq2$) select case lonfreq2 case 1 xxf2=205 case 2 xxf2=185 case 3 xxf2=165 case 4 xxf2=145 case 5 xxf2=125 end select #1.fr,"place ";"110";" ";"45":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 225 90" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxf2;" ";"65": #1.fr, "\"; str$(int(freq2)) return [pcv1] '-------------------Variation Volume 1 ---------------------- vol1=vol1+100:gosub [affvol1]:wait [pdv1] vol1=vol1+10:gosub [affvol1]:wait [puv1] vol1=vol1+1:gosub [affvol1]:wait [mcv1] vol1=vol1-100:gosub [affvol1]:wait [mdv1] vol1=vol1-10:gosub [affvol1]:wait [muv1] vol1=vol1-1:gosub [affvol1]:wait [affvol1] if vol1 > 100 then vol1=100 if vol1 < 1 then vol1=1 vol1$=str$(vol1): lonvol1=len(vol1$) select case lonvol1 case 1 xxv1=85 case 2 xxv1=66 case 3 xxv1=45 end select #1.fr,"place ";"10";" ";"136":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 111 160" 'efface #1.fr, "color red;backcolor 236 233 216" #1.fr, "place ";xxv1;" ";"158": #1.fr, "\"; str$(int(vol1)) return [pcv2] '-------------------Variation Volume 2 --------------------- vol2=vol2+100:gosub [affvol2]:wait [pdv2] vol2=vol2+10:gosub [affvol2]:wait [puv2] vol2=vol2+1:gosub [affvol2]:wait [mcv2] vol2=vol2-100:gosub [affvol2]:wait [mdv2] vol2=vol2-10:gosub [affvol2]:wait [muv2] vol2=vol2-1:gosub [affvol2]:wait [affvol2] if vol2 > 100 then vol2=100 if vol2 < 1 then vol2=1 vol2$=str$(vol2): lonvol2=len(vol2$) select case lonvol2 case 1 xxv2=205 case 2 xxv2=186 case 3 xxv2=165 end select #1.fr,"place ";"150";" ";"136":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 160" 'efface #1.fr, "color red;backcolor 236 233 216" #1.fr, "place ";xxv2;" ";"158": #1.fr, "\"; str$(int(vol2)) return [quit] close #1 end
____________________
Roro
Roro
Programme : joli. On (tu) a trouvé la solution, c'est adopté. Mon prog redessine à chaque changement de chiffre, alros que ton bouton valid fait que le dessin n'est refait qu'à ce moment-là, ce qui peut être intéressant sur une petite config.
Pour le rapatriement dans le nouveau fil, je n'ai pas le temps d'y réfléchir pour le moment, je verrais ce soir, car c'est plus délicat à analyser que nos générateurs, et on est parti un peu dans tous les sens.
(Et pour ma voiture, si, ce sera un tableau de bord "libre", et on ne se rendra pas sans combattre
Sérieusement ce n'est pas un dogme, mais je me sens simplement "mieux" sans windows, simple état d'esprit. J'ai un windows de secours sur un petit ieee, qui m'a permis de constater qu'en effet le rendu graphique n'est pas tout à fait le même dans les deux univers.
Citation:
Ou que tu l'avais modifié entre temps. En général je ne me connecte que lorsque j'ai quelque chose à écrire,
Le fait que tu te connectes en administrateur fait peut-être que n'apparaissent pas les habituelles mentions "édité par xxx le tant" dans tes messages modifiés, et on a effectivement du mal à s'y retrouver entre deux visites. Ne supprime plus, on fait de la recherche et c'est normal de tomber sur des résultats boiteux ou intermédiaires.
Aurais-je oublié quelque chose ? j'ai dû faire le tour...
A+
Pour le rapatriement dans le nouveau fil, je n'ai pas le temps d'y réfléchir pour le moment, je verrais ce soir, car c'est plus délicat à analyser que nos générateurs, et on est parti un peu dans tous les sens.
(Et pour ma voiture, si, ce sera un tableau de bord "libre", et on ne se rendra pas sans combattre

Citation:
Alors, c'est que tu a pris le code incognito
Ou que tu l'avais modifié entre temps. En général je ne me connecte que lorsque j'ai quelque chose à écrire,
Le fait que tu te connectes en administrateur fait peut-être que n'apparaissent pas les habituelles mentions "édité par xxx le tant" dans tes messages modifiés, et on a effectivement du mal à s'y retrouver entre deux visites. Ne supprime plus, on fait de la recherche et c'est normal de tomber sur des résultats boiteux ou intermédiaires.
Aurais-je oublié quelque chose ? j'ai dû faire le tour...
A+
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Bah, c'est qu'en fait, je crains une visite de nephtys qui pourrait bien faire un fromage si il voit le souk qu'on a mit.
On pourrait rafraîchir le scope à chaque modif de valeur, mais ça risque de faire pleurer les yeux.
On pourrait rafraîchir le scope à chaque modif de valeur, mais ça risque de faire pleurer les yeux.
____________________
Roro
Roro
(t'inquière, soulève le tapis, on va tout mettre en dessous, il verra rien^^)
On peut éventuellement changer le titre de l'autre discussion pour le mettre en accord avec le contenu. Après tout, les progs que nous y avons placés avaient la même finalité : entrer des données dans un programme, c'étaient seulement des exemples de ce qu'on pouvait faire. A mon avis on se prend la tête pour finalement pas grand chose. Par contre, je suis trop crevé ce soir et guère disponible dans les jours qui viennent, il est sans doutes urgent d'attendre "la" bonne idée qui permettra de tout remettre d'aplomb avec élégance.
Et on essaiera d'être plus rigoureux dans nos posts. Possible que si nous étions plus nombreux, on le serait naturellement. J'aimais bien cette liberté d'aller à notre gré...
Pour en revenir au sujet, refaire un graphe à chaque changement de chiffre ne clignote pas plus que ça, mais faut voir avec l'écran utilisé et la puissance de calcul de l'UC, il y a peut-être des cas qui posent problème...
On peut éventuellement changer le titre de l'autre discussion pour le mettre en accord avec le contenu. Après tout, les progs que nous y avons placés avaient la même finalité : entrer des données dans un programme, c'étaient seulement des exemples de ce qu'on pouvait faire. A mon avis on se prend la tête pour finalement pas grand chose. Par contre, je suis trop crevé ce soir et guère disponible dans les jours qui viennent, il est sans doutes urgent d'attendre "la" bonne idée qui permettra de tout remettre d'aplomb avec élégance.
Et on essaiera d'être plus rigoureux dans nos posts. Possible que si nous étions plus nombreux, on le serait naturellement. J'aimais bien cette liberté d'aller à notre gré...
Pour en revenir au sujet, refaire un graphe à chaque changement de chiffre ne clignote pas plus que ça, mais faut voir avec l'écran utilisé et la puissance de calcul de l'UC, il y a peut-être des cas qui posent problème...
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Tu es plus occupé qu'un ministre. Prends donc soin de ton ministère JB peut attendre.
____________________
Roro
Roro
Bon, me revoilà.
Impossible de me concentrer sur un quelconque synoptique, j'ai finalement décidé de reprendre le projet par l'aspect cosmétique.
J'ai repris ton système de saisie, mais j'ai aligné fréquence et volumes 1 sur la trace du haut, et 2 sur la trace du milieu, la trace du bas étant la somme.
Dans l'opération, ton bouton "valid" a sauté. Par inadvertance je le précise (je préfère sans), parce que je me suis trouvé perdu entre les nuances de nos manières respectives de coder. On peut le remettre.
J'ai simplifié le triplet de sous-programmes "sinusoides", "écran", "dessin" en un seul sous-programme "sinusoides"
Le cadre qui englobe les réglages de fréquence a été raccourci. Dans l'espace créé j'envisage d'y mettre des boutons pour la génération du wav. Aucune idée de leur fonction pour le moment, mais c'est prévu.
Dans la portion de code
Code VB :
j'ai remis la division par 2 de l'amplitude. En fait je désirais définir l'amplitude de la sinusoide à 100, soit une valeur allant de -50 à +50, ce qui correspondait à un carreau du scope en positif, et un carreau en négatif, ce qu'on constate à plein volume. Cette valeur 100 est à prendre comme un pourcentage de l'amplitude maxi qu'on s'est fixé. Valeur tout à fait provisoire et arbitraire. La formule est juste sans la division par deux.
J'ai enlevé les milliwatts dans la légende des réglages de volume, parce qu'un fichier wav ne transmet pas cette info, ni rien - à ma connaissance - qui permette de la déduire.
C'est la trace du bas qui sera incluse dans le wav, comme elle est la somme de deux courbes dont les pics sont -50 et +50, l'amplitude de cette somme peut aller jusqu'à 200. L'amplitude définie par un wav est 256, donc on pourrait proposer le réglage de volume de chaque courbe à 127 au lieu de 100.
Et pour le reste, on verra plus tard
Code VB :
Edité par Christophe Le 20/12/2015 à 23h56
Impossible de me concentrer sur un quelconque synoptique, j'ai finalement décidé de reprendre le projet par l'aspect cosmétique.
J'ai repris ton système de saisie, mais j'ai aligné fréquence et volumes 1 sur la trace du haut, et 2 sur la trace du milieu, la trace du bas étant la somme.
Dans l'opération, ton bouton "valid" a sauté. Par inadvertance je le précise (je préfère sans), parce que je me suis trouvé perdu entre les nuances de nos manières respectives de coder. On peut le remettre.
J'ai simplifié le triplet de sous-programmes "sinusoides", "écran", "dessin" en un seul sous-programme "sinusoides"
Le cadre qui englobe les réglages de fréquence a été raccourci. Dans l'espace créé j'envisage d'y mettre des boutons pour la génération du wav. Aucune idée de leur fonction pour le moment, mais c'est prévu.
Dans la portion de code
Code VB :
for a=0 to 499 courbeF1(a)=vol1*sin(omega1*t)/2 courbeF2(a)=vol2*sin(omega2*t)/2 'courbeF3(a)=40*sin(omega3*t) courbeF3(a)=courbeF1(a)+courbeF2(a) t=t+deltaT next
j'ai remis la division par 2 de l'amplitude. En fait je désirais définir l'amplitude de la sinusoide à 100, soit une valeur allant de -50 à +50, ce qui correspondait à un carreau du scope en positif, et un carreau en négatif, ce qu'on constate à plein volume. Cette valeur 100 est à prendre comme un pourcentage de l'amplitude maxi qu'on s'est fixé. Valeur tout à fait provisoire et arbitraire. La formule est juste sans la division par deux.
J'ai enlevé les milliwatts dans la légende des réglages de volume, parce qu'un fichier wav ne transmet pas cette info, ni rien - à ma connaissance - qui permette de la déduire.
C'est la trace du bas qui sera incluse dans le wav, comme elle est la somme de deux courbes dont les pics sont -50 et +50, l'amplitude de cette somme peut aller jusqu'à 200. L'amplitude définie par un wav est 256, donc on pourrait proposer le réglage de volume de chaque courbe à 127 au lieu de 100.
Et pour le reste, on verra plus tard

Code VB :
nomainwin dim courbeF1(500), courbeF2(500), courbeF3(500) '----------------------------- INIT PARAM-------------------------- dim courbeF1(500), courbeF2(500), courbeF3(500) pi=3.1415926536 t=0 longdiv=50 'larg div (pxls). trait div = 1 pxl ~~0 long1=0.005 'secondes par division long2=0.002 long3=0.001 long4=0.0005 long5=0.0002 long6=0.0001 long1aff$=str$(long1*1000) 'secondes par division, pour affichage long2aff$=str$(long2*1000) long3aff$=str$(long3*1000) long4aff$=str$(long4*1000) long5aff$=str$(long5*1000) long6aff$=str$(long6*1000) '***************************Fin init param************************** WindowWidth = 800: UpperLeftX = 200 WindowHeight = 600: UpperLeftY = 200 BUTTON #1.pdm1, "+", [pdm1], UL, 40, 35, 20, 20 '---freq 1 BUTTON #1.pm1, "+", [pm1], UL, 60, 35, 20, 20 BUTTON #1.pc1, "+", [pc1], UL, 80, 35, 20, 20 BUTTON #1.pd1, "+", [pd1], UL, 100, 35, 20, 20 BUTTON #1.pu1, "+", [pu1], UL, 120, 35, 20, 20 BUTTON #1.mdm1, "-", [mdm1], UL, 40, 85, 20, 20 BUTTON #1.mm1, "-", [mm1], UL, 60, 85, 20, 20 BUTTON #1.mc1, "-", [mc1], UL, 80, 85, 20, 20 BUTTON #1.md1, "-", [md1], UL, 100, 85, 20, 20 BUTTON #1.mu1, "-", [mu1], UL, 120, 85, 20, 20 BUTTON #1.pcv1, "+", [pcv1], UL, 180, 35, 20, 20 '---Volume 1 BUTTON #1.pdv1, "+", [pdv1], UL, 200, 35, 20, 20 BUTTON #1.puv1, "+", [puv1], UL, 220, 35, 20, 20 BUTTON #1.mcv1, "-", [mcv1], UL, 180, 85, 20, 20 BUTTON #1.mdv1, "-", [mdv1], UL, 200, 85, 20, 20 BUTTON #1.muv1, "-", [muv1], UL, 220, 85, 20, 20 BUTTON #1.pdm2, "+", [pdm2], UL, 40, 135, 20, 20 '---freq 2 BUTTON #1.pm2, "+", [pm2], UL, 60, 135, 20, 20 BUTTON #1.pc2, "+", [pc2], UL, 80, 135, 20, 20 BUTTON #1.pd2, "+", [pd2], UL, 100, 135, 20, 20 BUTTON #1.pu2, "+", [pu2], UL, 120, 135, 20, 20 BUTTON #1.mdm2, "-", [mdm2], UL, 40, 185, 20, 20 BUTTON #1.mm2, "-", [mm2], UL, 60, 185, 20, 20 BUTTON #1.mc2, "-", [mc2], UL, 80, 185, 20, 20 BUTTON #1.md2, "-", [md2], UL, 100, 185, 20, 20 BUTTON #1.mu2, "-", [mu2], UL, 120, 185, 20, 20 BUTTON #1.pcv2, "+", [pcv2], UL, 180, 135, 20, 20'---Volume 2 BUTTON #1.pdv2, "+", [pdv2], UL, 200, 135, 20, 20 BUTTON #1.puv2, "+", [puv2], UL, 220, 135, 20, 20 BUTTON #1.mcv2, "-", [mcv2], UL, 180, 185, 20, 20 BUTTON #1.mdv2, "-", [mdv2], UL, 200, 185, 20, 20 BUTTON #1.muv2, "-", [muv2], UL, 220, 185, 20, 20 'BUTTON #1.vali, "Valid", [sinusoides], UL, 100, 225, 70, 25 graphicbox #1.gb 280,15,500,500 GRAPHICBOX #1.fr 15, 15, 250, 255 groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100 radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20 radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20 radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20 radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20 radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20 radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20 open "..." for window_nf as #1 #1 "trapclose [quit]" '----------------------------- INIT GRAPH-------------------------- #1.fr , "down;fill 236 233 216" freq1=1000:freq2=60:vol1=40:vol2=20 #1.fr, "color black;backcolor 236 233 216" #1.fr, "place 25 15": #1.fr, "\Fréquence 1, Hz": #1.fr, "place 170 15": #1.fr, "\Vol1, %" #1.fr, "place 25 115": #1.fr, "\Fréquence 2, Hz": #1.fr, "place 170 115": #1.fr, "\Vol2, %" #1.fr, "font courier_new 24 bold" #1.fr, "color blue;backcolor 236 233 216" gosub [affreq1]: gosub [affreq2] gosub [affvol1]: gosub [affvol2] 'gosub [sinusoides] print #1.rdb2,"setfocus" wait '----------------------- PRIMO WAIT------------------- [SParDiv1_On] deltaT=long1/longdiv:gosub [sinusoides]:wait [SParDiv1_off] wait [SParDiv2_On] deltaT=long2/longdiv:gosub [sinusoides]:wait [SParDiv2_Off] wait [SParDiv3_On] deltaT=long3/longdiv:gosub [sinusoides]:wait [SParDiv3_Off] wait [SParDiv4_On] deltaT=long4/longdiv:gosub [sinusoides]:wait [SParDiv4_off] wait [SParDiv5_On] deltaT=long5/longdiv:gosub [sinusoides]:wait [SParDiv5_Off] wait [SParDiv6_On] deltaT=long6/longdiv:gosub [sinusoides]:wait [SParDiv6_Off] wait '--------------------------------- '-------------------------------------------- [sinusoides] omega1=2*pi*int(freq1) omega2=2*pi*int(freq2) t=0 for a=0 to 499 courbeF1(a)=vol1*sin(omega1*t)/2 courbeF2(a)=vol2*sin(omega2*t)/2 'courbeF3(a)=40*sin(omega3*t) courbeF3(a)=courbeF1(a)+courbeF2(a) t=t+deltaT next cls 'ecran #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0" for x= 0 to 500 step longdiv #1.gb "line ";x;" 0 ";x;" 500" next for y= 0 to 500 step longdiv #1.gb "line 0 ";y;" 500 ";y next 'dessin #1.gb "color green" ph=180:midY1=50:midY2=150:midY3=350 oldY1=midY1:oldY2=midY2:oldY3=midY3 for n=0 to 499 x=n y=midY1+courbeF1(n) #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y oldX1=x:oldY1=y y=midY2+courbeF2(n) #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y oldX2=x:oldY2=y y=midY3+courbeF3(n) #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y oldX3=x:oldY3=y next #1.gb "flush" return '------------------------ Variation Freq 1 ---------------------- '-------plus [pdm1] freq1=freq1+10000:gosub [affreq1]:wait [pm1] freq1=freq1+1000:gosub [affreq1]:wait [pc1] freq1=freq1+100:gosub [affreq1]:wait [pd1] freq1=freq1+10:gosub [affreq1]:wait [pu1] freq1=freq1+1:gosub [affreq1]:wait '---------moins [mdm1] freq1=freq1-10000:gosub [affreq1]:wait [mm1] freq1=freq1-1000:gosub [affreq1]:wait [mc1] freq1=freq1-100:gosub [affreq1]:wait [md1] freq1=freq1-10:gosub [affreq1]:wait [mu1] freq1=freq1-1:gosub [affreq1]:wait [affreq1] if freq1 > 80000 then freq1=80000 if freq1 < 1 then freq1=1 freq1$=str$(freq1): lonfreq1=len(freq1$) select case lonfreq1 case 1 xxf=110 case 2 xxf=90 case 3 xxf=70 case 4 xxf=50 case 5 xxf=30 end select #1.fr,"place ";"30";" ";"30":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 130 70" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxf;" ";"65": #1.fr, "\"; str$(int(freq1)) gosub [sinusoides] return '------------------------ Variation Freq 2 ---------------------- 'plus [pdm2] freq2=freq2+10000:gosub [affreq2]:wait [pm2] freq2=freq2+1000:gosub [affreq2]:wait [pc2] freq2=freq2+100:gosub [affreq2]:wait [pd2] freq2=freq2+10:gosub [affreq2]:wait [pu2] freq2=freq2+1:gosub [affreq2]:wait 'moins [mdm2] freq2=freq2-10000:gosub [affreq2]:wait [mm2] freq2=freq2-1000:gosub [affreq2]:wait [mc2] freq2=freq2-100:gosub [affreq2]:wait [md2] freq2=freq2-10:gosub [affreq2]:wait [mu2] freq2=freq2-1:gosub [affreq2]:wait 'affichage [affreq2] if freq2 > 80000 then freq2=80000 if freq2 < 1 then freq2=1 freq2$=str$(freq2): lonfreq2=len(freq2$) select case lonfreq2 case 1 xxf2=110 case 2 xxf2=90 case 3 xxf2=70 case 4 xxf2=50 case 5 xxf2=30 end select #1.fr,"place ";"30";" ";"130":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 130 170" 'efface #1.fr, "color red;backcolor 236 233 216" #1.fr, "place ";xxf2;" ";"165": #1.fr, "\"; str$(int(freq2)) gosub [sinusoides] return '-------------------Variation Volume 1 ---------------------- 'plus [pcv1] vol1=vol1+100:gosub [affvol1]:wait [pdv1] vol1=vol1+10:gosub [affvol1]:wait [puv1] vol1=vol1+1:gosub [affvol1]:wait 'moins [mcv1] vol1=vol1-100:gosub [affvol1]:wait [mdv1] vol1=vol1-10:gosub [affvol1]:wait [muv1] vol1=vol1-1:gosub [affvol1]:wait 'affichage [affvol1] if vol1 > 100 then vol1=100 if vol1 < 0 then vol1=0 vol1$=str$(vol1): lonvol1=len(vol1$) select case lonvol1 case 1 xxv1=210 case 2 xxv1=190 case 3 xxv1=170 end select #1.fr,"place ";"170";" ";"30":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 70" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxv1;" ";"65": #1.fr, "\"; str$(int(vol1)) gosub [sinusoides] return '-------------------Variation Volume 2 --------------------- 'moins [pcv2] vol2=vol2+100:gosub [affvol2]:wait [pdv2] vol2=vol2+10:gosub [affvol2]:wait [puv2] vol2=vol2+1:gosub [affvol2]:wait 'plus [mcv2] vol2=vol2-100:gosub [affvol2]:wait [mdv2] vol2=vol2-10:gosub [affvol2]:wait [muv2] vol2=vol2-1:gosub [affvol2]:wait 'affichage [affvol2] if vol2 > 100 then vol2=100 if vol2 < 0 then vol2=0 vol2$=str$(vol2): lonvol2=len(vol2$) select case lonvol2 case 1 xxv2=210 case 2 xxv2=190 case 3 xxv2=170 end select #1.fr,"place ";"170";" ";"130":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 170" 'efface #1.fr, "color red;backcolor 236 233 216" #1.fr, "place ";xxv2;" ";"165": #1.fr, "\"; str$(int(vol2)) gosub [sinusoides] return [quit] close #1 end
Edité par Christophe Le 20/12/2015 à 23h56
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Cosmétique en effet. Je préférais les fréquences en bleu et les volumes en rouge, mais des goûts et des couleurs on ne peut discuter.
ça serait bien de générer la wav de la somme
Une onde peut être réglée en harmonique de l'autre (on peut mettre dans une fenêtre à part un tableau des harmoniques en fonction de la fondamentale pour consultation; ou un combo pour extraction et affectation)
Et c'est là qu'on s'aperçoit que si on veut trois harmoniques, il va falloir simplifier drastiquement la saisie des fréquences. Et on retombe sur la saisie au textbox et ton satané "Enter".
Ou alors faire un seul module de réglage et un (ou des) bouton(s) d'affectations du réglage aux différentes fréquences
Le plus simple et le plus balourd étant de faire avec des flags
Note: Si tu a su en additionner deux, y a pas de raisons que tu n'en additionne pas quatre
Re note: Je m'étais planté en parlant de modulation d'amplitude par simple addition; on peut voir une vraie variation d'amplitude si on règle à 1200 et 1060 (et autour)
ça serait bien de générer la wav de la somme
Une onde peut être réglée en harmonique de l'autre (on peut mettre dans une fenêtre à part un tableau des harmoniques en fonction de la fondamentale pour consultation; ou un combo pour extraction et affectation)
Et c'est là qu'on s'aperçoit que si on veut trois harmoniques, il va falloir simplifier drastiquement la saisie des fréquences. Et on retombe sur la saisie au textbox et ton satané "Enter".
Ou alors faire un seul module de réglage et un (ou des) bouton(s) d'affectations du réglage aux différentes fréquences
Le plus simple et le plus balourd étant de faire avec des flags
Note: Si tu a su en additionner deux, y a pas de raisons que tu n'en additionne pas quatre
Re note: Je m'étais planté en parlant de modulation d'amplitude par simple addition; on peut voir une vraie variation d'amplitude si on règle à 1200 et 1060 (et autour)
____________________
Roro
Roro
Suite de: 21/12/15 à 17h13
Dans l'éventualité d'ajouter des fréquences, j'ai fait ça.
Pour éviter de refaire autant de procédures que de fréquences, je passe par des tableaux (N° de freq, pos d'aff)
Le bouton fait tourner l'affectation du réglage; bien que je préfèrerais un bouton par fréquence.
ça a l'air de marcher (la freq 3 n'est là que pour l'affichage).
J'ai laissé les boites d'effacement visibles pour les positionner
J'espère ne pas avoir mis trop de souk
Code VB :
Dans l'éventualité d'ajouter des fréquences, j'ai fait ça.
Pour éviter de refaire autant de procédures que de fréquences, je passe par des tableaux (N° de freq, pos d'aff)
Le bouton fait tourner l'affectation du réglage; bien que je préfèrerais un bouton par fréquence.
ça a l'air de marcher (la freq 3 n'est là que pour l'affichage).
J'ai laissé les boites d'effacement visibles pour les positionner
J'espère ne pas avoir mis trop de souk
Code VB :
nomainwin dim courbeF1(500), courbeF2(500), courbeF3(500) '----------------------------- INIT PARAM-------------------------- dim courbeF1(500), courbeF2(500), courbeF3(500) pi=3.1415926536 t=0 longdiv=50 'larg div (pxls). trait div = 1 pxl ~~0 long1=0.005 'secondes par division long2=0.002 long3=0.001 long4=0.0005 long5=0.0002 long6=0.0001 long1aff$=str$(long1*1000) 'secondes par division, pour affichage long2aff$=str$(long2*1000) long3aff$=str$(long3*1000) long4aff$=str$(long4*1000) long5aff$=str$(long5*1000) long6aff$=str$(long6*1000) dim freq(4):freq(1)=1200:freq(2)=1060:freq(3)=600':freq(4)=50 '§§§§§§§§§§§§§§ dim posfr(4): posfr(1)=150:posfr(2)=220:posfr(3)=290':posfr(4)=220 dim eff1(4): eff1(1)=125:eff1(2)=195:eff1(3)=265':eff1(4)=220 dim eff2(4): eff2(1)=115:eff2(2)=115:eff2(3)=115':eff2(4)=220 dim eff3(4): eff3(1)=155:eff3(2)=225:eff3(3)=295':eff3(4)=220 nfreq=1 '***************************Fin init param************************** WindowWidth = 800: UpperLeftX = 200 WindowHeight = 600: UpperLeftY = 200 BUTTON #1.pdm1, "+", [pdm1], UL, 20, 35, 20, 20 '---freq 1 BUTTON #1.pm1, "+", [pm1], UL, 40, 35, 20, 20 BUTTON #1.pc1, "+", [pc1], UL, 60, 35, 20, 20 BUTTON #1.pd1, "+", [pd1], UL, 80, 35, 20, 20 BUTTON #1.pu1, "+", [pu1], UL, 100, 35, 20, 20 BUTTON #1.mdm1, "-", [mdm1], UL, 20, 85, 20, 20 BUTTON #1.mm1, "-", [mm1], UL, 40, 85, 20, 20 BUTTON #1.mc1, "-", [mc1], UL, 60, 85, 20, 20 BUTTON #1.md1, "-", [md1], UL, 80, 85, 20, 20 BUTTON #1.mu1, "-", [mu1], UL, 100, 85, 20, 20 BUTTON #1.flfr, "", [flagfr], UL, 140, 60, 30, 30 '--Affectation BUTTON #1.pcv1, "+", [pcv1], UL, 180, 35, 20, 20 '---Volume 1 BUTTON #1.pdv1, "+", [pdv1], UL, 200, 35, 20, 20 BUTTON #1.puv1, "+", [puv1], UL, 220, 35, 20, 20 BUTTON #1.mcv1, "-", [mcv1], UL, 180, 85, 20, 20 BUTTON #1.mdv1, "-", [mdv1], UL, 200, 85, 20, 20 BUTTON #1.muv1, "-", [muv1], UL, 220, 85, 20, 20 BUTTON #1.pcv2, "+", [pcv2], UL, 180, 135, 20, 20'---Volume 2 BUTTON #1.pdv2, "+", [pdv2], UL, 200, 135, 20, 20 BUTTON #1.puv2, "+", [puv2], UL, 220, 135, 20, 20 BUTTON #1.mcv2, "-", [mcv2], UL, 180, 185, 20, 20 BUTTON #1.mdv2, "-", [mdv2], UL, 200, 185, 20, 20 BUTTON #1.muv2, "-", [muv2], UL, 220, 185, 20, 20 graphicbox #1.gb 280,15,500,500 GRAPHICBOX #1.fr 15, 15, 250, 355 groupbox #1.gbx3, "Base de temps", 8, 395, 225, 100 radiobutton #1.rdb1, long1aff$+" ms par div", [SParDiv1_On], [SParDiv1_off], 26, 415, 96, 20 radiobutton #1.rdb2, long2aff$+" ms par div", [SParDiv2_On], [SParDiv2_Off], 26, 440, 96, 20 radiobutton #1.rdb3, long3aff$+" ms par div", [SParDiv3_On], [SParDiv3_Off], 26, 465, 96, 20 radiobutton #1.rdb4, long4aff$+" ms par div", [SParDiv4_On], [SParDiv4_off], 126, 415, 96, 20 radiobutton #1.rdb5, long5aff$+" ms par div", [SParDiv5_On], [SParDiv5_Off], 126, 440, 96, 20 radiobutton #1.rdb6, long6aff$+" ms par div", [SParDiv6_On], [SParDiv6_Off], 126, 465, 96, 20 open "..." for window_nf as #1 #1 "trapclose [quit]" '----------------------------- INIT GRAPH-------------------------- #1.fr , "down;fill 236 233 216" 'freq1=1000:freq2=60: vol1=40:vol2=20 #1.fr, "color black;backcolor 236 233 216" #1.fr, "place 5 115": #1.fr, "\Fréquence 1, Hz": #1.fr, "place 170 15": #1.fr, "\Vol1, %" #1.fr, "place 5 180": #1.fr, "\Fréquence 2, Hz": #1.fr, "place 170 115": #1.fr, "\Vol2, %" #1.fr, "place 5 245": #1.fr, "\Fréquence 3, Hz" #1.fr, "place 2 60": #1.fr, "\dm .m .c .d .u":#1.fr, "place 120 40": #1.fr, "\N°freq" #1.fr, "font courier_new 24 bold" #1.fr, "color blue;backcolor 236 233 216" #1.flfr,str$(nfreq) gosub [affreq1]: nfreq=2:gosub [affreq2]: nfreq=3:gosub [affreq3]: nfreq=1 gosub [affvol1]: gosub [affvol2] gosub [sinusoides] print #1.rdb2,"setfocus" wait '----------------------- PRIMO WAIT------------------- [SParDiv1_On] deltaT=long1/longdiv:gosub [sinusoides]:wait [SParDiv1_off] wait [SParDiv2_On] deltaT=long2/longdiv:gosub [sinusoides]:wait [SParDiv2_Off] wait [SParDiv3_On] deltaT=long3/longdiv:gosub [sinusoides]:wait [SParDiv3_Off] wait [SParDiv4_On] deltaT=long4/longdiv:gosub [sinusoides]:wait [SParDiv4_off] wait [SParDiv5_On] deltaT=long5/longdiv:gosub [sinusoides]:wait [SParDiv5_Off] wait [SParDiv6_On] deltaT=long6/longdiv:gosub [sinusoides]:wait [SParDiv6_Off] wait '--------------------------------- '-------------------------------------------- [sinusoides] omega1=2*pi*int(freq(1)) omega2=2*pi*int(freq(2)) t=0 for a=0 to 499 courbeF1(a)=vol1*sin(omega1*t)/2 courbeF2(a)=vol2*sin(omega2*t)/2 'courbeF3(a)=40*sin(omega3*t) courbeF3(a)=courbeF1(a)+courbeF2(a) t=t+deltaT next cls 'ecran #1.gb "down ; fill 0 106 53":#1.gb "color 157 157 0" for x= 0 to 500 step longdiv #1.gb "line ";x;" 0 ";x;" 500" next for y= 0 to 500 step longdiv #1.gb "line 0 ";y;" 500 ";y next 'dessin #1.gb "color green" ph=180:midY1=50:midY2=150:midY3=350 oldY1=midY1:oldY2=midY2:oldY3=midY3 for n=0 to 499 x=n y=midY1+courbeF1(n) #1.gb "line ";oldX1;" ";oldY1;" ";x;" ";y oldX1=x:oldY1=y y=midY2+courbeF2(n) #1.gb "line ";oldX2;" ";oldY2;" ";x;" ";y oldX2=x:oldY2=y y=midY3+courbeF3(n) #1.gb "line ";oldX3;" ";oldY3;" ";x;" ";y oldX3=x:oldY3=y next #1.gb "flush" return '------------------------ Variation Frequences ---------------------- [flagfr] '-----Affectation nfreq=nfreq+1 if nfreq=4 then nfreq=1 #1.flfr, str$(nfreq) wait [pdm1] '-------plus freq(nfreq)=freq(nfreq)+10000:gosub [affreq1]:wait [pm1] freq(nfreq)=freq(nfreq)+1000:gosub [affreq1]:wait [pc1] freq(nfreq)=freq(nfreq)+100:gosub [affreq1]:wait [pd1] freq(nfreq)=freq(nfreq)+10:gosub [affreq1]:wait [pu1] freq(nfreq)=freq(nfreq)+1:gosub [affreq1]:wait [mdm1] '---------moins freq(nfreq)=freq(nfreq)-10000:gosub [affreq1]:wait [mm1] freq(nfreq)=freq(nfreq)-1000:gosub [affreq1]:wait [mc1] freq(nfreq)=freq(nfreq)-100:gosub [affreq1]:wait [md1] freq(nfreq)=freq(nfreq)-10:gosub [affreq1]:wait [mu1] freq(nfreq)=freq(nfreq)-1:gosub [affreq1]:wait [affreq1] [affreq2] [affreq3] if freq(nfreq) > 80000 then freq(nfreq)=80000 if freq(nfreq) < 1 then freq(nfreq)=1 freq1$=str$(freq(nfreq)): lonfreq1=len(freq1$) select case lonfreq1 case 1 xxf=90 case 2 xxf=70 case 3 xxf=50 case 4 xxf=30 case 5 xxf=10 end select #1.fr,"place ";"5";" ";eff1(nfreq):#1.fr,"color red;backcolor 236 233 216":#1.fr,"boxfilled ";eff2(nfreq);" ";eff3(nfreq) 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxf;" ";posfr(nfreq): #1.fr, "\"; str$(int(freq(nfreq))) #1.fr, "flush" gosub [sinusoides] return '-------------------Variation Volume 1 ---------------------- 'plus [pcv1] vol1=vol1+100:gosub [affvol1]:wait [pdv1] vol1=vol1+10:gosub [affvol1]:wait [puv1] vol1=vol1+1:gosub [affvol1]:wait 'moins [mcv1] vol1=vol1-100:gosub [affvol1]:wait [mdv1] vol1=vol1-10:gosub [affvol1]:wait [muv1] vol1=vol1-1:gosub [affvol1]:wait 'affichage [affvol1] if vol1 > 100 then vol1=100 if vol1 < 0 then vol1=0 vol1$=str$(vol1): lonvol1=len(vol1$) select case lonvol1 case 1 xxv1=210 case 2 xxv1=190 case 3 xxv1=170 end select #1.fr,"place ";"170";" ";"30":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 70" 'efface #1.fr, "color blue;backcolor 236 233 216" #1.fr, "place ";xxv1;" ";"65": #1.fr, "\"; str$(int(vol1)) #1.fr, "flush" gosub [sinusoides] return '-------------------Variation Volume 2 --------------------- 'moins [pcv2] vol2=vol2+100:gosub [affvol2]:wait [pdv2] vol2=vol2+10:gosub [affvol2]:wait [puv2] vol2=vol2+1:gosub [affvol2]:wait 'plus [mcv2] vol2=vol2-100:gosub [affvol2]:wait [mdv2] vol2=vol2-10:gosub [affvol2]:wait [muv2] vol2=vol2-1:gosub [affvol2]:wait 'affichage [affvol2] if vol2 > 100 then vol2=100 if vol2 < 0 then vol2=0 vol2$=str$(vol2): lonvol2=len(vol2$) select case lonvol2 case 1 xxv2=210 case 2 xxv2=190 case 3 xxv2=170 end select #1.fr,"place ";"170";" ";"130":#1.fr,"color 236 233 216;backcolor 236 233 216":#1.fr,"boxfilled 230 170" 'efface #1.fr, "color red;backcolor 236 233 216" #1.fr, "place ";xxv2;" ";"165": #1.fr, "\"; str$(int(vol2)) #1.fr, "flush" gosub [sinusoides] return [quit] close #1 end
____________________
Roro
Roro
Sorry Roland, je rédigeais ma réponse à ton post précédent. Je regarde ta nouvelle mouture et je reviens après.
En attendant je répond à ton post d'avant :
J'ai préféré en effet une couleur par fréquence, volume, et trace. Je n'ai pas osé changer la couleur des traces, parce que je trouve que leur vert est tout à fait adapté. Peut-être en mettant une barre de couleur en regard de la trace correspondante. Ce n'est pas obligatoire...
Il reste encore le problème de la droite au milieu de la sinusoïde, comme s'il y avait en plus de la courbe un trait entre le point 0 et le point 499 du graphe. Je n'ai pas trouvé
ça doit pourtant être simple, mais c'est dur de se replonger dans le bintz.
Prochain travail : la génération du wav de la courbe du bas
La gestion des harmoniques ne devrait pas nécessiter de roues codeuses, puisque les harmoniques sont multiples de la fréquence principale. Je verrais bien un bouton par fréquence principale, ouvrant une fenêtre listant une série de potards dans lesquels il suffit de cliquer à la souris pour ajuster le niveau de chaque harmonique.
Qu'entends-tu par flag ?
Un point qu'il faudra aborder : il n'y a pas d'antialiasing sur les courbes, du coup, elles apparaissent parfois surprenantes (par ex : 11000Hz vol 70 et 2060Hz vol 70 à 5 ms par division. Il y a de la recherche à faire à ce niveau-là : que donnerait l'image sur un vrai oscillo, et comment la reproduire ? A ce jour je ne vois pas trop comment faire. Si quelqu'un dispose d'un oscillo analogique et d'un générateur sinus 2 voies, et qu'il puisse nous faire parvenir une photo...
si on règle à 1200 et 1060 à 2ms/div: : mon latin est soumis à rude épreuve. je sais que par mélange les radios utilisent des fréquences intermédiaires. En mélangeant 1200 et 1060 Hz, on obtient 1200-1060=140 Hz et 1200+1060=2260 Hz. Or je mesure 70 Hz au lieu de 140 Hz... et qu'est devenu le 2260 ? Faut vraiment que je me mette sérieusement à l'étude des ondes, 'm'étonne pas que j'ai jamais rien compris...
edit : premier commentaire à chaud : c'est clair, tu maîtrise les boutons ^^. Je regarde plus en détail, mais pas pour ce soir. Bonne nuit
Edité par Christophe Le 21/12/2015 à 21h55
En attendant je répond à ton post d'avant :
J'ai préféré en effet une couleur par fréquence, volume, et trace. Je n'ai pas osé changer la couleur des traces, parce que je trouve que leur vert est tout à fait adapté. Peut-être en mettant une barre de couleur en regard de la trace correspondante. Ce n'est pas obligatoire...
Il reste encore le problème de la droite au milieu de la sinusoïde, comme s'il y avait en plus de la courbe un trait entre le point 0 et le point 499 du graphe. Je n'ai pas trouvé

Prochain travail : la génération du wav de la courbe du bas
La gestion des harmoniques ne devrait pas nécessiter de roues codeuses, puisque les harmoniques sont multiples de la fréquence principale. Je verrais bien un bouton par fréquence principale, ouvrant une fenêtre listant une série de potards dans lesquels il suffit de cliquer à la souris pour ajuster le niveau de chaque harmonique.
Qu'entends-tu par flag ?
Un point qu'il faudra aborder : il n'y a pas d'antialiasing sur les courbes, du coup, elles apparaissent parfois surprenantes (par ex : 11000Hz vol 70 et 2060Hz vol 70 à 5 ms par division. Il y a de la recherche à faire à ce niveau-là : que donnerait l'image sur un vrai oscillo, et comment la reproduire ? A ce jour je ne vois pas trop comment faire. Si quelqu'un dispose d'un oscillo analogique et d'un générateur sinus 2 voies, et qu'il puisse nous faire parvenir une photo...
si on règle à 1200 et 1060 à 2ms/div: : mon latin est soumis à rude épreuve. je sais que par mélange les radios utilisent des fréquences intermédiaires. En mélangeant 1200 et 1060 Hz, on obtient 1200-1060=140 Hz et 1200+1060=2260 Hz. Or je mesure 70 Hz au lieu de 140 Hz... et qu'est devenu le 2260 ? Faut vraiment que je me mette sérieusement à l'étude des ondes, 'm'étonne pas que j'ai jamais rien compris...
edit : premier commentaire à chaud : c'est clair, tu maîtrise les boutons ^^. Je regarde plus en détail, mais pas pour ce soir. Bonne nuit
Edité par Christophe Le 21/12/2015 à 21h55
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Réponse à ta réponse du post d'avant:
J'ai laissé tombés les flags (drapeaux) pour les tableaux (plus élégant et plus pratique)
Pour la trace au 0 V et les courbes bizarres, il ne faut pas oublier que: [sinusoïdes] a un double usage; ce qui est totalement illégal. la base de temps devrait être un balayage sur les "x"; les sinusoïdes elles, ne devraient êtres que des variations de niveau. La visu telle quelle est fabriquée est une monstrueuse entourloupe.
" En mélangeant 1200 et 1060 Hz" les amplitudes (niveaux) s'additionnent; pas les fréquences
200 Hz niv:40 + 200 Hz niv: 40 = 200 Hz niv: 80
On obtient des fréquences différentes par le déphasage (à confirmer)
Bien que les harmoniques soient des multiples, il serait bon de garder les réglages dispos pour faire de l'anharmonique
Et en fait, la visu pourrait se limiter à l'onde finale -une fois que le bazar sera bien maîtrisé
J'ai laissé tombés les flags (drapeaux) pour les tableaux (plus élégant et plus pratique)
Pour la trace au 0 V et les courbes bizarres, il ne faut pas oublier que: [sinusoïdes] a un double usage; ce qui est totalement illégal. la base de temps devrait être un balayage sur les "x"; les sinusoïdes elles, ne devraient êtres que des variations de niveau. La visu telle quelle est fabriquée est une monstrueuse entourloupe.
" En mélangeant 1200 et 1060 Hz" les amplitudes (niveaux) s'additionnent; pas les fréquences
200 Hz niv:40 + 200 Hz niv: 40 = 200 Hz niv: 80
On obtient des fréquences différentes par le déphasage (à confirmer)
Bien que les harmoniques soient des multiples, il serait bon de garder les réglages dispos pour faire de l'anharmonique
Et en fait, la visu pourrait se limiter à l'onde finale -une fois que le bazar sera bien maîtrisé
____________________
Roro
Roro
Oki, j'ai vu le problème.
Je ne vois rien d'illégal dans l'usage de "sinusoides", on y va à chaque fois qu'il faut recalculer et afficher les traces, et la base de temps _est_ un balayage sur les x, point d'entourloupe là dedans, ou alors je m'appelle David Copperfield^^
Quelque chose d'illégal dans notre manière de procéder consiste à relier deux échantillons successifs par un segment de droite, ce qui est rigoureusement faux : rien ne dit qu'entre ces deux points successifs le signal numérisé évolue linéairement.
Avec le scope à 5 ms/div, sachant qu'il y a 50 pixels par division, un pixel correspond sur x à un temps valant 0.005/50 = 0.1 ms. Une période sinusoidale passe 3 fois par zéro : au début, au milieu et à la fin. Si ces trois points sont distants de 0.1 ms, la période vaut 0.2 ms, et on affichera une courbe plate valant zéro, alors que la sinusoide existe bel et bien... essaie avec 5 kHz à 5 ms/div, et vise un peu la tête de la sinus...
Donc on se plante dans la philosophie, car j'étais parti pour convertir en audio ce qui était affiché à l'écran, en fait il faut d'abord numériser à la fréquence double de la fréquence max (le théorème de Nyquist), et ensuite rien n'empêche d'en déduire les points de l'affichage, qui ne seront que de l'affichage. N'afficher que le résultat me plait aussi.
(pour les harmoniques non harmoniques, on va les laisser de côté pour le moment, on complexificationnera plus tard. Qui m'avait conseillé de rester simple, hein ?
)
Je réfléchis à cette numérisation (et on avait dit aussi qu'on ajouterait un réglage de déphasage entre les deux traces, ça devrait être pas trop compliqué à mettre en oeuvre)
Bon après-midi, je repasse sans doutes ce soir.
A+
Je ne vois rien d'illégal dans l'usage de "sinusoides", on y va à chaque fois qu'il faut recalculer et afficher les traces, et la base de temps _est_ un balayage sur les x, point d'entourloupe là dedans, ou alors je m'appelle David Copperfield^^
Quelque chose d'illégal dans notre manière de procéder consiste à relier deux échantillons successifs par un segment de droite, ce qui est rigoureusement faux : rien ne dit qu'entre ces deux points successifs le signal numérisé évolue linéairement.
Avec le scope à 5 ms/div, sachant qu'il y a 50 pixels par division, un pixel correspond sur x à un temps valant 0.005/50 = 0.1 ms. Une période sinusoidale passe 3 fois par zéro : au début, au milieu et à la fin. Si ces trois points sont distants de 0.1 ms, la période vaut 0.2 ms, et on affichera une courbe plate valant zéro, alors que la sinusoide existe bel et bien... essaie avec 5 kHz à 5 ms/div, et vise un peu la tête de la sinus...
Donc on se plante dans la philosophie, car j'étais parti pour convertir en audio ce qui était affiché à l'écran, en fait il faut d'abord numériser à la fréquence double de la fréquence max (le théorème de Nyquist), et ensuite rien n'empêche d'en déduire les points de l'affichage, qui ne seront que de l'affichage. N'afficher que le résultat me plait aussi.
(pour les harmoniques non harmoniques, on va les laisser de côté pour le moment, on complexificationnera plus tard. Qui m'avait conseillé de rester simple, hein ?

Je réfléchis à cette numérisation (et on avait dit aussi qu'on ajouterait un réglage de déphasage entre les deux traces, ça devrait être pas trop compliqué à mettre en oeuvre)
Bon après-midi, je repasse sans doutes ce soir.
A+
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Je dis que c'est une entourloupe par rapport au fonctionnement d'un oscillo
Si par exemple tu mets 1 s par div, je doute que tu vois le balayage sans signal.
Citation:
Lol ! Ah oui, c'était mal barré. il ne faut travailler que sur le code de notre ami l'inconnu.
Sur qu'un signal numérisé, c'est que des rondelles; si fines soient-elles; mais bon, une droite c'est aussi que des points; vaste débat
La visu n'est qu'une visu et n'a rien à voir avec l'usine à gaz de l"inconnu"
On va peut-être laisser aussi de côté la visu par échantillonnage, hein.
Le tout est de comprendre comment l"inconnu" a additionnées (en fait mixées) ses fréquences, il """"suffira"""" de piloter les paramètres par le réglage des fréquence actuel (en parallèle ou séparément, la visu ne sera qu'une "relation" de ce qu'a pondu l'usine à gaz)
Le déphasage à la visu pour le fun (une seule puisque c'est relatif)
Le gros morceau, c'est l'usine à gaz, et là, comme visu, y a que la mainwin ; d'ici qu'il faille faire un programme pour décortiquer la flopée de données qu'elle sort, y a pas loin
Si par exemple tu mets 1 s par div, je doute que tu vois le balayage sans signal.
Citation:
convertir en audio ce qui était affiché à l'écran,
Lol ! Ah oui, c'était mal barré. il ne faut travailler que sur le code de notre ami l'inconnu.
Sur qu'un signal numérisé, c'est que des rondelles; si fines soient-elles; mais bon, une droite c'est aussi que des points; vaste débat
La visu n'est qu'une visu et n'a rien à voir avec l'usine à gaz de l"inconnu"
On va peut-être laisser aussi de côté la visu par échantillonnage, hein.
Le tout est de comprendre comment l"inconnu" a additionnées (en fait mixées) ses fréquences, il """"suffira"""" de piloter les paramètres par le réglage des fréquence actuel (en parallèle ou séparément, la visu ne sera qu'une "relation" de ce qu'a pondu l'usine à gaz)
Le déphasage à la visu pour le fun (une seule puisque c'est relatif)
Le gros morceau, c'est l'usine à gaz, et là, comme visu, y a que la mainwin ; d'ici qu'il faille faire un programme pour décortiquer la flopée de données qu'elle sort, y a pas loin
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie