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

Faire tourner trois boucle for next en même temps ...? - VB/VBA/VBS - Programmation

Marsh Posté le 16-02-2007 à 21:28:46    

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 !
Reply

Marsh Posté le 16-02-2007 à 21:28:46   

Reply

Marsh Posté le 16-02-2007 à 21:33:34    

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?  
Reply

Marsh Posté le 16-02-2007 à 21:41:37    

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

Reply

Marsh Posté le 16-02-2007 à 21:59:25    

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?  
Reply

Marsh Posté le 16-02-2007 à 22:44:48    

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

Reply

Marsh Posté le 16-02-2007 à 23:01:55    

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...

Reply

Marsh Posté le 16-02-2007 à 23:06:23    

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

Reply

Marsh Posté le 17-02-2007 à 00:23:56    

c'est du code QBasic que tu dois produire ?

Reply

Marsh Posté le 17-02-2007 à 02:11:07    

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
Reply

Marsh Posté le 17-02-2007 à 02:25:20    

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:

Reply

Marsh Posté le 17-02-2007 à 02:25:20   

Reply

Marsh Posté le 17-02-2007 à 10:01:55    

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
 

Reply

Marsh Posté le 17-02-2007 à 10:07:01    

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
Reply

Marsh Posté le 17-02-2007 à 10:10:39    

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

Reply

Marsh Posté le 17-02-2007 à 10:13:50    

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.

Reply

Marsh Posté le 17-02-2007 à 10:14:41    

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

Reply

Marsh Posté le 17-02-2007 à 10:18:44    

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


 

Reply

Marsh Posté le 17-02-2007 à 10:29:01    

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
Reply

Marsh Posté le 17-02-2007 à 10:32:30    

Si NBPASMOTEUR1 > NBPASMOTEUR2, tu boucles pour rien :(

Reply

Marsh Posté le 17-02-2007 à 10:33:49    

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

Reply

Marsh Posté le 17-02-2007 à 10:35:00    

-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...

Reply

Marsh Posté le 17-02-2007 à 10:37:24    

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

Reply

Marsh Posté le 17-02-2007 à 10:39:38    

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
Reply

Marsh Posté le 17-02-2007 à 10:40:54    

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

Reply

Marsh Posté le 17-02-2007 à 10:42:31    

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.

Reply

Marsh Posté le 17-02-2007 à 22:27:10    

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

Reply

Marsh Posté le 18-02-2007 à 11:49:12    

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
Reply

Marsh Posté le 19-02-2007 à 14:45:49    

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
Reply

Marsh Posté le 19-02-2007 à 17:59:19    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed