Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1448 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Faire tourner trois boucle for next en même temps ...?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire tourner trois boucle for next en même temps ...?

n°1515795
nokthib
Etudiant en Allemagne !
Posté le 16-02-2007 à 21:28:46  profilanswer
 

Bonjour,
 
le titre ets je pense assez explicite, mais je vais développer.
 
Il faudrais que je puisse en basic faire 3 BFN (boucle for next) en même temps, avec le nombre d'état défférents [YY]  (FOR X=1 TO YY) pour les 3, et ce qu'il y a dedans de totalement différent également... et que ca change pas sur la précision du signal envoyé en sortie :)
 
Merci beaucoup par avance.
Thibault


---------------
Du bist das Mädchen, dass zu mir gehört !
mood
Publicité
Posté le 16-02-2007 à 21:28:46  profilanswer
 

n°1515798
jagstang
Pa Capona ಠ_ಠ
Posté le 16-02-2007 à 21:33:34  profilanswer
 

imbrique les
je vois pas le rapport avec une quelconque "précision", et surtout de quel "signal" tu parles


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1515802
nokthib
Etudiant en Allemagne !
Posté le 16-02-2007 à 21:41:37  profilanswer
 

je vais vous expliquer...
 
Je doisi faire tourner 3 moteur spa sà pas via un ordinateur, pour le moment, le code est fonctionnel tel quel mais un par un.
 

Code :
  1. FOR R=1 TO PAS
  2.              TIMER PAUSE,[OUT3]
  3.              WAIT
  4.              [OUT3]
  5.              OUT(888),HIGH
  6.              GOSUB[ACTB]
  7.              TIMER 0
  8.              TIMER PAUSE,[OUT4]
  9.              WAIT
  10.              [OUT4]
  11.              OUT(888),SEND
  12.              GOSUB[ACTB]
  13.              TIMER 0
  14.              GOSUB[INC]
  15.              IF C = ARRET then
  16.              PRINT "La seringue contenant du ";COULEUR$;" est arrivée en fin de course ==> ARRET forcé"
  17.              GOSUB [CLEARALL]
  18.              END
  19.              END IF
  20.              NEXT R
  21.              GOSUB [CLEARALL]


 
je voudrais pouvoir programmer les 3 moteurs, et que tout se fasse.
 
je prend un exemple.
 
MOTEUR 1:
150Hz (1/T = 6.66ms)
500 pas (500impulsions FOR R=1 TO 500)
et des autres params peut importants
 
MOTEUR 2:
100Hz
45 pas (45impulsions FOR R=1 TO 500)
et des autres params peut importants
 
MOTEUR 3:
23Hz
98 pas (98impulsions FOR R=1 TO 500)
et des autres params peut importants
 
je voudrais crée de la 3 BFN afin de faire tourner les 3 moteur en même temps, sachant que si je let met "en série" (ce qui se passe actuellement) il faut attendre que le moteur 1 aie fini pour que le 2eme se mette en route etc....
 
Merci

n°1515815
jagstang
Pa Capona ಠ_ಠ
Posté le 16-02-2007 à 21:59:25  profilanswer
 

VB est-il vraiment le language qu'il te faut ?
c'est pour une simulation je pense. je sais pas si tu peux faire des thread en java. pour l'automatisme de puissance il y a des modules spécialisés sinon


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1515823
nokthib
Etudiant en Allemagne !
Posté le 16-02-2007 à 22:44:48  profilanswer
 

non, je dosi faire en basic, et ce n'est pas de la simulation, enfin je pense pas que ca s'appelle comme ça. MErci

n°1515828
jpcheck
Pioupiou
Posté le 16-02-2007 à 23:01:55  profilanswer
 

je ne sais pas ce qu'on peut faire en basic,, mais en VISUAL basic, tu peux chercher à faire un test sur la clock de ta machine... Mais des milli secondes, c'est chaud cacao...

n°1515830
nokthib
Etudiant en Allemagne !
Posté le 16-02-2007 à 23:06:23  profilanswer
 

ca je sais faire, mais le problème ne se trouve pas là...

n°1515841
-ThX-
Not here anymore
Posté le 17-02-2007 à 00:23:56  profilanswer
 

c'est du code QBasic que tu dois produire ?

n°1515869
lkolrn
<comment ça marche?>
Posté le 17-02-2007 à 02:11:07  profilanswer
 

3 threads en parallèle ? Sinon "simuler" un mode parallèle en répartissant au mieux tes 3 codes dans une unique boucle ? (pour faire genre c'est en parallèle, ou presque :sweat:)
 
Edit
Idée très très conne hein, c'était presque une blague... Faut du multithread et pis ché toute


Message édité par lkolrn le 17-02-2007 à 02:15:52
n°1515871
-ThX-
Not here anymore
Posté le 17-02-2007 à 02:25:20  profilanswer
 

A la tete du code posté, c'est pas du Vb, encore moins du Vb.net
 
AMHA c'est du QBasic. Tu vas en chier :spamafote:

mood
Publicité
Posté le 17-02-2007 à 02:25:20  profilanswer
 

n°1515895
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:01:55  profilanswer
 

THX, oui du basic
 
LKoLRn, c'est ce qu'on m'a conseillé (si je dois absolument faire ca en gardant le basic), car apparament le multi tasking n'est pas possible en Basic... mais ca ne sera jamais une fréquence juste, j'en parlerais avec mon prof.
 
qu'est-ce que le multithread ? Merci
 

n°1515897
-ThX-
Not here anymore
Posté le 17-02-2007 à 10:07:01  profilanswer
 

Le multithread, en gros, consiste a créer des "sous-taches" qu'on appellera des threads ( justement ), et qui peuvent tourner en pseudo-simultanéité sur une machine. Pour simplifier, tu crées par exemple deux fonctions:
 
Fonction A:  
   Faire
     Action_A_1;
     Action_A_2;
     Action_A_3;
   Fin Faire
 
Fonction B:  
   Faire
     Action_B_1;
     Action_B_2;
     Action_B_3;
   Fin Faire
 
CréerThread ( avec Fonction A );
CréerThread ( avec Fonction B );
 
Et l'exécution produira un truc du style:
 
Action_A_1
Action_B_1
Action_B_2
Action_A_2
... etc
 
edit : tu noteras qu'a l'exécution, on ne peut pas garantir un partage "équitable" du temps d'exécution, à part sur un système temps-réel ( qnx et consorts ), mais c'est off-topic


Message édité par -ThX- le 17-02-2007 à 10:08:35
n°1515899
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:10:39  profilanswer
 

Ah okay ... Peux tu me donner une ébauche de code, malheureusement, je ne vois pas d'aide dans le programme liberty basic concernant le multi thread. Merci

n°1515900
-ThX-
Not here anymore
Posté le 17-02-2007 à 10:13:50  profilanswer
 

Désolé, mais dans l'implémentation du basic "basique :D", je pense que ce n'est pas prévu. En visual basic tu utiliserais les "Timers", en quelque sorte des threads encapsulés.  
 
Pour ton problème, il faut réussir à factoriser ton code dans une seule et unique boucle.

n°1515901
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:14:41  profilanswer
 

bah zut, je ferais ca alors ;) tampis pour la précision :)

n°1515903
-ThX-
Not here anymore
Posté le 17-02-2007 à 10:18:44  profilanswer
 

Code :
  1. REM ---- Feinte de faux threads en basic ( lol )
  2. DIM I AS INTEGER
  3. I=0
  4. DO
  5.    IF I = 0 THEN CALL FUNC1
  6.    IF I = 1 THEN CALL FUNC2
  7.    IF I = 2 THEN CALL FUNC3
  8.    I = I + 1
  9.    IF I = 3 THEN I = 0
  10. LOOP
  11. SUB FUNC1()
  12.    REM --- gestion moteur PaP 1
  13. END SUB
  14. SUB FUNC2()
  15.    REM --- gestion moteur PaP 2
  16. END SUB
  17. SUB FUNC3()
  18.    REM --- gestion moteur PaP 3
  19. END SUB


 

n°1515908
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:29:01  profilanswer
 

j'avais pensé plutot (une ébauche ca marchera srmt pas)
 

Code :
  1. FOR R=1TO_LENOMBREDEPASLEPLUSGRAND_
  2. IF R < NBPASMOTEUR1 THEN
  3. GOSUB[PASAPAS1]
  4. END IF
  5. IF R < NBPASMOTEUR2 THEN
  6. GOSUB[PASAPAS2]
  7. END IF
  8. IF R < NBPASMOTEUR3 THEN
  9. GOSUB[PASAPAS3]
  10. END IF
  11. END


 
et je m'arrange pour que NBPASMOTEURx soit égal au nombre de pas entré + 1 (car on prends la valeur -1 car < )
 
Qu'en pense tu ?
 
Maintenant, j'aimerais faire ca aussi, mais je sais pas comemnt faire

Code :
  1. FOR R < NBPASMOTEUR1 AND C <> ARRETMOT1 THEN
  2. GOSUB[PASAPAS1]
  3. ENF IF


 
donc deux conditions dans le if, c'est possible ?


Message édité par nokthib le 17-02-2007 à 10:31:36
n°1515909
-ThX-
Not here anymore
Posté le 17-02-2007 à 10:32:30  profilanswer
 

Si NBPASMOTEUR1 > NBPASMOTEUR2, tu boucles pour rien :(

n°1515910
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:33:49  profilanswer
 

apparament ca marche !!
 

Code :
  1. R1=6
  2. ARRET1=0
  3. FOR R=1 to 10
  4. IF R<R1 and C <> ARRET1 THEN
  5. PRINT R
  6. END IF
  7. NEXT R


si je met ARRET 1 à 0, bah ca arrete met rien, si je met à nimporte quoi, ca va jusque 5... Nickel koi

n°1515913
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:35:00  profilanswer
 

-ThX- a écrit :

Si NBPASMOTEUR1 > NBPASMOTEUR2, tu boucles pour rien :(


 
ouais, mais si NBPASMOTEUR1 vaut 5, et que NBPASLEPLUSGRAND (lol) vaut 40... si on est passé 5, ca fera plus rien niveau du moteur1...

n°1515914
-ThX-
Not here anymore
Posté le 17-02-2007 à 10:37:24  profilanswer
 

Pour les IF avec plusieurs conditions, entoure les conditions avec des parentheses:
 
IF ( VARIABLE1 <> VALEUR1 ) AND ( VARIABLE2 = "CHOU FLEUR" )

n°1515915
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:39:38  profilanswer
 

ah ouais nickel, regarde
 

Code :
  1. R1=98
  2. R2=47
  3. ARRET1=5
  4. ARRET2=9
  5. C=4
  6. FOR R=1 to 158
  7. IF (R<R1) and (C <> ARRET1) THEN
  8. PRINT "Premier moteur ";R
  9. END IF
  10. IF (R<R2) and (C <> ARRET2) THEN
  11. PRINT "Deuxième moteur ";R
  12. END IF
  13. PRINT
  14. NEXT R


 
donne ceci à l'écran:

Citation :

Premier moteur 1
Deuxième moteur 1
 
Premier moteur 2
Deuxième moteur 2
 
Premier moteur 3
Deuxième moteur 3
 
Premier moteur 4
Deuxième moteur 4
 
Premier moteur 5
Deuxième moteur 5
 
Premier moteur 6
Deuxième moteur 6
 
Premier moteur 7
Deuxième moteur 7
 
Premier moteur 8
Deuxième moteur 8
 
Premier moteur 9
Deuxième moteur 9
 
Premier moteur 10
Deuxième moteur 10
 
Premier moteur 11
Deuxième moteur 11
 
Premier moteur 12
Deuxième moteur 12
 
Premier moteur 13
Deuxième moteur 13
 
Premier moteur 14
Deuxième moteur 14
 
Premier moteur 15
Deuxième moteur 15
 
Premier moteur 16
Deuxième moteur 16
 
Premier moteur 17
Deuxième moteur 17
 
Premier moteur 18
Deuxième moteur 18
 
Premier moteur 19
Deuxième moteur 19
 
Premier moteur 20
Deuxième moteur 20
 
Premier moteur 21
Deuxième moteur 21
 
Premier moteur 22
Deuxième moteur 22
 
Premier moteur 23
Deuxième moteur 23
 
Premier moteur 24
Deuxième moteur 24
 
Premier moteur 25
Deuxième moteur 25
 
Premier moteur 26
Deuxième moteur 26
 
Premier moteur 27
Deuxième moteur 27
 
Premier moteur 28
Deuxième moteur 28
 
Premier moteur 29
Deuxième moteur 29
 
Premier moteur 30
Deuxième moteur 30
 
Premier moteur 31
Deuxième moteur 31
 
Premier moteur 32
Deuxième moteur 32
 
Premier moteur 33
Deuxième moteur 33
 
Premier moteur 34
Deuxième moteur 34
 
Premier moteur 35
Deuxième moteur 35
 
Premier moteur 36
Deuxième moteur 36
 
Premier moteur 37
Deuxième moteur 37
 
Premier moteur 38
Deuxième moteur 38
 
Premier moteur 39
Deuxième moteur 39
 
Premier moteur 40
Deuxième moteur 40
 
Premier moteur 41
Deuxième moteur 41
 
Premier moteur 42
Deuxième moteur 42
 
Premier moteur 43
Deuxième moteur 43
 
Premier moteur 44
Deuxième moteur 44
 
Premier moteur 45
Deuxième moteur 45
 
Premier moteur 46
Deuxième moteur 46
 
Premier moteur 47
 
Premier moteur 48
 
Premier moteur 49
 
Premier moteur 50
 
Premier moteur 51
 
Premier moteur 52
 
Premier moteur 53
 
Premier moteur 54
 
Premier moteur 55
 
Premier moteur 56
 
Premier moteur 57
 
Premier moteur 58
 
Premier moteur 59
 
Premier moteur 60
 
Premier moteur 61
 
Premier moteur 62
 
Premier moteur 63
 
Premier moteur 64
 
Premier moteur 65
 
Premier moteur 66
 
Premier moteur 67
 
Premier moteur 68
 
Premier moteur 69
 
Premier moteur 70
 
Premier moteur 71
 
Premier moteur 72
 
Premier moteur 73
 
Premier moteur 74
 
Premier moteur 75
 
Premier moteur 76
 
Premier moteur 77
 
Premier moteur 78
 
Premier moteur 79
 
Premier moteur 80
 
Premier moteur 81
 
Premier moteur 82
 
Premier moteur 83
 
Premier moteur 84
 
Premier moteur 85
 
Premier moteur 86
 
Premier moteur 87
 
Premier moteur 88
 
Premier moteur 89
 
Premier moteur 90
 
Premier moteur 91
 
Premier moteur 92
 
Premier moteur 93
 
Premier moteur 94
 
Premier moteur 95
 
Premier moteur 96
 
Premier moteur 97


 
Merci BCP !


Message édité par nokthib le 17-02-2007 à 10:40:25
n°1515917
-ThX-
Not here anymore
Posté le 17-02-2007 à 10:40:54  profilanswer
 

Tu diras juste a ton prof que le Basic c'est deprecated

n°1515918
nokthib
Etudiant en Allemagne !
Posté le 17-02-2007 à 10:42:31  profilanswer
 

oui ca je le sais, mais il adore ça (ou sais faire que ca ?), alors bon... puis il ne m'a appris que ca, j'ai pas le temps d'apprendre un nv language.

n°1516054
lkolrn
&lt;comment ça marche?&gt;
Posté le 17-02-2007 à 22:27:10  profilanswer
 

La preuve qu'une idée très très conne peut avoir du bon... Ca fait plaisir[:aras qui rit]

n°1516112
nokthib
Etudiant en Allemagne !
Posté le 18-02-2007 à 11:49:12  profilanswer
 

J'avais deux heure à tuer, j'ai refait le programme avec cette optique, je vous épargne le développement de l'entré au clavier des données
 

Code :
  1. [ROUTINE_ENVOIE]
  2.              'GOSUB[INC]
  3.              C=456
  4.              FOR I=1 TO PASTOTAL
  5.              'BLEU'
  6.              IF I < PAS(1) AND C <> ARRET(0) THEN
  7.              PAUSE=INT((1/FREQ(0))*500)
  8.              TOTALhigh=TOTALbl+CLKSEND(0)
  9.              TOTALlow=TOTALbl
  10.              EN=2
  11.              COUL$="BLEU"
  12.              GOSUB[OUT]
  13.              END IF
  14.              'ROUGE'
  15.              IF I < PAS(2) AND C <> ARRET(1) THEN
  16.              PAUSE=INT((1/FREQ(1))*500)
  17.              TOTALhigh=TOTALro+CLKSEND(1)
  18.              TOTALlow=TOTALro
  19.              EN=2
  20.              COUL$="ROUGE"
  21.              GOSUB[OUT]
  22.              END IF
  23.              'VERT'
  24.              IF I < PAS(4) AND C <> ARRET(2) THEN
  25.              PAUSE=INT((1/FREQ(2))*500)
  26.              TOTALhigh=TOTALve+CLKSEND(2)
  27.              TOTALlow=TOTALve
  28.              EN=1
  29.              COUL$="VERT"
  30.              GOSUB[OUT]
  31.              END IF
  32.              NEXT I
  33.              GOSUB[CLEARALL]
  34.              RETURN
  35.              [OUT]
  36.              TIMER PAUSE,[OUT1]
  37.              WAIT
  38.              [OUT1]
  39.              OUT(888),TOTALhigh
  40.              OUT(890),EN
  41.              OUT(890),3
  42.              PRINT COUL$
  43.              TIMER 0
  44.              TIMER PAUSE, [OUT2]
  45.              WAIT
  46.              [OUT2]
  47.              OUT(888),TOTALlow
  48.              OUT(890),EN
  49.              OUT(890),3
  50.              TIMER 0
  51.              RETURN


 
aller, pour ceux que ca interesse, voici mon code:
 
Si éventuellement vous savez me faire part de modifications ... je suis prenneur ;)  
 
==> SURTOUT L 139 et 144
MERCI
 

Code :
  1. [HOME]
  2. GOSUB [CLEARALL]
  3. PRINT "                                COMMANDE DE MOTEURS PAS A PAS"
  4. PRINT "                                        VIA LE PORT //"
  5. PRINT "                             TFE 2006-2007 6TE "
  6. PRINT
  7. PRINT "BLEU [1] | ROUGE [2] | VERT [4] | ADDITION POSSIBLE "
  8. INPUT "Quelle(s) seringue(s) voulez vous utiliser ? ";NB
  9. IF NB > 7 then
  10. CLS
  11. PRINT "Veuillez entrer un nombre entre 1 et 7"
  12. PRINT
  13. GOTO [HOME]
  14. END IF
  15. IF NB < 1 then
  16. CLS
  17. PRINT "Veuillez entrer un nombre entre 1 et 7"
  18. PRINT
  19. GOTO [HOME]
  20. END IF
  21. COMPTEUR = 2
  22. [DEBUT_ROUTINE]
  23. IF COMPTEUR = -1 THEN GOTO [AFF]
  24. MINUS = 2^COMPTEUR
  25. IF NB > MINUS THEN 'ICI on enregistre le report après la soustraction'
  26. PRINT">"
  27. PRINT "=============> NOMBRE DE DEPART = ";NB
  28. PRINT "A soustraire : ";MINUS
  29. FORCOULEUR(MINUS)=MINUS
  30. PRINT "NB=";NB;"-";MINUS;
  31. NB=NB-MINUS
  32. PRINT "=";NB
  33. REPORT(COMPTEUR)=MINUS
  34. PRINT "Valeur enregistrée = ";REPORT(COMPTEUR)
  35. COMPTEUR=COMPTEUR-1
  36. PRINT "==> NV VALEUR COMPTEUR = ";COMPTEUR
  37. PRINT
  38. ENABLE(MINUS)=1                                    'ACTIVER LA SERINGUE QUI PORTE LE N° DE LA VALEUR A SOUSTRAIRE"
  39. IF NB <> 0 THEN GOTO [DEBUT_ROUTINE]
  40. END IF
  41. IF NB < MINUS THEN
  42. PRINT"<"
  43. PRINT "=============> NOMBRE DE DEPART = ";NB
  44. PRINT "IL N'Y A RIEN A SOUSTRAIRE"
  45. COMPTEUR=COMPTEUR-1
  46. PRINT "==> NV VALEUR COMPTEUR = ";COMPTEUR
  47. PRINT
  48. IF NB <> 0 THEN GOTO [DEBUT_ROUTINE]
  49. END IF
  50. IF NB = MINUS THEN 'ICI on enregistre le report avant la soustraction'
  51. PRINT"="
  52. PRINT "=============> NOMBRE DE DEPART = ";NB
  53. PRINT "A soustraire : ";MINUS
  54. PRINT "NB=";NB;"-";MINUS;
  55. REPORT(COMPTEUR)=MINUS
  56. FORCOULEUR(MINUS)=MINUS
  57. NB=NB-MINUS
  58. PRINT "=";NB
  59. PRINT "COMPTEUR= ";COMPTEUR
  60. PRINT "MINUS= ";MINUS
  61. PRINT "Valeur enregistrée = ";REPORT(COMPTEUR)
  62. COMPTEUR=COMPTEUR-1
  63. PRINT "==> NV VALEUR COMPTEUR = ";COMPTEUR
  64. PRINT
  65. ENABLE(MINUS)=1
  66. IF NB <> 0 THEN GOTO [DEBUT_ROUTINE]
  67. END IF
  68. [AFF]
  69. PRINT
  70. PRINT "Voici les valeures retenues lors de la décomposition"
  71. FOR R =0 TO 2
  72. PRINT "ENABLE(";R;" ) ==> La valeur n°";R;" : ";REPORT(R)
  73. NEXT R
  74. 'ENABLE(0) = BLEU
  75. 'ENABLE(1) = Rouge
  76. 'ENABLE(2) = Vert
  77. FMAX=250 'FREQ MAX
  78. FOR R=0 TO 4
  79. IF FORCOULEUR(R)=1 THEN COULEUR$(R)="BLEU"
  80. IF FORCOULEUR(R)=2 THEN COULEUR$(R)="ROUGE"
  81. IF FORCOULEUR(R)=4 THEN COULEUR$(R)="VERT"
  82. 'VARIABLE POUR BLEU' OUTA
  83. ENABLESEND(0)=1
  84. DPSEND(0)=2
  85. SENSSEND(0)=4
  86. CLKSEND(0)=8
  87. ARRET(0)=1
  88. 'VARIABLE POUR ROUGE' OUTA
  89. ENABLESEND(1)=16
  90. DPSEND(1)=32
  91. SENSSEND(1)=64
  92. CLKSEND(1)=128
  93. ARRET(1)=2
  94. 'VARIABLE POUR VERT' OUTB
  95. ENABLESEND(2)=1
  96. DPSEND(2)=2
  97. SENSSEND(2)=4
  98. CLKSEND(2)=8
  99. ARRET(2)=4
  100. IF ENABLE(R)=1 THEN
  101. IF R=1 THEN INDICE=0
  102. IF R=2 THEN INDICE=1
  103. IF R=4 THEN INDICE=2
  104. ENABLE(INDICE)=ENABLESEND(INDICE)
  105. PRINT
  106. [FREQ]
  107. INPUT "A quelle fréquence voulez-vous faire tourner la seringue de ";COULEUR$(R);" ? [FMAX=";FMAX;"] ";FREQ(R)
  108. IF FREQ(R) < 0 THEN
  109. PRINT "Veuillez entrer une fréquence entre 0 et ";FMAX;" Hz."
  110. GOTO [FREQ]
  111. END IF
  112. IF FREQ(R) > FMAX THEN
  113. PRINT "Veuillez entrer une fréquence entre 0 et ";FMAX;" Hz."
  114. GOTO [FREQ]
  115. END IF
  116. FREQ(INDICE)=FREQ(R)
  117. INPUT "Demi pas [1] ou pas entier [0], pour la seringue de ";COULEUR$(R);" ? ";DP(R)
  118. DP(INDICE)=0
  119. IF DP(R) = 1 THEN DP(INDICE) = DPSEND(INDICE)
  120. IF DP(1) <> 32 THEN DP(1)=0 'SI JE NE MET PAS CA, une valeur 1 est autoatribué pour DP(1) ??? EX: ESSAYER AVEC 1 OU 5
  121. INPUT "Avancer [1] ou reculer [0] la seringue de ";COULEUR$(R);" ? ";SENS(R)
  122. SENS(INDICE)=0
  123. IF SENS(R) = 1 THEN SENS(INDICE) = SENSSEND(INDICE)
  124. IF SENS(1) <> 64 THEN SENS(1)=0 'SI JE NE MET PAS CA, une valeur 1 est autoatribué pour SENS(1) ???
  125. INPUT "Nombre de pas pour la seringue de ";COULEUR$(R);" ? ";PAS(R)
  126. PASTOTAL=PASTOTAL+PAS(R)
  127. END IF
  128. NEXT R
  129. TOTALbl=DP(0)+ENABLE(0)+SENS(0)
  130. TOTALro=DP(1)+ENABLE(1)+SENS(1)
  131. TOTALve=DP(2)+ENABLE(2)+SENS(2)
  132. GOSUB[ROUTINE_ENVOIE]
  133. INPUT "Voulez vous recommancer ? OUI[1] NON[0]";RECO
  134. IF RECO=1 THEN
  135. CLS
  136. GOTO[HOME]
  137. END IF
  138. END
  139.              [ROUTINE_ENVOIE]
  140.              'GOSUB[INC]
  141.              C=456
  142.              FOR I=1 TO PASTOTAL
  143.              'BLEU'
  144.              IF I < PAS(1) AND C <> ARRET(0) THEN
  145.              PAUSE=INT((1/FREQ(0))*500)
  146.              TOTALhigh=TOTALbl+CLKSEND(0)
  147.              TOTALlow=TOTALbl
  148.              EN=2
  149.              COUL$="BLEU"
  150.              GOSUB[OUT]
  151.              END IF
  152.              'ROUGE'
  153.              IF I < PAS(2) AND C <> ARRET(1) THEN
  154.              PAUSE=INT((1/FREQ(1))*500)
  155.              TOTALhigh=TOTALro+CLKSEND(1)
  156.              TOTALlow=TOTALro
  157.              EN=2
  158.              COUL$="ROUGE"
  159.              GOSUB[OUT]
  160.              END IF
  161.              'VERT'
  162.              IF I < PAS(4) AND C <> ARRET(2) THEN
  163.              PAUSE=INT((1/FREQ(2))*500)
  164.              TOTALhigh=TOTALve+CLKSEND(2)
  165.              TOTALlow=TOTALve
  166.              EN=1
  167.              COUL$="VERT"
  168.              GOSUB[OUT]
  169.              END IF
  170.              NEXT I
  171.              GOSUB[CLEARALL]
  172.              RETURN
  173.              [OUT]
  174.              TIMER PAUSE,[OUT1]
  175.              WAIT
  176.              [OUT1]
  177.              OUT(888),TOTALhigh
  178.              OUT(890),EN
  179.              OUT(890),3
  180.              PRINT COUL$
  181.              TIMER 0
  182.              TIMER PAUSE, [OUT2]
  183.              WAIT
  184.              [OUT2]
  185.              OUT(888),TOTALlow
  186.              OUT(890),EN
  187.              OUT(890),3
  188.              TIMER 0
  189.              RETURN
  190.         [CLEARALL]
  191.         OUT(888),0
  192.         OUT(890),1
  193.         OUT(890),3
  194.         RETURN
  195.         [INC]
  196.         OUT(890),35:FOR I=1 to 100: NEXT I        'Port parallèle mis en lecture
  197.         OUT(890),39:FOR I=1 to 100: NEXT I        'Sélection port C
  198.         C=INP(888)                                'Entrer la valeur du port C en C
  199.         OUT(890),3:FOR I=1 TO 100:NEXT I          'Désélection de tout les ports
  200.         RETURN


Message édité par nokthib le 24-05-2012 à 14:05:03
n°1516465
MagicBuzz
Posté le 19-02-2007 à 14:45:49  profilanswer
 

hé bé...
 
On dit "recommencer" sans "a" :p
 
C'est tout ce que je comprends de ton programme (faut dire que j'ai pas cherché à comprendre :D)
 
Sinon, niveau algo, je dirais un truc du genre (pseudo code C#):

Code :
  1. void Main()
  2. {
  3.   float cadencePremierMoteur = 150;
  4.   float cadenceSecondMoteur = 100;
  5.   float cadenceTroisiemeMoteur = 23;
  6.   int itterationsPremierMoteur = 500;
  7.   int itterationsSecondMoteur = 45;
  8.   int itterationsTroisiemeMoteur = 98;
  9.   for (int i = 0; i < cadencePremierMoteur * cadenceSecondMoteur * cadenceTroisiemeMoteur; i++)
  10.   {
  11.     if (i % (cadenceSecondMoteur * cadenceTroisiemeMoteur) == 0)
  12.     {
  13.       A(ref itterationsPremierMoteur);
  14.     }
  15.     if (i % (cadencePremierMoteur * cadenceTroisiemeMoteur) == 0)
  16.     {
  17.       B(ref itterationsSecondMoteur);
  18.     }
  19.     if (i % (cadencePremierMoteur * cadenceSecondMoteur) == 0)
  20.     {
  21.       C(ref itterationsTroisiemeMoteur);
  22.     }
  23.   }
  24. }
  25. void A(int ref cpt)
  26. {
  27.   if (cpt-- > 0)
  28.     printf("Action moteur1" );
  29. }
  30. void B(int ref cpt)
  31. {
  32.   if (cpt-- > 0)
  33.   printf("Action moteur2" );
  34. }
  35. void C(int ref cpt)
  36. {
  37.   if (cpt-- > 0)
  38.   printf("Action moteur3" );
  39. }


 
En te démerdant pour qu'un passage dans la boucle fasse exactement 1 / (cadencePremierMoteur * cadenceSecondMoteur * cadenceTroisiemeMoteur) secondes (sauf que ça en Basic je ne vois pas comment c'est possible :heink:)


Message édité par MagicBuzz le 19-02-2007 à 19:38:49
n°1516581
nokthib
Etudiant en Allemagne !
Posté le 19-02-2007 à 17:59:19  profilanswer
 

mon programme fonctionne, donc je le laisse tel quel, je vais juste "l'améliorer" :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Faire tourner trois boucle for next en même temps ...?

 

Sujets relatifs
Saleté de boucle[c/c++] lire des lignes en boucle jusqu'a EOF
rafraichir une image en temps réel?Créer un tableau grâce à une boucle
Comment faire défiler un texte en boucle sous Flash ?Faire tourner du c# sans le CLR...
[MSSQL et PHP] Problème de boucle...[Résolu][VBS Débutant Boucle Do-While-Loop Active Directory]
le temps en seconde depuis 1970Temps de réponse pour jBase
Plus de sujets relatifs à : Faire tourner trois boucle for next en même temps ...?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR