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 sur le langage C !

Modérateur : Jérémy

simon says
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#1 Message par venom » mar. 19 juil. 2016 23:21

Bonjour, j’espère que vous allez bien, moi ça va.

Je viens a vous via un nouveau topic, concernant " simon says " pour ceux qui ne connaissent pas, c'est un jeu de mémo qui se présente comme ceux-ci

Pour résumé, je jeux allume les lumières ( vert, rouge, bleu, jaune ) aléatoirement en ajoutant une en plus au fur et a mesure.
Exemple :
Vert
Vert, Bleu
Vert, Bleu, Jaune etc..
jusqu’à ce qu'on se trompe. bref une vidéo est plus compréhensible :-D

Et donc c'est un projet que j'avais commencer ( sur breadboard ) et simulation isis. Pour le moment chaque bouton allume sa led avec un son sur le speaker
Screen :
Image

La dans un premier temps, je cherche le moyen de créer une partie aléatoire . Vous feriez de quel manière a ma place ? :-) Vers quoi m'orienter ? Perso je penser a sauvegarder dans eeprom une série de 30 chiffres aléatoire entre 1 et 4 qui correspond a chaque led ? :? qu'en pensez vous ? :razz:

Merci de votre aide.






@++
Mon site web
Mon discord : venom#4888

simon says
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#2 Message par Guest » mer. 20 juil. 2016 07:56

Bonjour

juste de passage :wink:

Pas simple de faire de l’aléatoire, sur PC c'est le rafraîchissement de la ram qui tient de compteur. Sur pic perso ,faire tourner un timer à chaque appuie, lire la valeur du compteur.Apres a déterminer les butées du timer.

Heu EEPROM pas bien compris pourquoi

A plus

PS beaucoup de monde en vacances comme moi sur Fantas-pic dehors!!

simon says
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » mer. 20 juil. 2016 10:36

bonjour,


j'abonde à la proposition de Maï,
un compteur timer ex: Timer2 ou timer3 , avec auto reload qui tourne tout seul dans son coin , sans activer d'interrupt!
PR2=255
avec T=1mS ou moins
on lit le timer2 et result=1 + TMR2 >>6 => entre 1 et 4

un petit test

Code : Tout sélectionner



sbit BP1 at RD7_bit
;
sbit BP1_Direction at TRISD7_bit;

char Table_Alea[34];
char c1;
int i;



void Init_Timer2()   // specifique 18F87J50 .. à verifier avec autre PIC
{
 TMR2=255 ;   
 
// si FOSC=48MHZ   Prescaler=1/4  Postscaler=1/8   Time=0,68mS
 // si FOSC=8MHz    Prescaler=1/1  Postscaler=1/8   Time=1,02mS
 // prescaler =1/16 avec 48Mhz    00=>1/1     01=>1/4   10=>1/16
  T2CON.T2CKPS1=0;
    T2CON.T2CKPS0=1;
  //  PostScaler=>1/1  0000=>1/1   0011=> 1/4  0111=>1/8  1111=> 1/16
  T2CON.T2OUTPS3 =0;
    T2CON.T2OUTPS2 =1;
      T2CON.T2OUTPS1 =1;
        T2CON.T2OUTPS0 =1;
 T2CON.TMR2ON=1;
 IPR1.TMR2IP =0;
 PIR1.TMR2IF=0;
 PIE1.TMR2IE=0;   // no interrupt
}

void main()
{
 //  ...FOSC
  Hardware_Init();
  UART1_Init(38400);
  UART1_Write(CLS);
 //  ....etc

   Init_Timer2();
   i=0;
   UART1_Write_CText("Appui successif ou appui suffisament long sur BP1 pour remplir la table Aleas :\r\n");
   while(i<32)
   {
   while(BP1==1);
    if(BP1==0)      // BP1=1 au repos
   {
     c1=(TMR2 >>6) +1  ;
     Table_Alea[i]= c1  ;
     i++;
     Delay_ms(147);  // valeur quelconque ,non multiple de Timer2 , pour sauter par desssus les rebonds BP1 ..  ou garder les rebonds ?
   }
   CRLF1();
   }
   UART1_Write_CText(" Contenu Table Aleas :\r\n");
   for (i=0;i<32;i++)
   {  if (i%8==0) CRLF1();
      c1=Table_Alea[i];
      UART1_Write(c1+48); UART1_Write(' ');

    }
    CRLF1();
    while(1);
    



resultat

chaque ligne correspond à une valeur stockée
avec plusieurs appui sur BP1 ! jusqu'à remplir les 32 valeurs

11:15:38.484> Appui successif ou appui suffisament long sur BP1 pour remplir la table Aleas :
11:15:44.796>
11:15:44.921>
11:15:45.921>
11:15:46.046>
11:15:46.234>
11:15:46.359>
11:15:47.546>
11:15:47.671>
11:15:47.796>
11:15:48.484>
11:15:48.609>
11:15:50.609>
11:15:50.734>
11:15:51.421>
11:15:51.921>
11:15:52.109>
11:15:52.734>
11:15:52.921>
11:15:53.359>
11:15:53.546>
11:15:53.671>
11:15:53.859>
11:15:54.484>
11:15:54.609>
11:15:55.109>
11:15:55.296>
11:15:55.421>
11:15:55.546>
11:15:55.734>
11:15:55.859>
11:15:56.484>
11:15:56.671>
11:15:56.671> Contenu Table Aleas :
11:15:56.671>
11:15:56.671> 4 3 4 1 1 1 1 1
11:15:56.671> 2 3 3 4 4 3 4 1
11:15:56.671> 4 4 4 4 4 4 3 3
11:15:56.671> 3 4 4 4 4 4 1 1




delay_ms(147); ou pas ? profiter des rebonds de BP1
un test sans la tempo delay_ms(147);
semble d'ailleurs donner un meilleur aleas

au timming, on voit q'un seul appui (+ rebonds) pris en compte en <= 50mS (resolution timming Vbray)

11:36:56.984> Appui successif ou appui suffisament long sur BP1 pour remplir la table Aleas :
11:36:58.234>
11:36:58.234>
11:36:58.234>
11:36:58.234>
11:36:58.234>
11:36:58.234>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296>
11:36:58.296> Contenu Table Aleas :
11:36:58.296>
11:36:58.296> 1 2 4 3 2 1 4 2
11:36:58.296> 1 4 3 2 4 3 2 1
11:36:58.296> 4 3 1 4 3 2 1 3
11:36:58.296> 2 1 4 3 1 4 3 2
Aide toi, le ciel ou FantasPic t'aidera

simon says
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » mer. 20 juil. 2016 19:43

Bonsoir,

Je pense aussi que c'est la meilleur idée . ( en même temps je vais pas contredire Paul et Maï :eek: ).

Par contre le contenu est bizare non ?

dans la première série , un seul "2" apparait sur 32 chiffres
dans la deuxième série aucun chiffre ne se répète deux fois de suite !!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

simon says
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#5 Message par Claudius » mer. 20 juil. 2016 22:59

Bonsoir,

Très intéressant comme sujet...
La série produite ne sera de toute façon que pseudo-aléatoire à moins d'acquérir du bruit et encore cela ne sera jamais de l'aléatoire pur ;-)

Sans être puriste, si la série est "assez longue", des solutions:
- Utiliser un site qui produit lesdites séries aléatoires et les enregistrer comme Download random numbers from quantum origin
- Implémenter un polynôme générateur comme Prpduire Des Nombres « Au Hasard »
- Lire et relire Générateur de nombres aléatoires
- etc.

simon says
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » jeu. 21 juil. 2016 19:29

bonsoir

+1
à moins d'acquérir du bruit


OUI,

ou un BP pourri presentant de multiples rebons ... un gros bruit tout ou rien
Aide toi, le ciel ou FantasPic t'aidera

simon says
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#7 Message par venom » jeu. 21 juil. 2016 21:40

Merci pour vos divers explication.
Je vais éplucher et essayer de comprendre le code de paulfjujo. ;)

C'est pas si simple que ça un random ; s lol

Je n'ai pas compris pour le "bruit" ???





@++
Mon site web
Mon discord : venom#4888

simon says
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » ven. 22 juil. 2016 07:19

Bonjour à tous,

le "Bruit" , je pense, s'agit sûrement de parasites ambiants sur les fils . Un peu courbe une courbe d'un oscilloscope pret d'un parasite .

Sinon tu pourrais aussi utilisé le temps d'appui sur le BP comme "hasardeux " en complément du timing .

Le chrono tourne très vite, a l'appui il s’arrête sur un certain chiffre , et suivant le temps de l'appui ( on parle en millisecondes donc presque impossible a reproduire volontairement), on additionne le tout , et par une formule savante on en sort un chiffre.

est-ce que je me trompe, après la lecture des liens de Claudius si je dis, plus il y a de critères non maitrisé par l'homme plus la part du hasard est grande ?

Si j'ai le temps je te ferais ça ce week end par curiosité .

Ça pourrait faire un bon tuto ca aussi, la création de nombre aléatoire ou plutôt "pseudo-aléatoire".
C'est en faisant des erreurs, que l'on apprend le mieux !!!

simon says
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#9 Message par Guest » lun. 25 juil. 2016 09:10

Bonjour

Comme dab rapide :wink:

HA...le mode aléatoire , le vrai celui qui n'existe pas :lol:

Pour un pic un timer doit faire l'affaire, bien sur le faire tourner le plus rapidement possible :wink: . Cela nous donne 1/65535 chances de tomber sur la même valeur(suivant le timer utilisé).
On est loin de la tartine beurrée 1/2. Bon après il y a le coté cyclique et tout est la .Cela ne change rien au problème toujours du PSEUDO,même si on rajoute comme paramètre une horloge, elle est cyclique ou autre ,dur dur de sortir de la......

allez A+

bon petit vent..

simon says
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#10 Message par Jérémy » lun. 25 juil. 2016 09:16

Bonne nav ! :-D

Oui se sera toujours du pseudo aléatoire !
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités