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
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#21 Message par Jérémy » lun. 25 juil. 2016 21:27

Il n'y a aucune répétition par contre !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#22 Message par Guest » mar. 26 juil. 2016 07:44

Jérémy a écrit :Il n'y a aucune répétition par contre !


Bonjour
Tu trouves,
Pas moi suite régulière associe de 1 et 3 plus de 20 fois dans la liste de paul du style 1,3,1 ou 3,1,3. J'ai regardé que les impaires.Pas terrible tout cela et je ne parle pas des ressources nécessaires pour faire cela

A+

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

#23 Message par Jérémy » mar. 26 juil. 2016 07:50

Bonjour,

Tu trouves,

Oui je viens de regarder de plus pret , il n'y à aucune répétition de deux chiffres à la suite !

Je suis assez d'accord avec toi sur l'association des nombres .

Il faudrait que le programme autorise le même nombre dans son nouveau tirage "pseudo-aléatoire".
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#24 Message par venom » mar. 26 juil. 2016 08:40

Serte il n'y a pas de répétition mais dans un 1er temps ça peut le faire. À voir pour optimiser par la suite. Il faudrait déjà que je soit capable d'intégrer ça a mon montage :)

Ps: comment fait paulfjujo pour récupérer le résultat ?





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

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

#25 Message par paulfjujo » mar. 26 juil. 2016 13:53

bonjour Venom,


Ps: comment fait paulfjujo pour récupérer le résultat ?


sortie du resultat ( apres transformation en ascci) sur UART1 -> cordon Prolix TTL/USB -> terminal Vbray 19200,,8,N,1
le premier rnombre : valeur aleatoire , puis "remis à l'echelle" pour resultat compris entre 1 et 4
optionellement Vrbay affiche l'horodatage apres un carriage return (donc en debut de ligne)

j'ai regardé sur excel la distribution des nombre 1 à 4 sur l'exemple testé precedement
et aussi avec l'usahe d ela fonction ALEA de Excel ...

On pourrait envisager de remplir l'EEPROM du PIC aec une serie aletoire de 256 elements
puis dans le jeu refaire un tirage aleatoire definissant un index 0 à 255 d'adresse eeprom PIC pour recuperer
"un alea d'alea ", c'est ce qui semble etre utilisé dans le jeu Simons du post precedent.

random_alea_1-4_xls.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

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

#26 Message par venom » mer. 27 juil. 2016 15:00

Salut paulfjujo,

Merci pour ces précisions. Bref pas simple tout ça :? :lol:






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

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

#27 Message par venom » dim. 31 juil. 2016 00:35

En effet pas simple :-D

J'avoue que le projet doit être trop ambitieux par rapport a mon niveau (très bas) :cry:

Voici quand même mon code actuel :

Code : Tout sélectionner

///////////////////////////////
//       name : simon        //
//      create : venom       //
//     date : 16/09/2015     //
//     pic : 16f688 8MHz     //
///////////////////////////////

/*
attention pour faire fonctionner un bouton sur un pic
il faut aller dans " project/edit project/ " et tout mettre a disable
et il faut mettre oscillator a INTOSC

Les boutons sont brancher en "PULL DOWN" : resistance de 10K vers le vss
*/


////////////////////////////////////////////////////////////////////////////////
//           on attirbue un nom au differant pin du microcontroleur           //
////////////////////////////////////////////////////////////////////////////////
sbit inter_green at RA0_bit// donne un nom a la patte RA0 du microcontrôleur "inter_green"
sbit inter_red at RA1_bit;   // donne un nom a la patte RA1 du microcontrôleur "inter_red"
sbit inter_yello at RA2_bit// donne un nom a la patte RA2 du microcontrôleur "inter_yello"
sbit inter_blue at RA3_bit;  // donne un nom a la patte RA3 du microcontrôleur "inter_blue"

sbit led_green at RC0_bit;   // donne un nom a la patte RC0 du microcontrôleur "led_green"
sbit led_red at RC1_bit;     // donne un nom a la patte RC1 du microcontrôleur "led_red"
sbit led_yello at RC2_bit;   // donne un nom a la patte RC2 du microcontrôleur "led_yello"
sbit led_blue at RC3_bit;    // donne un nom a la patte RC3 du microcontrôleur "led_blue"


////////////////////////////////////////////////////////////////////////////////
//                   initialisation des strings 1, 2, 3, 4                    //
////////////////////////////////////////////////////////////////////////////////
char chaine1 1;
char chaine2 2;
char chaine3 3;
char chaine4 4;
char i;


////////////////////////////////////////////////////////////////////////////////
//                           on creer des melodies                            //
////////////////////////////////////////////////////////////////////////////////
void Tone1() { // initialise le son 1
  
led_green 1// on allume la led
  
Sound_Play(60050); // joue un son de 600Hz d'une durée de 50 milisecondes
}

void Tone2() { // initialise le son 2
  
led_red 1// on allume la led
  
Sound_Play(70050); // joue un son de 700Hz d'une durée de 50 milisecondes
}

void Tone3() { // initialise le son 3
  
led_yello 1// on allume la led
  
Sound_Play(80050); // joue un son de 800Hz d'une durée de 50 milisecondes
}

void Tone4() { // initialise le son 4
  
led_blue 1// on allume la led
  
Sound_Play(90050); // joue un son de 900Hz d'une durée de 50 milisecondes
  
led_yello 0// on éteint la led
  
led_blue 0// on éteint la led
}

void Tone5() { // initialise le son 5
  
led_red 1// on allume la led
  
led_green 1// on allume la led
  
led_yello 1// on allume la led
  
led_blue 1// on allume la led
  
Sound_Play(800500); // joue un son de 800Hz d'une durée de 500 milisecondes
}


////////////////////////////////////////////////////////////////////////////////
//           on creer une melodie via les sons initialisé ci-dessus           //
////////////////////////////////////////////////////////////////////////////////
void Melody() {
  
Tone1(); Tone2(); Tone3(); Tone4();
  
Tone3(); Tone4(); Tone5();
}

  
////////////////////////////////////////////////////////////////////////////////
// creer une nouvelle partie avec une série de 30 chiffres aléatoire de 1 a 4 //
////////////////////////////////////////////////////////////////////////////////
void Random_Game() {


}


////////////////////////////////////////////////////////////////////////////////
//                       on lance la boucle principale                        //
////////////////////////////////////////////////////////////////////////////////
void main() {
    
ANSEL 0;               // Configure AN pins as digital I/O
    
CMCON0 0xFF;           // ligne pour que le port RA0 et RA1 soit configurer en entrée
    
    
TRISA 0xFF;           // port A en entrée. Entrée = 1, sortie = 0
    
TRISC 0x00;           // port C en sortie. Entrée = 1, sortie = 0
    
Sound_Init(&PORTC4);  // initialisation du son sur le PORTC et le pin 4
    
    
Melody(); // on joue le son au demarrage du circuit
    
    
    
While(1){
    
// action sur le bouton vert
     
If (inter_green == 1// on vérifie l’état du bouton : 0 = non enfoncer, 1 = enfoncer
     
{
       
led_green 1// on allume la led
       
Sound_Play(700250); // joue un son de 700Hz de 250 miliseconde
       
led_green 0// on éteint la led


       
If (chaine1 == 0)
       {
        
led_green 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 1)
       {
        
led_red 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 2)
       {
        
led_yello 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 3)
       {
        
led_blue 1// on allume la led
        
delay_ms(500);
       }
     }
     Else
     {
       
led_green 0// on éteint la led
     
}

    
// action sur le bouton rouge
     
If (inter_red == 1// on vérifie l’état du bouton : 0 = non enfoncer, 1 = enfoncer
     
{
       
led_red 1// on allume la led
       
Sound_Play(800250); // joue un son de 800Hz de 250 miliseconde
       
led_red 0// on éteint la led


       
If (chaine1 == 0)
       {
        
led_green 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 1)
       {
        
led_red 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 2)
       {
        
led_yello 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 3)
       {
        
led_blue 1// on allume la led
        
delay_ms(500);
       }
     }
     Else
     {
       
led_red 0// on éteint la led
     
}

     
// action sur le bouton jaune
     
If (inter_yello == 1// on vérifie l’état du bouton : 0 = non enfoncer, 1 = enfoncer
     
{
       
led_yello 1// on allume la led
       
Sound_Play(900250); // joue un son de 900Hz de 250 miliseconde
       
led_yello 0// on éteint la led


       
If (chaine1 == 0)
       {
        
led_green 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 1)
       {
        
led_red 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 2)
       {
        
led_yello 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 3)
       {
        
led_blue 1// on allume la led
        
delay_ms(500);
       }
     }
     Else
     {
       
led_yello 0// on éteint la led
     
}

    
// action sur le bouton bleu
     
If (inter_blue == 1// on vérifie l’état du bouton : 0 = non enfoncer, 1 = enfoncer
     
{
       
led_blue 1// on allume la led
       
Sound_Play(1000250); // joue un son de 900Hz de 250 miliseconde
       
led_blue 0// on éteint la led


       
If (chaine1 == 0)
       {
        
led_green 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 1)
       {
        
led_red 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 2)
       {
        
led_yello 1// on allume la led
        
delay_ms(500);
       }
       Else If (
chaine1 == 3)
       {
        
led_blue 1// on allume la led
        
delay_ms(500);
       }
     }
     Else
     {
       
led_blue 0// on éteint la led
     
}
    }


Pour le moment les leds s'allume d'une certaine façon au démarrage et une mélodie se fait entendre. Ensuite quand j'appuie sur un bouton, sa allume la led qui va avec et un son se fait aussi entendre.

Mais je n'arrive pas a ajouté le code de paulfjujo dans mon code :? J’espère que le code est assez lisible.






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

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

#28 Message par paulfjujo » dim. 31 juil. 2016 16:23

bonjour Venom


Je ne sais pas jouer au Simons !

je te propose de tester ceci..

Creation d'une table de 32 valeurs aleatoire 1 à 4
Lors de l'appui d'un bouton on test suivant 4 valeurs aleatoires consecutives récupérees depuis la Table
ensuit on refait un nombre aleatoire de 1 à 4 pour se deplacer dans la table pour le coup suivant
tout en restant dans l'espace de la table 0 à 31

Dans ton code Pourquoi re_eteindre la led allumée et eteinte au debut de sequence
Si elle est allumée aleatoirement il faudrait l'eteindre ?
je n'ai pas rajouté ce cas de figure dans le code.
à revoir .. oops je ne connais pas l'algoritme de ce jeu.

Code : Tout sélectionner

//  video Ici https://youtu.be/4YhVyt4q5HI
// http://www.fantaspic.fr/viewtopic.php?f=10&t=291

///////////////////////////////
//       name : simon        //
//      create : venom       //
//     date : 16/09/2015     //
//     pic : 16f688 8MHz     //
///////////////////////////////

/*
attention pour faire fonctionner un bouton sur un pic
il faut aller dans " project/edit project/ " et tout mettre a disable
et il faut mettre oscillator a INTOSC

Les boutons sont brancher en "PULL DOWN" : resistance de 10K vers le vss
*/


////////////////////////////////////////////////////////////////////////////////
//           on attirbue un nom au differant pin du microcontroleur           //
////////////////////////////////////////////////////////////////////////////////
sbit inter_green at RA0_bit; // donne un nom a la patte RA0 du microcontrôleur "inter_green"
sbit inter_red at RA1_bit;   // donne un nom a la patte RA1 du microcontrôleur "inter_red"
sbit inter_yello at RA2_bit; // donne un nom a la patte RA2 du microcontrôleur "inter_yello"
sbit inter_blue at RA3_bit;  // donne un nom a la patte RA3 du microcontrôleur "inter_blue"

sbit led_green at RC0_bit;   // donne un nom a la patte RC0 du microcontrôleur "led_green"
sbit led_red at RC1_bit;     // donne un nom a la patte RC1 du microcontrôleur "led_red"
sbit led_yello at RC2_bit;   // donne un nom a la patte RC2 du microcontrôleur "led_yello"
sbit led_blue at RC3_bit;    // donne un nom a la patte RC3 du microcontrôleur "led_blue"


////////////////////////////////////////////////////////////////////////////////
//                   initialisation des strings 1, 2, 3, 4                    //
////////////////////////////////////////////////////////////////////////////////

int i;
char Random_Table[32];
int Index;

////////////////////////////////////////////////////////////////////////////////
//                           on creer des melodies                            //
////////////////////////////////////////////////////////////////////////////////
void Tone1() { // initialise le son 1
  led_green = 1; // on allume la led
  Sound_Play(600, 50); // joue un son de 600Hz d'une durée de 50 milisecondes
}

void Tone2() { // initialise le son 2
  led_red = 1; // on allume la led
  Sound_Play(700, 50); // joue un son de 700Hz d'une durée de 50 milisecondes
}

void Tone3() { // initialise le son 3
  led_yello = 1; // on allume la led
  Sound_Play(800, 50); // joue un son de 800Hz d'une durée de 50 milisecondes
}

void Tone4() { // initialise le son 4
  led_blue = 1; // on allume la led
  Sound_Play(900, 50); // joue un son de 900Hz d'une durée de 50 milisecondes
  led_yello = 0; // on Ã©teint la led
  led_blue = 0; // on Ã©teint la led
}

void Tone5() { // initialise le son 5
  led_red = 1; // on allume la led
  led_green = 1; // on allume la led
  led_yello = 1; // on allume la led
  led_blue = 1; // on allume la led
  Sound_Play(800, 500); // joue un son de 800Hz d'une durée de 500 milisecondes
}




////////////////////////////////////////////////////////////////////////////////
//           on creer une melodie via les sons initialisé ci-dessus           //
////////////////////////////////////////////////////////////////////////////////
void Melody() {
  Tone1(); Tone2(); Tone3(); Tone4();
  Tone3(); Tone4(); Tone5();
}

  
////////////////////////////////////////////////////////////////////////////////
// creer une nouvelle partie avec une série de 32 chiffres aléatoire de 1 a 4 //
////////////////////////////////////////////////////////////////////////////////
void Random_Game()
 {
unsigned int j,k,m;
  j=0;
  m=0;
   while(j<32)  // 32 = multiple exact de 4
   {
   srand(j);
   //Function returns a sequence of pseudo-random numbers between 0 and 32767.
   // The function will always produce the same sequence of numbers unless srand is called to seed the start point.
   k=rand();
  // WordToStr(k,CRam1);
  //  UART1_Write_Text(CRam1);
     m=(%4)+1;
  // WordToStr(m,CRam1);
  // UART1_Write_Text(CRam1);
  // CRLF1();
  //  Delay_ms(500);
   Random_Table[j]=m;
   j++;
   }
}

void Allumage_alleatoire_Leds()
{
  unsigned int k,m; 
      if
(Random_Table[Index]==1)
      {
        led_green = 1; // on allume la led
        Delay_ms(500);
      }
      if(Random_Table[Index+1]==2)
      {
        led_red = 1; // on allume la led
        Delay_ms(500);
      }
       if(Random_Table[Index+2]==3)
       {
        led_yello = 1; // on allume la led
        Delay_ms(500);
       }
        if(Random_Table[Index+3]==4)
        {
        led_blue = 1; // on allume la led
        Delay_ms(500);
        }
        srand(Index);
       k=rand();
        m=(%4)+1;
       Index=Index+m; // on se deplace aleatoirement dans la table 
    Index=Index & 0x1F ;    // pour rester dans la plage 0 Ã  31
}


////////////////////////////////////////////////////////////////////////////////
//                       on lance la boucle principale                        //
////////////////////////////////////////////////////////////////////////////////
void main() {
    ANSEL = 0;               // Configure AN pins as digital I/O
    CMCON0 = 0xFF;           // ligne pour que le port RA0 et RA1 soit configurer en entrée
    
    TRISA 
= 0xFF;           // port A en entrée. Entrée = 1, sortie = 0
    TRISC = 0x00;           // port C en sortie. Entrée = 1, sortie = 0
    Sound_Init(&PORTC, 4);  // initialisation du son sur le PORTC et le pin 4
    
    Random_Game
();    // initialise table de 32 valeurs aleatoire comprise entre 1 et 4
    Melody(); // on joue le son au demarrage du circuit
    Index=0;
    
   while
(1)
   {
    // action sur le bouton vert
     if (inter_green == 1) // on vérifie l’état du bouton : 0 = non enfoncer, 1 = enfoncer
     {
       led_green = 1; // on allume la led
       Sound_Play(700, 250); // joue un son de 700Hz de 250 miliseconde
       led_green = 0; // on Ã©teint la led
       Allumage_alleatoire_Leds();
    
     
}

    // action sur le bouton rouge
     if (inter_red == 1) // on verifie  etat du bouton : 0 = non enfoncer, 1 = enfoncer
     {
       led_red = 1; // on allume la led
       Sound_Play(800, 250); // joue un son de 800Hz de 250 miliseconde
       led_red = 0; // on eteintla led
       Allumage_alleatoire_Leds();
     //   led_red = 0;
     }

     // action sur le bouton jaune
     if (inter_yello == 1) // on verifie etat du bouton : 0 = non enfoncer, 1 = enfoncer
     {
       led_yello = 1; // on allume la led
       Sound_Play(900, 250); // joue un son de 900Hz de 250 miliseconde
       led_yello = 0; // on Eteint la led
             Allumage_alleatoire_Leds();
     }

    // action sur le bouton bleu
     if (inter_blue == 1)
     {
       led_blue = 1; // on allume la led
       Sound_Play(1000, 250); // joue un son de 900Hz de 250 miliseconde
       led_blue = 0;
       Allumage_alleatoire_Leds();
     }
     
    
}// while
} 




Nota: je ne l'ai pas testé ..je n'ai que 2 BP et 2 leds sur ma carte 18F
mais la compilation (16F688) passe OK



Nota:
Les boutons sont brancher en "PULL DOWN" : resistance de 10K vers le vss

j'y vois une contradiction
ce serait pas plutot BP entre 0V ( VSS) et Entree et R pull-up 10K entre entrée et VDD ?
Aide toi, le ciel ou FantasPic t'aidera

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

#29 Message par venom » dim. 31 juil. 2016 20:08

Merci paulfjujo pour le code.

Je test des que possible je te dit quoi.
Après pour résumer le fonctionnement il faut à chaque bonne réponse relire les infos depuis le début.

Exemple :
Led 1 s'allume... Le jeux attend que le joueur appuie dessus.
Si il y a bonne réponse, le jeux rallume la Led 1 suivit d'une autre Led exemple led 3. Si il y a bonne réponse, le jeux allume la Led 1 suivit de la Led 3 et ensuite la Led 2 etc.... Jusqu'à une erreur du joueur.

Donc c'est pour sa que j'étais parti dans l'esprit de créer un tableau avec des chiffres aléatoires mais de lire le tableau dans l'ordre pour faciliter la re-lecture :langue:





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


Retourner vers « Langage C »

Qui est en ligne

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