Forum Liberty Basic France

Général » Oscilloscope... (simulateur) Voilà toute la puissance et la simplicité de JB ;)
Le 28/05/2012 à 11h05

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Excellent code de Rod du forum anglophone, un peu revu à ma sauce :siffle :

Code VB :
'  from awesome Rod's code.
'  http://justbasic.conforums.com/index.cgi?board=code&action=display&num=1337870012

    nomainwin
    WindowWidth = 500
    WindowHeight = 600
    graphicbox  #1.gb 45,20,400,400
    checkbox    #1.cb, "Drift", [set], [set], 150, 430, 80, 15
    statictext  #1.stx01 "X",       15, 480,10,15
    statictext  #1.stx02 "Y",       15, 510,10,15
 
    GROUPBOX #1.sthz0, "Hertz", 32, 448, 130, 95
    statictext  #1.sthz1 "0";space$(18);"100",  45, 465, 102, 15
    statictext  #1.sthz2 "5",     84, 465, 20, 15
    graphicbox  #1.gbhzx 45, 480, 102, 19
    graphicbox  #1.gbhzy 45, 510, 102, 19
 
    GROUPBOX #1.stph0, "Phase", 182, 448, 130, 95
    statictext  #1.stph1 "0",      195, 465, 10, 15
    statictext  #1.stph2 "360",    276, 465, 20, 15
    graphicbox  #1.gbphx 195, 480, 102, 19
    graphicbox  #1.gbphy 195, 510, 102, 19
 
    GROUPBOX #1.stvo0, "Volume", 330, 448, 130, 95
    statictext  #1.stvo1 "0",      345, 465, 10, 15
    statictext  #1.stvo2 "100",    426, 465, 20, 15
    graphicbox  #1.gbvox 345, 480, 102, 19
    graphicbox  #1.gbvoy 345, 510, 102, 19
 
    open "Lissajous" for window_nf as #1  'graphics_nsb
    #1 "trapclose [quit]"
    #1 "font arial 10"
    for w = 1 to 11
        sld$ = word$("#1.sthz0 #1.sthz1 #1.sthz2 #1.stph0 #1.stph1 #1.stph2 #1.stvo0 #1.stvo1 #1.stvo2 #1.stx01 #1.stx02",w)
        #sld$ "!font arial 10"
    next
    for w = 1 to 6
        sld$ = word$("#1.gbhzx #1.gbhzy #1.gbphx #1.gbphy #1.gbvox #1.gbvoy",w)
        #sld$ "down"
    next
    #1.cb "font arial 10"
    #1.cb "set"
 
    GLOBAL slidecolor$
 
    slidecolor$ = "0 150 0"
    hertzX=5
    hertzY=5
    volX=100
    volY=100
    phaseX=180
    phaseY=180
    drift=1
    midX=200
    midY=200
    rad=57.29577951
    sizeSet = 2
    #1.sthz2 hertzX
 
    #1.gb "down ; fill 0 50 0"
    #1.gb "color 50 50 50"
    for x= 20 to 480 step 20
        #1.gb "line ";x;" 0 ";x;" 600"
    next
    for y= 20 to 480 step 20
        #1.gb "line 0 ";y;" 600 ";y
    next
    #1.gb "flush one"
    #1.gb "color 0 100 0"
 
    #1.sthz2 slideB("#1.gbhzx",hertzX)
    print slideB("#1.gbhzy",hertzY)
    print slideB("#1.gbphx",int(phaseX/3.6))
    print slideB("#1.gbphy",int(phaseY/3.6))
    print slideB("#1.gbvox",volX)
    print slideB("#1.gbvoy",volY)
 
    #1.gbhzx "when leftButtonMove [mousehzx]"
    #1.gbhzx "when leftButtonDown [mousehzx]"
    #1.gbhzx "when characterInput [keyhzx]"
    #1.gbhzy "when leftButtonMove [mousehzy]"
    #1.gbhzy "when leftButtonDown [mousehzy]"
    #1.gbhzy "when characterInput [keyhzy]"
    #1.gbphx "when leftButtonMove [mousephx]"
    #1.gbphx "when leftButtonDown [mousephx]"
    #1.gbphx "when characterInput [keyphx]"
    #1.gbphy "when leftButtonMove [mousephy]"
    #1.gbphy "when leftButtonDown [mousephy]"
    #1.gbphy "when characterInput [keyphy]"
    #1.gbvox "when leftButtonMove [mousevox]"
    #1.gbvox "when leftButtonDown [mousevox]"
    #1.gbvox "when characterInput [keyvox]"
    #1.gbvoy "when leftButtonMove [mousevoy]"
    #1.gbvoy "when leftButtonDown [mousevoy]"
    #1.gbvoy "when characterInput [keyvoy]"
 
    timer 20, [drawit]
    wait
 
    [drawit]
    start=0
    #1.gb "discard ; redraw one ; size ";sizeSet
    for n= 0 to 359
        x=midX-(1.8*volX*sin(phaseX/rad))
        y=midY-(1.8*volY*cos(phaseY/rad))
        if start=1 then
            #1.gb "line ";oldX;" ";oldY;" ";x;" ";y
        else
            start=1
            #1.gb "set ";x;" ";y
        end if
        oldX=x
        oldY=y
        phaseX=phaseX+hertzX
        if phaseX>359 then phaseX=phaseX-360-drift
        phaseY=phaseY+hertzY
        if phaseY>359 then phaseY=phaseY-360
    next
    wait
 
    [mousehzx]
    slide=1
    hertzX=MouseX
    if hertzX<0 then hertzX=0
    if hertzX>100 then hertzX=100
    goto [updatecontrol]
 
    [keyhzx]
    slide=1
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then hertzX=hertzX-(hertzX>0)
    if key=_VK_RIGHT then hertzX=hertzX+(hertzX<100)
    goto [updatecontrol]
 
    [mousehzy]
    slide=2
    hertzY=MouseX
    if hertzY<0 then hertzY=0
    if hertzY>100 then hertzY=100
    goto [updatecontrol]
 
    [keyhzy]
    slide=2
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then hertzY=hertzY-(hertzY>0)
    if key=_VK_RIGHT then hertzY=hertzY+(hertzY<100)
    goto [updatecontrol]
 
    [mousephx]
    slide=3
    phaseX=int(MouseX*3.6)
    if phaseX<0 then phaseX=0
    if phaseX>360 then phaseX=360
    goto [updatecontrol]
 
    [keyphx]
    slide=3
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then phaseX=phaseX-(phaseX>0)
    if key=_VK_RIGHT then phaseX=phaseX+(phaseX<360)
    goto [updatecontrol]
 
    [mousephy]
    slide=4
    phaseY=int(MouseX*3.6)
    if phaseY<0 then phaseY=0
    if phaseY>360 then phaseY=360
    goto [updatecontrol]
 
    [keyphy]
    slide=4
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then phaseY=phaseY-(phaseY>0)
    if key=_VK_RIGHT then phaseY=phaseY+(phaseY<360)
    goto [updatecontrol]
 
    [mousevox]
    slide=5
    volX=MouseX
    if volX<1 then volX=1
    if volX>100 then volX=100
    goto [updatecontrol]
 
    [keyvox]
    slide=5
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then volX=volX-(volX>0)
    if key=_VK_RIGHT then volX=volX+(volX<100)
    goto [updatecontrol]
 
    [mousevoy]
    slide=6
    volY=MouseX
    if volY<0 then volY=0
    if volY>100 then volY=100
    goto [updatecontrol]
 
    [keyvoy]
    slide=6
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then volY=volY-(volY>0)
    if key=_VK_RIGHT then volY=volY+(volY<100)
    goto [updatecontrol]
 
    [set]
        drift = drift+1-2*(drift=1)  ' 1 - 0 - 1 - 0 - 1 - 0 - etc...
    wait
 
    [updatecontrol]
    select case slide
        case 1
            #1.sthz2 slideB("#1.gbhzx",hertzX)
        case 2
            print slideB("#1.gbhzy",hertzY)
        case 3
            print slideB("#1.gbphx",int(phaseX/3.6))
        case 4
            print slideB("#1.gbphy",int(phaseY/3.6))
        case 5
            print slideB("#1.gbvox",volX)
        case 6
            print slideB("#1.gbvoy",volY)
    end select
    wait
 
    function slideB(sld$,value)
        #sld$ "fill ";slidecolor$;" ;size 1"
        #sld$ "backcolor darkgray"
        #sld$ "line 0 8 120 8"
        #sld$ "place ";value-4;" 0 ; boxfilled  ";value+4;" 17"
        slideB = value
    end function
 
    [quit]
        timer 0
        close #1
    end
 


J'ai repris la façon un peu spéciale d'utiliser une fonction dans un code de Roland. ;)

Je vais sans doute y ajouter quelques trucs :
- toutes les valeurs visibles
- épaisseur du trait de courbe réglable
- mémoires des courbes

@+



Edité par cassiope01 Le 28/05/2012 à 11h14
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 28/05/2012 à 18h12

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Houla la.... j'utilise les fonctions comme les poules utilisent les couteaux.
Je n'avais jamais vu d'oscillo anglais. celui-là est assez bizarre, il fait des Lissajous tout seul ? Où qu'il est le générateur ?
J'aurais une question, je la mets pas chez "débutant" car il y a Claude qui en a posté une, lui aussi, il aimerait maitriser le temps (temps fugit.....vive les montres molles de Dali )
La question:
y'a t-il moyen de faire varier Y pendant le vol de l'oiseau, avec ce genre de code, ou faut-il s'y prendre autrement ? ( je pense que tu ne devrais pas avoir besoin de l'oiseau pour voir de quoi il retourne )

Code JB :
 
 
  'B3c
nomainwin
WindowWidth = 450:WindowHeight =450
UpperLeftX=Int((DisplayWidth-WindowWidth)/2)
UpperLeftY=Int((DisplayHeight-WindowHeight)/2)
 
graphicbox #w.g, 20, 20, 300, 200
open "test B3c" for window as #w
print #w, "trapclose [quit]"
 
   xx=20:yy=0
   loadbmp "bird1", "oisv1.bmp"
 
    print #w.g, "down;fill darkgreen"
    print #w.g, "flush"
    print #w.g, "getbmp bg 0, 0, 300, 200";
    print #w.g, "background bg";
 
    print #w.g, "addsprite bird1 bird1";
    print #w.g, "spritexy bird1 3 50";
    print #w.g, "spritemovexy bird1  20 0"
    print #w.g, "spritemovexy bird1 ";xx;" ";yy'  20 0"
 
timer 150, [go]
  [go]
    gosub [limit]
    gosub [draw]
 
  wait
 
  [limit]
    print #w.g, "spritexy? bird1 SqX SqY"
    if SqX >=300 then print #w.g, "spritexy bird1 0 50";
    return
 
  [draw]
  print #w.g, "drawsprites";
  return
 
 [quit]
   close #w
   end
 
 


Et bien sur merci d'avance :)



Edité par Roland Le 28/05/2012 à 20h01
____________________
Roro

   
Le 29/05/2012 à 00h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Un oscillo qui fait des Lissajous tout seul, c'était vraiment trop bizarre.
Alors voici le géné multi , il rest de " MENUS " détails à régler, mais il y a la modulation de fréquence. :lol

Code JB :
 
 
nomainwin
WindowWidth = 450:WindowHeight =300
UpperLeftX=Int((DisplayWidth-WindowWidth)/2)
UpperLeftY=Int((DisplayHeight-WindowHeight)/2)
   button #w,"A",[a], UL, 400, 30
   button #w,"B",[b], UL, 400, 60
   button #w,"C",[c], UL, 400, 90
   button #w,"D",[d], UL, 400, 120
   button #w,"E",[e], UL, 400, 150
   graphicbox #w.g,10, 10, 350, 250
open "test Fa" for window _nsb_nf as #w'Graphics_nsb_nf as #g
print #w, "trapclose [quit]"
   a=40
     print #w.g, "down;fill darkgreen"
     print #w.g, "flush"
     print #w.g, "getbmp bg 0, 0, 300, 200";
     print #w.g, "background bg";
   wait
 
 [a]
  print #w.g, "up"
  x=1:s=2:y=100:goto [go]
  wait
 [b]
  print #w.g, "up"
  x=1:s=3:y=100:goto [go]
  wait
 [c]
  print #w.g, "up"
   x=1:s=8:y=100:goto [go]
  wait
 [d]
 print #w.g, "up"
   x=1:s=11:y=100:goto [go]
  wait
 [e]
  print #w.g, "up"
   x=1:s=24:y=100:goto [go]
  wait
 [go]
    print #w.g, "redraw"
 
        print #w.g, "down"
           #w.g,"Color green; Size 1'; Place ";x;" ";y
            For x = 1 To 360  Step s
            y = Sin(x)*a+y
            #w.g,"Goto ";x;" ";y
            call pause 20
        Next x
 
wait
 
    sub pause temp
        timer temp, [temps]
        wait
        [temps]
        timer 0
    end sub
 
 [quit]
   close #w
   end
 
 



____________________
Roro

   
Le 29/05/2012 à 10h00

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
J'aurais une question, je la mets pas chez "débutant" car il y a Claude qui en a posté une, lui aussi, il aimerait maitriser le temps (temps fugit.....vive les montres molles de Dali )

Bien sûr que si il te faut la poser chez "débutant" ! c'est fait pour ça !

Ton soucis :

- print #w.g, "spritemovexy bird1 20 0" déplace bird1 de 20 pixel en X, et 0 pixel en Y lors du prochain "drawsprites" , puis
- print #w.g, "spritemovexy bird1 ";xx;" ";yy' 20 0" déplace bird1 de xx pixel en X, et yy pixel en Y lors du prochain "drawsprites".

puis,

- print #w.g, "spritexy? bird1 SqX SqY" ' tu prends les coordonnées actuelle de bird1
- if SqX >=300 then print #w.g, "spritexy bird1 0 50"; et tu lui dis d'aller en 0 50 si SqX >= 300 lors du prochain "drawsprites"


Il te faut donc continuer avec spritemovexy plutôt que spritexy en faisant simplemet évoluer yy.


-



Edité par cassiope01 Le 29/05/2012 à 10h00
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 29/05/2012 à 11h39

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
dernière version de l'Oscilloscope :
- visualisation de toutes les valeurs
- épaisseur du trait réglable
- mémoire et restitution de courbe.

Code VB :
'  from awesome Rod's code.
'  http://justbasic.conforums.com/index.cgi?board=code&action=display&num=1337870012

    nomainwin
    WindowWidth = 500
    WindowHeight = 620
 
    GLOBAL slidecolor$
 
    slidecolor$ = "0 150 0"
    currentMem = 0
    lastMem = 0
    maxMem = 10
    DIM mem$(maxMem), info$(10,10)
    hertzX =5
    hertzY =5
    volX   =100
    volY   =100
    phaseX =180
    phaseY =180
 
    ' if exist, restore the data file Curves.ini in mem$() array
    gosub [loadCurves]
    if lastMem>0 then
        hertzX =val(word$(mem$(lastMem),1))
        hertzY =val(word$(mem$(lastMem),2))
        volX   =val(word$(mem$(lastMem),3))
        volY   =val(word$(mem$(lastMem),4))
        phaseX =val(word$(mem$(lastMem),5))
        phaseY =val(word$(mem$(lastMem),6))
    end if
 
    drift=1
    midX=200
    midY=200
    rad=57.29577951
    sizeSet = 1
 
    graphicbox  #1.gb 45,20,400,400
    checkbox    #1.cb, "Drift", [set], [set], 240, 428, 80, 15
    statictext  #1.stx01 "X", 15, 480,10,15
    statictext  #1.stx02 "Y", 15, 510,10,15
 
    GROUPBOX    #1.sthz0, "Hertz", 32, 448, 130, 100
    statictext  #1.sthz1 "0";space$(18);"100", 45, 465, 102, 15
    statictext  #1.sthz2 str$(hertzX), 87, 465, 20, 15
    graphicbox  #1.gbhzx 45, 480, 102, 19
    graphicbox  #1.gbhzy 45, 510, 102, 19
    statictext  #1.sthz3 "0";space$(18);"100", 45, 528, 102, 15
    statictext  #1.sthz4 str$(hertzY), 87, 528, 20, 15
 
    GROUPBOX    #1.stph0, "Phase", 182, 448, 130, 100
    statictext  #1.stph1 "0";space$(18);"360", 195, 465, 102, 15
    statictext  #1.stph2 str$(phaseX), 234, 465, 20, 15
    graphicbox  #1.gbphx 195, 480, 102, 19
    graphicbox  #1.gbphy 195, 510, 102, 19
    statictext  #1.stph3 "0";space$(18);"360", 195, 528, 102, 15
    statictext  #1.stph4 str$(phaseY), 234, 528, 20, 15
 
    GROUPBOX    #1.stvo0, "Volume", 330, 448, 130, 100
    statictext  #1.stvo1 "0";space$(18);"100", 345, 465, 102, 15
    statictext  #1.stvo2 str$(volX), 384, 465, 20, 15
    graphicbox  #1.gbvox 345, 480, 102, 19
    graphicbox  #1.gbvoy 345, 510, 102, 19
    statictext  #1.stvo3 "0";space$(18);"100", 345, 528, 102, 15
    statictext  #1.stvo4 str$(volY), 384, 528, 20, 15
 
    BUTTON     #1.pts1, "<", [dwPts], UL, 38, 560 , 20, 20
    statictext #1.pts "Pt. Size "+str$(sizeSet), 70, 562, 70, 20
    BUTTON     #1.pts2, ">", [upPts], UL, 141, 560 , 20, 20
 
    BUTTON     #1.mem1, "<", [dwMem], UL, 328, 560 , 20, 20
    BUTTON     #1.mem "MEM+", [addMem], UL, 356, 560, 64, 20
    BUTTON     #1.mem2, ">", [upMem], UL, 428, 560 , 20, 20
 
    open "Lissajous" for window_nf as #1  'graphics_nsb
    #1 "trapclose [quit]"
    #1 "font arial 10"
    for w = 1 to 11
        sld$ = word$("#1.sthz0 #1.sthz1 #1.sthz2 #1.stph0 #1.stph1 #1.stph2 #1.stvo0 #1.stvo1 #1.stvo2 #1.stx01 #1.stx02",w)
        #sld$ "!font arial 10"
    next
    for w = 1 to 6
        sld$ = word$("#1.gbhzx #1.gbhzy #1.gbphx #1.gbphy #1.gbvox #1.gbvoy",w)
        #sld$ "down"
    next
    #1.cb "font arial 10"
    #1.cb "set"
 
    #1.gb "down ; fill 0 50 0"
    #1.gb "color 50 50 50"
    for x= 20 to 480 step 20
        #1.gb "line ";x;" 0 ";x;" 600"
    next
    for y= 20 to 480 step 20
        #1.gb "line 0 ";y;" 600 ";y
    next
    #1.gb "flush one"
    #1.gb "color 0 100 0"
 
    #1.gbhzx "when leftButtonMove [mousehzx]"
    #1.gbhzx "when leftButtonDown [mousehzx]"
    #1.gbhzx "when characterInput [keyhzx]"
    #1.gbhzy "when leftButtonMove [mousehzy]"
    #1.gbhzy "when leftButtonDown [mousehzy]"
    #1.gbhzy "when characterInput [keyhzy]"
    #1.gbphx "when leftButtonMove [mousephx]"
    #1.gbphx "when leftButtonDown [mousephx]"
    #1.gbphx "when characterInput [keyphx]"
    #1.gbphy "when leftButtonMove [mousephy]"
    #1.gbphy "when leftButtonDown [mousephy]"
    #1.gbphy "when characterInput [keyphy]"
    #1.gbvox "when leftButtonMove [mousevox]"
    #1.gbvox "when leftButtonDown [mousevox]"
    #1.gbvox "when characterInput [keyvox]"
    #1.gbvoy "when leftButtonMove [mousevoy]"
    #1.gbvoy "when leftButtonDown [mousevoy]"
    #1.gbvoy "when characterInput [keyvoy]"
 
    [displayCurve]
    #1.sthz2 slideB("#1.gbhzx",hertzX)
    #1.sthz4 slideB("#1.gbhzy",hertzY)
    #1.stph2 int(slideB("#1.gbphx",int(phaseX/3.6))*3.6)
    #1.stph4 int(slideB("#1.gbphy",int(phaseY/3.6))*3.6)
    #1.stvo2 slideB("#1.gbvox",volX)
    #1.stvo4 slideB("#1.gbvoy",volY)
    timer 20, [drawit]
    wait
 
    [dwPts]
        sizeSet = sizeSet-(sizeSet>1)
        #1.pts "Pt. Size "+str$(sizeSet)
    wait
 
    [upPts]
        sizeSet = sizeSet+(sizeSet<15)
        #1.pts "Pt. Size "+str$(sizeSet)
    wait
 
    [dwMem]
        currentMem = currentMem-1
        if currentMem<0 then currentMem = lastMem
        if currentMem=0 then #1.mem "MEM+" else #1.mem "MEM ";currentMem
        gosub [restoreCurve]
    wait
 
    [upMem]
        currentMem = currentMem+1
        if currentMem>lastMem then currentMem = 0
        if currentMem=0 then #1.mem "MEM+" else #1.mem "MEM ";currentMem
        gosub [restoreCurve]
    wait
 
    [restoreCurve]
        if currentMem>0 then
            hertzX=val(word$(mem$(currentMem),1))
            hertzY=val(word$(mem$(currentMem),2))
            volX  =val(word$(mem$(currentMem),3))
            volY  =val(word$(mem$(currentMem),4))
            phaseX=val(word$(mem$(currentMem),5))
            phaseY=val(word$(mem$(currentMem),6))
            goto [displayCurve]
        end if
    return
 
    [addMem]
        if lastMem<maxMem and currentMem = 0 then
            lastMem = lastMem+1
            currentMem = lastMem
            #1.mem "MEM ";currentMem
            mem$(currentMem) = hertzX;" ";hertzY;" ";volX;" ";volY;" ";phaseX;" ";phaseY
        end if
    wait
 
    [drawit]
    start=0
    scan
    #1.gb "flush; discard ; redraw one ; size ";sizeSet
    for n= 0 to 359
        x=midX-(1.8*volX*sin(phaseX/rad))
        y=midY-(1.8*volY*cos(phaseY/rad))
        if start=1 then
            #1.gb "line ";oldX;" ";oldY;" ";x;" ";y
        else
            start=1
            #1.gb "set ";x;" ";y
        end if
        oldX=x
        oldY=y
        phaseX=phaseX+hertzX
        if phaseX>359 then phaseX=phaseX-360-drift
        phaseY=phaseY+hertzY
        if phaseY>359 then phaseY=phaseY-360
    next
    wait
 
    [mousehzx]
    slide=1
    hertzX=MouseX
    if hertzX<0 then hertzX=0
    if hertzX>100 then hertzX=100
    goto [updatecontrol]
 
    [keyhzx]
    slide=1
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then hertzX=hertzX-(hertzX>0)
    if key=_VK_RIGHT then hertzX=hertzX+(hertzX<100)
    goto [updatecontrol]
 
    [mousehzy]
    slide=2
    hertzY=MouseX
    if hertzY<0 then hertzY=0
    if hertzY>100 then hertzY=100
    goto [updatecontrol]
 
    [keyhzy]
    slide=2
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then hertzY=hertzY-(hertzY>0)
    if key=_VK_RIGHT then hertzY=hertzY+(hertzY<100)
    goto [updatecontrol]
 
    [mousephx]
    slide=3
    phaseX=int(MouseX*3.6)
    if phaseX<0 then phaseX=0
    if phaseX>360 then phaseX=360
    goto [updatecontrol]
 
    [keyphx]
    slide=3
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then phaseX=phaseX-(phaseX>0)
    if key=_VK_RIGHT then phaseX=phaseX+(phaseX<360)
    goto [updatecontrol]
 
    [mousephy]
    slide=4
    phaseY=int(MouseX*3.6)
    if phaseY<0 then phaseY=0
    if phaseY>360 then phaseY=360
    goto [updatecontrol]
 
    [keyphy]
    slide=4
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then phaseY=phaseY-(phaseY>0)
    if key=_VK_RIGHT then phaseY=phaseY+(phaseY<360)
    goto [updatecontrol]
 
    [mousevox]
    slide=5
    volX=MouseX
    if volX<1 then volX=1
    if volX>100 then volX=100
    goto [updatecontrol]
 
    [keyvox]
    slide=5
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then volX=volX-(volX>0)
    if key=_VK_RIGHT then volX=volX+(volX<100)
    goto [updatecontrol]
 
    [mousevoy]
    slide=6
    volY=MouseX
    if volY<0 then volY=0
    if volY>100 then volY=100
    goto [updatecontrol]
 
    [keyvoy]
    slide=6
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then volY=volY-(volY>0)
    if key=_VK_RIGHT then volY=volY+(volY<100)
    goto [updatecontrol]
 
    [set]
        drift = drift+1-2*(drift=1)  ' 1 - 0 - 1 - 0 - 1 - 0 - etc...
    wait
 
    [updatecontrol]
    #1.mem "MEM+"
    currentMem = 0
    select case slide
        case 1
            #1.sthz2 slideB("#1.gbhzx",hertzX)
        case 2
            #1.sthz4 slideB("#1.gbhzy",hertzY)
        case 3
            #1.stph2 int(slideB("#1.gbphx",int(phaseX/3.6))*3.6)
        case 4
            #1.stph4 int(slideB("#1.gbphy",int(phaseY/3.6))*3.6)
        case 5
            #1.stvo2 slideB("#1.gbvox",volX)
        case 6
            #1.stvo4 slideB("#1.gbvoy",volY)
    end select
    wait
 
    [loadCurves]
        if fileExists(DefaultDir$,"Curves.ini") then
            lastMem = 0
            open "Curves.ini" for input as #curv
            WHILE EOF(#curv)=0
                lastMem = lastMem + 1    'Nb of lines on the file.
                LINE INPUT #curv, mem$(lastMem)
            WEND
            close #curv
        end if
    return
 
    [saveCurves]        ' record mem$(1) to mem$(maxMem) in a data file : Curves.ini
        if lastMem > 0 then
            open "Curves.ini" for output as #curv   'save JetLag frontiers -----------------
            for nc = 1 to lastMem
                if mem$(nc)<>"" then #curv, mem$(nc)
            next
            close #curv
        end if
    return
 
    function slideB(sld$,value)
        #sld$ "fill ";slidecolor$;" ;size 1"
        #sld$ "backcolor darkgray"
        #sld$ "line 0 8 120 8"
        #sld$ "place ";value-4;" 0 ; boxfilled  ";value+4;" 17"
        #sld$ "flush ; discard"
        slideB = value
    end function
 
    function fileExists(path$, filename$)
        'DIM info$(10,10) 'must have been declared at the start of the code.
        files path$, filename$, info$()  ' path$ = DefaultDir$ generally...
        fileExists = val(info$(0, 0))  '<> 0 if true
    end function
 
    [quit]
        timer 0
        gosub [saveCurves]
        close #1
    end
 




Edité par cassiope01 Le 29/05/2012 à 11h41
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 29/05/2012 à 12h06

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Whoaou !!! :top :top :top Super de Super !!! .....et merci pour les tuyaux. :)
J'ai passé les deux versions au "compare" de "Notepad++" .....The "little" is a new little named: "BIG Little" ;)



Edité par Roland Le 29/05/2012 à 12h57
____________________
Roro

   
Le 29/05/2012 à 14h44

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Merci Roland.

Je suis une truffe en trigo, mais je me rappelle que le Sinus Cardinal faisait un joli dessin de sombrero mexicain, surtout s'il est en 3D ;)
J'ai donc demandé à Rod s'il saurait faire ça avec ce petit simulateur ?

Je verrai bien !

@+



Edité par cassiope01 Le 29/05/2012 à 14h45
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 29/05/2012 à 16h22

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
J'avais commencé de triturer le prog, j'ai viré tous les sliders pour les remplacer par des textbox dans lesquels entrer et sortir les paramètres, et ne conservant que la partie calcul. et en essayant de comprendre pourquoi l'engin réagissait à retardement.
Autant te dire que l'arrivée de ta dernière version a mis un point d'arret à mes triturations.
Le nom de "générateur Lissajou" est mieux adapté à cette usine à (raffinage de) gaz, que celui d'oscillo, qui me laissait perplexe.
Tu a vraiment d'étonnantes capacités avec ce langage......ça laisse réveur..... :top
____________________
Roro

   
Le 29/05/2012 à 16h56

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Alors Cassiope...On recycle ! ...Que fait ce " save jetlag frontier" en commentaire de: open curves.ini. ! ;)
Hey, écoute ça: j'appui sur "mem+", et sans plus attendre j'ouvre le repertoire courant, comme un gros curieux..
..Et...RIEN !.. je referme la fenetre en m'apprétant à gueuler à l'arnaque. Et là surprise !...Je retrouve l'éditeur vide, la fenetre du prog vide, et qui essaye de revenir en vain toutes les dix secondes. :heink :|
Aprés avoir mis le prog dans un dossier à part, et lui avoir laissé le temps de confectionner le curves.ini..tout est rentré dans l'ordre...Ouf !...... Il faut que je régle mon avance à l'allumage. :)



Edité par Roland Le 29/05/2012 à 17h16
____________________
Roro

   
Le 29/05/2012 à 18h13

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Bien sûr que je recycle... et même et surtout des programmes qui ne sont pas de moi au départ, comme celui-ci !!!
Comme toi je réutilise souvent quelques valeurs sûres comme la sauvegarde ici !

Dernière mise à jour, avec suppression de la mémoire d'une courbe possible. (ce qui n'était pas si simple !! )

Code VB :
'  from awesome Rod's code.
'  http://justbasic.conforums.com/index.cgi?board=code&action=display&num=1337870012
'   and
'  http://justbasic.conforums.com/index.cgi?board=games&action=display&num=1338283740&start=0#1338283740

    nomainwin
    WindowWidth = 500
    WindowHeight = 620
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    'month$ = "Jan Fév Mar Avr Mai Jun Jui Aou Sep Oct Nov Déc"  ' french
    month$ = "January February March April May June July August September October November December"
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
    'day$ = word$("Mar Mer Jeu x Ven Sam x Dim Lun",int((j/7-int(j/7))*10)+1)  ' french
    day$ = word$("Tuesday Wednesday Thursday x Friday Saturday x Sunday Monday",int((j/7-int(j/7))*10)+1)
    date$ = day$+"  "+mid$(today$,4,2)+"  "+word$(month$, val(today$))+"  "+mid$(today$,7,4)+"   "+left$(time$(),5)
 
    GLOBAL slidecolor$
 
    slidecolor$ = "0 150 0"
    lastMem = 0
    maxMem = 10
    DIM mem$(maxMem), info$(10,10)
    hertzX =5
    hertzY =5
    volX   =100
    volY   =100
    phaseX =180
    phaseY =180
 
    ' if exist, restore the data file Curves.ini in mem$() array
    gosub [loadCurves]
    if lastMem>0 then
        hertzX =val(word$(mem$(lastMem),1))
        hertzY =val(word$(mem$(lastMem),2))
        volX   =val(word$(mem$(lastMem),3))
        volY   =val(word$(mem$(lastMem),4))
        phaseX =val(word$(mem$(lastMem),5))
        phaseY =val(word$(mem$(lastMem),6))
    end if
 
    currentMem = lastMem
    drift=1
    midX=200
    midY=200
    rad=57.29577951
    sizeSet = 1
 
    graphicbox  #1.gb 45,20,400,400
    checkbox    #1.cb, "Drift", [set], [set], 240, 428, 80, 15
    statictext  #1.stx01 "X", 15, 480,10,15
    statictext  #1.stx02 "Y", 15, 510,10,15
 
    GROUPBOX    #1.sthz0, "Hertz", 32, 448, 130, 100
    statictext  #1.sthz1 "0";space$(18);"100", 45, 465, 102, 15
    statictext  #1.sthz2 str$(hertzX), 87, 465, 20, 15
    graphicbox  #1.gbhzx 45, 480, 102, 19
    graphicbox  #1.gbhzy 45, 510, 102, 19
    statictext  #1.sthz3 "0";space$(18);"100", 45, 530, 102, 15
    statictext  #1.sthz4 str$(hertzY), 87, 530, 20, 15
 
    GROUPBOX    #1.stph0, "Phase", 182, 448, 130, 100
    statictext  #1.stph1 "0";space$(18);"360", 195, 465, 102, 15
    statictext  #1.stph2 str$(phaseX), 234, 465, 20, 15
    graphicbox  #1.gbphx 195, 480, 102, 19
    graphicbox  #1.gbphy 195, 510, 102, 19
    statictext  #1.stph3 "0";space$(18);"360", 195, 530, 102, 15
    statictext  #1.stph4 str$(phaseY), 234, 530, 20, 15
 
    GROUPBOX    #1.stvo0, "Volume", 330, 448, 130, 100
    statictext  #1.stvo1 "0";space$(18);"100", 345, 465, 102, 15
    statictext  #1.stvo2 str$(volX), 384, 465, 20, 15
    graphicbox  #1.gbvox 345, 480, 102, 19
    graphicbox  #1.gbvoy 345, 510, 102, 19
    statictext  #1.stvo3 "0";space$(18);"100", 345, 530, 102, 15
    statictext  #1.stvo4 str$(volY), 384, 530, 20, 15
 
    BUTTON     #1.pts1, "<", [dwPts], UL, 38, 560 , 20, 20
    statictext #1.pts "Pt. Size "+str$(sizeSet), 70, 562, 70, 20
    BUTTON     #1.pts2, ">", [upPts], UL, 141, 560 , 20, 20
 
    BUTTON     #1.mem1, "<", [dwMem], UL, 328, 560 , 20, 20
    BUTTON     #1.mem "MEM ";currentMem, [addMem], UL, 356, 560, 64, 20
    BUTTON     #1.mem2, ">", [upMem], UL, 428, 560 , 20, 20
    BUTTON     #1.mem0, "-", [delMem], UL, 466, 560 , 20, 20
 
    open "Lissajous"+space$(20)+date$ for window_nf as #1  'graphics_nsb
    #1 "trapclose [quit]"
    #1 "font arial 10"
    for w = 1 to 11
        sld$ = word$("#1.sthz0 #1.sthz1 #1.sthz2 #1.stph0 #1.stph1 #1.stph2 #1.stvo0 #1.stvo1 #1.stvo2 #1.stx01 #1.stx02",w)
        #sld$ "!font arial 10"
    next
    for w = 1 to 6
        sld$ = word$("#1.gbhzx #1.gbhzy #1.gbphx #1.gbphy #1.gbvox #1.gbvoy",w)
        #sld$ "down"
    next
    #1.cb "font arial 10"
    #1.cb "set"
 
    #1.gb "down ; fill 0 50 0"
    #1.gb "color 50 50 50"
    for x= 20 to 480 step 20
        #1.gb "line ";x;" 0 ";x;" 600"
    next
    for y= 20 to 480 step 20
        #1.gb "line 0 ";y;" 600 ";y
    next
    #1.gb "flush one"
    #1.gb "color 0 100 0"
 
    #1.gbhzx "when leftButtonMove [mousehzx]"
    #1.gbhzx "when leftButtonDown [mousehzx]"
    #1.gbhzx "when characterInput [keyhzx]"
    #1.gbhzy "when leftButtonMove [mousehzy]"
    #1.gbhzy "when leftButtonDown [mousehzy]"
    #1.gbhzy "when characterInput [keyhzy]"
    #1.gbphx "when leftButtonMove [mousephx]"
    #1.gbphx "when leftButtonDown [mousephx]"
    #1.gbphx "when characterInput [keyphx]"
    #1.gbphy "when leftButtonMove [mousephy]"
    #1.gbphy "when leftButtonDown [mousephy]"
    #1.gbphy "when characterInput [keyphy]"
    #1.gbvox "when leftButtonMove [mousevox]"
    #1.gbvox "when leftButtonDown [mousevox]"
    #1.gbvox "when characterInput [keyvox]"
    #1.gbvoy "when leftButtonMove [mousevoy]"
    #1.gbvoy "when leftButtonDown [mousevoy]"
    #1.gbvoy "when characterInput [keyvoy]"
 
    [displayCurve]
    #1.sthz2 slideB("#1.gbhzx",hertzX)
    #1.sthz4 slideB("#1.gbhzy",hertzY)
    #1.stph2 int(slideB("#1.gbphx",int(phaseX/3.6))*3.6)
    #1.stph4 int(slideB("#1.gbphy",int(phaseY/3.6))*3.6)
    #1.stvo2 slideB("#1.gbvox",volX)
    #1.stvo4 slideB("#1.gbvoy",volY)
 
    timer 30, [drawit]
    wait
 
    [delMem]
        if currentMem>0 then
            confirm "Are you sure"+chr$(13)+"you want to delete the memory "+str$(currentMem); answer$
            if answer$ = "yes" then
                mem$(currentMem) = "" :lstmem = 0
                for nc = 1 to lastMem
                    if mem$(nc)<>"" then lstmem = lstmem+1 :temp$(lstmem)=mem$(nc)
                next
                redim mem$(maxMem)
                for nc = 1 to lstmem :mem$(nc)=temp$(nc) :next
                lastMem = lstmem
                currentMem = lastMem
                if currentMem=0 then #1.mem "MEM+" else #1.mem "MEM ";currentMem
                gosub [restoreCurve]
            end if
        end if
    wait
 
    [dwPts]
        sizeSet = sizeSet-(sizeSet>1)
        #1.pts "Pt. Size "+str$(sizeSet)
    wait
 
    [upPts]
        sizeSet = sizeSet+(sizeSet<15)
        #1.pts "Pt. Size "+str$(sizeSet)
    wait
 
    [dwMem]
        currentMem = currentMem-1
        if currentMem<0 then currentMem = lastMem
        if currentMem=0 then #1.mem "MEM+" else #1.mem "MEM ";currentMem
        gosub [restoreCurve]
    wait
 
    [upMem]
        currentMem = currentMem+1
        if currentMem>lastMem then currentMem = 0
        if currentMem=0 then #1.mem "MEM+" else #1.mem "MEM ";currentMem
        gosub [restoreCurve]
    wait
 
    [restoreCurve]
        if currentMem>0 then
            hertzX=val(word$(mem$(currentMem),1))
            hertzY=val(word$(mem$(currentMem),2))
            volX  =val(word$(mem$(currentMem),3))
            volY  =val(word$(mem$(currentMem),4))
            phaseX=val(word$(mem$(currentMem),5))
            phaseY=val(word$(mem$(currentMem),6))
            goto [displayCurve]
        end if
    return
 
    [addMem]
        if lastMem<maxMem and currentMem = 0 then
            lastMem = lastMem+1
            currentMem = lastMem
            #1.mem "MEM ";currentMem
            mem$(currentMem) = hertzX;" ";hertzY;" ";volX;" ";volY;" ";phaseX;" ";phaseY
        end if
    wait
 
    [drawit]
    start=0
    scan
    #1.gb "flush; discard ; redraw one ; size ";sizeSet
    for n= 0 to 359
        x=midX-(1.8*volX*sin(phaseX/rad))
        y=midY-(1.8*volY*cos(phaseY/rad))
        if start=1 then
            #1.gb "line ";oldX;" ";oldY;" ";x;" ";y
        else
            start=1
            #1.gb "set ";x;" ";y
        end if
        oldX=x
        oldY=y
        phaseX=phaseX+hertzX
        if phaseX>359 then phaseX=phaseX-360-drift
        phaseY=phaseY+hertzY
        if phaseY>359 then phaseY=phaseY-360
    next
    wait
 
    [mousehzx]
    slide=1
    hertzX=MouseX
    if hertzX<0 then hertzX=0
    if hertzX>100 then hertzX=100
    goto [updatecontrol]
 
    [keyhzx]
    slide=1
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then hertzX=hertzX-(hertzX>0)
    if key=_VK_RIGHT then hertzX=hertzX+(hertzX<100)
    goto [updatecontrol]
 
    [mousehzy]
    slide=2
    hertzY=MouseX
    if hertzY<0 then hertzY=0
    if hertzY>100 then hertzY=100
    goto [updatecontrol]
 
    [keyhzy]
    slide=2
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then hertzY=hertzY-(hertzY>0)
    if key=_VK_RIGHT then hertzY=hertzY+(hertzY<100)
    goto [updatecontrol]
 
    [mousephx]
    slide=3
    phaseX=int(MouseX*3.6)
    if phaseX<0 then phaseX=0
    if phaseX>360 then phaseX=360
    goto [updatecontrol]
 
    [keyphx]
    slide=3
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then phaseX=phaseX-(phaseX>0)
    if key=_VK_RIGHT then phaseX=phaseX+(phaseX<360)
    goto [updatecontrol]
 
    [mousephy]
    slide=4
    phaseY=int(MouseX*3.6)
    if phaseY<0 then phaseY=0
    if phaseY>360 then phaseY=360
    goto [updatecontrol]
 
    [keyphy]
    slide=4
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then phaseY=phaseY-(phaseY>0)
    if key=_VK_RIGHT then phaseY=phaseY+(phaseY<360)
    goto [updatecontrol]
 
    [mousevox]
    slide=5
    volX=MouseX
    if volX<1 then volX=1
    if volX>100 then volX=100
    goto [updatecontrol]
 
    [keyvox]
    slide=5
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then volX=volX-(volX>0)
    if key=_VK_RIGHT then volX=volX+(volX<100)
    goto [updatecontrol]
 
    [mousevoy]
    slide=6
    volY=MouseX
    if volY<0 then volY=0
    if volY>100 then volY=100
    goto [updatecontrol]
 
    [keyvoy]
    slide=6
    key=asc(right$(Inkey$,1))
    if key=_VK_LEFT then volY=volY-(volY>0)
    if key=_VK_RIGHT then volY=volY+(volY<100)
    goto [updatecontrol]
 
    [set]
        drift = drift+1-2*(drift=1)  ' 1 - 0 - 1 - 0 - 1 - 0 - etc...
    wait
 
    [updatecontrol]
    #1.mem "MEM+"
    currentMem = 0
    select case slide
        case 1
            #1.sthz2 slideB("#1.gbhzx",hertzX)
        case 2
            #1.sthz4 slideB("#1.gbhzy",hertzY)
        case 3
            #1.stph2 int(slideB("#1.gbphx",int(phaseX/3.6))*3.6)
        case 4
            #1.stph4 int(slideB("#1.gbphy",int(phaseY/3.6))*3.6)
        case 5
            #1.stvo2 slideB("#1.gbvox",volX)
        case 6
            #1.stvo4 slideB("#1.gbvoy",volY)
    end select
    wait
 
    [loadCurves]
        if fileExists(DefaultDir$,"Curves.ini") then
            lastMem = 0
            open "Curves.ini" for input as #curv
            WHILE EOF(#curv)=0
                lastMem = lastMem + 1    'Nb of lines on the file.
                LINE INPUT #curv, mem$(lastMem)
            WEND
            close #curv
        end if
    return
 
    [saveCurves]        ' record mem$(1) to mem$(maxMem) in a data file : Curves.ini
        if lastMem > 0 then
            open "Curves.ini" for output as #curv
            for nc = 1 to lastMem
                if mem$(nc)<>"" then #curv, mem$(nc)
            next
            close #curv
        end if
    return
 
    function slideB(sld$,value)
        #sld$ "fill ";slidecolor$;" ;size 1"
        #sld$ "backcolor darkgray"
        #sld$ "line 0 8 120 8"
        #sld$ "place ";value-4;" 0 ; boxfilled  ";value+4;" 17"
        #sld$ "flush ; discard"
        slideB = value
    end function
 
    function fileExists(path$, filename$)
        'DIM info$(10,10) 'must have been declared at the start of the code.
        files path$, filename$, info$()  ' path$ = DefaultDir$ generally...
        fileExists = val(info$(0, 0))  '<> 0 if true
    end function
 
    [quit]
        timer 0
        gosub [saveCurves]
        close #1
    end
 


+ quelques jolis dessins ;)
Code TEXT :
5 15 100 100 33 180
30 30 100 100 119 180
5 5 100 100 260 180
95 72 42 81 18 180
95 72 42 81 173 108

à mettre dans le fichier Curves.ini



Edité par cassiope01 Le 30/05/2012 à 07h39
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Général » Oscilloscope... (simulateur) Voilà toute la puissance et la simplicité de JB ;)  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie