Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général en BASIC et PASCAL !

Modérateur : Gérard

Nombre aléatoire
venom
Avatar de l’utilisateur
Passioné
Passioné
Messages : 442
Âge : 33
Enregistré en : avril 2016
Localisation : . <------ ici
Contact :

#11 Message par venom » lun. 26 nov. 2018 20:39

Merci pour l'exemple pspic. Intéressant.






@++
En fait tout est une question de BIT ? :-D

Nombre aléatoire
Tango
Débutant
Débutant
Messages : 39
Âge : 67
Enregistré en : février 2017
Localisation : Vosges

#12 Message par Tango » mar. 27 nov. 2018 15:57

Bonjour et merci pspic,
Faut-il souder un petit bout de fil sur l'entrée analogique flottante RA0 de manière à ce que celle-ci reçoive plus de parasites pour générer un nombre aléatoire entre 0 et 1023 à chaque lecture "ADC_Read(0)"
Merci pour les explications de Srand() et Rand().
Je pense avoir tous les éléments qu'il me manquait. je vais tantôt faire les premiers essais. @+
Cordialement.
Tango.

Nombre aléatoire
pspic
Débutant
Débutant
Messages : 45
Âge : 72
Enregistré en : septembre 2017
Localisation : 68

#13 Message par pspic » mer. 28 nov. 2018 13:18

Bonjour,
il est inutile de mettre une antenne sur RA0.
Tu parles de 0 à 1023, ce principe est limité à 0 à 255.

Nombre aléatoire
Jérémy
Administrateur du site
Administrateur du site
Messages : 2231
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#14 Message par Jérémy » mer. 28 nov. 2018 13:40

Bonjour ici,

J'ai un doute sur l’utilisation de leacture ADC seul .

En fait je doute que tu puisses obtenir un 0 ou 1 par exemple en faisait une lecture analogique? Moi je prendrais le chiffre des unités ( de 0 à 9) puis je referais une lecture et reprendrais le dernier chiffre ou les deux derniers et ferait une opération mathématiques pour obtenir la des chiffres dans la fourchette désiré . Un truc du genre
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Nombre aléatoire
pspic
Débutant
Débutant
Messages : 45
Âge : 72
Enregistré en : septembre 2017
Localisation : 68

#15 Message par pspic » mer. 28 nov. 2018 14:56

BonjourJérémy,
Je n'est pas bien compris ta remarque, peux tu préciser ?

Tango souhaite allumer une lampe toutes les 2 heures pendant un temps aléatoire de 1 à 15 mn.
Je viens de tester en réel et ça fonctionne.
Attention, remplacer delay_ms(1000) par Delay_ms(7200 * 1000) pour un cycle toutes les 2 heures.

Code : Tout sélectionner

program GeneNbrAleatoire_2
'Génère un nombre aléatoire entre 1 et 255.
'Testé avec PIC 18F2420 à 8MHz sur Easy Pic 5.
dim V0, Vp, Bc as byte
    V0Str as string[3]
    Va as word
main:
'Uart1_Init(9600)
TRISA = 1
PORTB = 0
TRISB = 0
ADC_Init()
Adcon1 = %00001110            'RA0 en entrée ana
While true
  Va = ADC_Read(0)               'Lecture entrée ana RA0 en l'air
  Srand(Va and 15)               'Fixe le point de départ
  V0 = rand()                    'Nombre tiré au sort entre 0 et 255
  V0 = V0 and 15                 'Filtre sur 0 à 15.
  if V0 = Vp then V0 = V0 - 1 end if    'Anti répétition.
  if V0 < 1 then V0 = 5 end if       'Eliminer le chiffre 0
  Vp = V0                                'Mem valeur précédente.
 ' bytetostr(V0,V0Str)                 'Conversion valeur tirée en Txt.
  'Uart1_write_Text(","+V0Str)         'Envoi valeur tirée sur UART
  SetBit(PORTB,0)                       'Lampe = 1
  for Bc = 1 to V0                       'Boucle tempo
  delay_ms(1000* 60)                  'Tempo en mn
  next Bc
  ClearBit(PORTB,0)                   'Lampe = 0
  delay_ms(1000)                      'Pour 2 h. --> delay_ms(7200 * 1000)
Wend
end.

Nombre aléatoire
Jérémy
Administrateur du site
Administrateur du site
Messages : 2231
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#16 Message par Jérémy » mer. 28 nov. 2018 16:21

Je n'est pas bien compris ta remarque, peux tu préciser ?

Pas de probléme, j'ai parfois du mal a expliqué ce que je pense! :sifflotte:

La génération d'un nombre aléatoire doit permettre d'obtenir n'importe quel chiffre . Hors je ne pense pas que tu puisses obtenir la valeur 0 en faisant une lecture analogique d'une broche en l'air.

N'ayant pas lu en entier , j'avais pas vu que la tempo est forcement supérieur à 0 et que tu faisais un autre traitement derriére !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Nombre aléatoire
pspic
Débutant
Débutant
Messages : 45
Âge : 72
Enregistré en : septembre 2017
Localisation : 68

#17 Message par pspic » mer. 28 nov. 2018 16:53

Le chiffre tiré au sort sert à définir le nombre de minutes d'allumage de la lampe, donc 0 est exclus.
Zéro est possible en admettant que le chiffre %00110000 est tiré.
Comme je fais %00110000 AND 00001111 le résultat est bien zéro.
Je fait un test pour vérifier que le chiffre est <> 0, sinon je force une valeur > 0 (voir le code).
Résultat du test toutes les secondes ajouté à 18h52:
Heure Temps mn
15:53:07 5
15:58:08 15
16:13:09 8
16:21:10 7
16:28:11 5
16:33:12 6
16:39:13 5
16:44:18 2
16:46:19 6
16:52:22 8
17:00:26 7
17:07:27 5
17:12:28 8
17:20:29 9
17:29:30 8
17:37:31 7
17:44:32 5
17:49:33 8
17:57:34 12
18:09:35 3
18:12:36 6
18:18:37 9
18:27:38 14
Modifié en dernier par pspic le mer. 28 nov. 2018 18:54, modifié 1 fois.

Nombre aléatoire
Jérémy
Administrateur du site
Administrateur du site
Messages : 2231
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#18 Message par Jérémy » mer. 28 nov. 2018 16:56

:bravo:
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité