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 : 960
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#11 Message par venom » lun. 25 juil. 2016 15:19

Si cela peut aidé, j'ai trouvé un projet de simon avec le code en C pour un pic 18F fourni.

Lien du projet


Code source :

Code : Tout sélectionner

#define PATTERN_SIZE 512
#define EEPROM_SEED_ADRESS 0
#define EEPROM_SOUND_EBABLE_ADRESS 1

// Globals
char Pattern[PATTERN_SIZE];                // Main Pattern for player to follow
unsigned int PatternPointer 0;  // Current position in Pattern
unsigned int UserPatternPointer 0;
unsigned char IsUserPlaying 0;

unsigned char IsSoundEnabled 1;
unsigned int NumbersFreq[] = {209,252,310,415};
unsigned int GreetingMelody[] = {0,1,2,1,3,1,3,0};

void GenerateNext();
void Reset();

void GameOver()
{
     
char i=0;
     
char j=0;
     
PORTD 0x00;
     
delay_ms(250);
     for(
j=0j<20j++)
       for(
i=0i<4i++)
       {
                
PORTD PORTD ^ (0b00010000 << i); // Turn on LED1
                
if(IsSoundEnabled)
                {
                    
Sound_Play(NumbersFreq[i],25);
                }
                else
                    
delay_ms(25);
       }
     
delay_ms(500);
     
Reset();
}

void Greeting()
{
     
char i=0;
     
char j=0;
     
PORTD 0x00;
     
delay_ms(1000);
     for(
j=0j<2j++)
       for(
i=0i<4i++)
       {
                
PORTD PORTD ^ (0b00010000 << i); // Turn on LED1
                
if(IsSoundEnabled)
                {
                      
Sound_play(NumbersFreq[GreetingMelody[(j+1)*i]],200);
                }
                else
                      
delay_ms(200);
       }
     
delay_ms(250);
     
PORTD PORTD 0xF0;
     
delay_ms(250);
     
PORTD PORTD 0xF0;
}

void SetUpRandomGenerator()
{
     
// Seed for srand function is stoerd in MCU's EEPROM memory,
     // and incremented every time game has started, so every time we get
     // different series of random numbers
     
unsigned short seed=0;
     
seed EEPROM_read(EEPROM_SEED_ADRESS);
     
srand(seed);
     
seed++;
     
EEPROM_write(EEPROM_SEED_ADRESS,seed);
}

// Reset game (called when first started, and when player resets game, or
// player makes wrong move
void Reset()
{
     if(
IsSoundEnabled)
                       
Sound_play(880,250);

     for(
PatternPointer=0PatternPointer<PATTERN_SIZEPatternPointer++)
     {
           
Pattern[PatternPointer] = 0;
     }
     
PatternPointer 0;
     
UserPatternPointer 0;
     
SetUpRandomGenerator();
     
Greeting();
     
IsUserPlaying 0;
     
GenerateNext();
}

void ClearDisplay()
{
     
PORTD 0x00;
}

void DisplayNumber(int number)
{
     
ClearDisplay();
     
PORTD PORTD | (0b00010000 << number);
}

void RepeatPattern()
{
     
int i=0;
     for(
i=0i<PatternPointeri++)
     {
          
ClearDisplay();
          
delay_ms(250);
          
DisplayNumber(Pattern[i]);
          if(
IsSoundEnabled)
                            
Sound_play(NumbersFreq[Pattern[i]],250);
          else
              
delay_ms(250);
     }
}

void GenerateNext()
{
     
int RandomNumber;
     
RandomNumber rand()%4;
     
//DisplayNumber(RandomNumber);
     
Pattern[PatternPointer] = RandomNumber;
     
PatternPointer++;
     
delay_ms(500);
     
RepeatPattern();
     
delay_ms(500);
     
ClearDisplay();
     
IsUserPlaying 1;
     
UserPatternPointer 0;
}



void ProcessButtonInput(char achar bchar cchar d)
{
     
int InputNumber=0;

     if(
|| || || d)    // If user presses any key
     
{
          if(
a)
               
InputNumber 0;
          if(
b)
               
InputNumber 1;
          if(
c)
               
InputNumber 2;
          if(
d)
               
InputNumber 3;

          if(
IsUserPlaying)
          {
            
DisplayNumber(InputNumber);
            if(
IsSoundEnabled)
                              
Sound_play(NumbersFreq[InputNumber],250);
            else
                
delay_ms(250);
            
ClearDisplay();
            if(
InputNumber == Pattern[UserPatternPointer])
            {
                 
// User Guessed right
                 
UserPatternPointer++;
                 if(
UserPatternPointer == PatternPointer)
                 {
                     
// User guesseg entire Pattern
                     
IsUserPlaying 0;
                     
UserPatternPointer 0;
                     
GenerateNext();

                 }
                 
//PORTD = 0xFF;
                 //RepeatPattern();
                 //GenerateNext();
            
}
            else
            {
                
// User Guessed wrong
                
GameOver();
            }
          }
     }
 
/*
     PORTD = 0x00;
     PORTD = PORTD | (a<<4);
     PORTD = PORTD | (b<<5);
     PORTD = PORTD | (c<<6);
     PORTD = PORTD | (d<<7);
     */
}

void LoadConfig()
{
     
unsigned short SoundEnabled 0;
     
SoundEnabled EEPROM_read(EEPROM_SOUND_EBABLE_ADRESS);
     
IsSoundEnabled SoundEnabled;
}

void main() {
     
int i=0;
     
bit pa,pb,pc,pd;   // Current keys state (1 pressed, 0 not pressed)
     
bit oa,ob,oc,od;   // Old states for the buttons
     
oa=ob=oc=od=0;
     
pa=pb=pc=pd=0;

     
TRISD 0x0F// RD0 - RD3 as inputs, RD4 - RD7 Outputs
     
PORTD 0x00;

     
LoadConfig();

     
Sound_init(&PORTC,2);
     if(
Button(&PORTD,0,1,0))   // If Button 1 pressed while turning on toggle sound
     
{
            for(
i=0i<4i++)
                     
Sound_play(NumbersFreq[i],50);
            if(
IsSoundEnabled == 0)
            {
                              
IsSoundEnabled 1;
                              
EEPROM_write(EEPROM_SOUND_EBABLE_ADRESS,IsSoundEnabled);
            }
            else
            {
                              
IsSoundEnabled 0;
                              
EEPROM_write(EEPROM_SOUND_EBABLE_ADRESS,IsSoundEnabled);
            }

     }
     
Reset();     // Reset game state (first time)

     
while(1)
     {
             
pa=pb=pc=pd=0;
             
// Button 1
             
if(Button(&PORTD,0,1,0) && !oa)
             {
                     
//PORTD = PORTD ^ 0b00010000; // Change first bit (LED 1)
                     //RandomNumber = rand() % 4;
                     //PORTD = 0x00;
                     //PORTD = PORTD | (0b00010000 << RandomNumber);
                     
oa 1;
                     
pa 1;
             }
             if(!
Button(&PORTD,0,1,0))
             {
                     
oa 0;
                     
pa 0;
             }

             
// Button 2
             
if(Button(&PORTD,1,1,0) && !ob)
             {
                     
//PORTD = PORTD ^ 0b00100000; // Change first bit (LED 1)
                     
ob 1;
                     
pb 1;
             }
             if(!
Button(&PORTD,1,1,0))
             {
                     
ob 0;
                     
pb 0;
             }

             
// Button 3
             
if(Button(&PORTD,2,1,0) && !oc)
             {
                     
//PORTD = PORTD ^ 0b01000000; // Change first bit (LED 1)
                     
oc 1;
                     
pc 1;
             }
             if(!
Button(&PORTD,2,1,0))
             {
                     
oc 0;
                     
pc 0;
             }

             
// Button 4
             
if(Button(&PORTD,3,1,0) && !od)
             {
                     
//PORTD = PORTD ^ 0b10000000; // Change first bit (LED 1)
                     
od 1;
                     
pd 1;
             }
             if(!
Button(&PORTD,3,1,0))
             {
                     
od 0;
                     
pd 0;
             }

             
// Process button data
             
ProcessButtonInput(pa,pb,pc,pd);
     }




J'essaie de comprendre le code mais c'est pas simple. :-D




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

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

#12 Message par Guest » lun. 25 juil. 2016 19:26

tres jolie
ce qui me gène c'est: RandomNumber = rand()%4; a voir si Rand() fait partie de la lib de microC si oui c'est gagné et encore il faut quelle tourne sous 16F

A+

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

#13 Message par paulfjujo » lun. 25 juil. 2016 19:47

bonsoir,


il me semblequ'ilmanque des bouts de code ,
en particulier la fonction srand
qui serait le coeur de la generation aleatoire .

update !

elle est dans Stdlib !
vu dans un post forum MikroC pro
http://forum.mikroe.com/viewtopic.php?f ... nd#p129697
Aide toi, le ciel ou FantasPic t'aidera

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

#14 Message par Jérémy » lun. 25 juil. 2016 19:56

Et voici !! je crois que ça devrait être une formalité avec ca :


Sans titre.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#15 Message par Guest » lun. 25 juil. 2016 19:57

paulfjujo a écrit :bonsoir,


il me semblequ'ilmanque des bouts de code ,
en particulier la fonction srand
qui serait le coeur de la generation aleatoire .

update !

elle est dans Stdlib !
vu dans un post forum MikroC pro
http://forum.mikroe.com/viewtopic.php?f ... nd#p129697


elle tourne sur 16F ????
si oui affaire réglé

A+

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

#16 Message par paulfjujo » lun. 25 juil. 2016 20:05

à priori , ces 2 fonctions sont dans Stdlib.. meme pour un 16F84 !
Aide toi, le ciel ou FantasPic t'aidera

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

#17 Message par Guest » lun. 25 juil. 2016 20:07

tient paul cela répond aussi au post sur perdu colis, le grand chef du forum est en Serbie :wink:

bon tres bien affaire réglé

A++++

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

#18 Message par paulfjujo » lun. 25 juil. 2016 20:26

un petit test, pour VOIR !

Code : Tout sélectionner


   
//Function uses x as a starting point for a new sequence of pseudo-random numbers
   // to be returned by subsequent calls to rand. No values are returned by this function.
   
j=1;
   while(
1)
   {
   
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);
   
j++;
   }


 


ce qui donne :


20:22:31.218> UART1 38400 bds Clicker2 -> terminal

20:22:31.968> 16838 3
20:22:32.468> 908 1
20:22:33.031> 17747 4
20:22:33.531> 1817 2
20:22:34.031> 18655 4
20:22:34.531> 2726 3
20:22:35.031> 19564 1
20:22:35.531> 3634 3
20:22:36.031> 20472 1
20:22:36.531> 4543 4
20:22:37.031> 21381 2
20:22:37.531> 5451 4
20:22:38.031> 22290 3
20:22:38.531> 6360 1
20:22:39.031> 23198 3
20:22:39.531> 7269 2
20:22:40.031> 24107 4
20:22:40.531> 8177 2
20:22:41.031> 25016 1
20:22:41.531> 9086 3
20:22:42.093> 25924 1
20:22:42.593> 9994 3
20:22:43.093> 26833 2
20:22:43.593> 10903 4
20:22:44.093> 27741 2
20:22:44.593> 11812 1
20:22:45.093> 28650 3
20:22:45.593> 12720 1
20:22:46.093> 29559 4
20:22:46.593> 13629 2
20:22:47.093> 30467 4
20:22:47.593> 14537 2
20:22:48.093> 31376 1
20:22:48.593> 15446 3
20:22:49.093> 32284 1
20:22:49.593> 16355 4
20:22:50.093> 425 2
20:22:50.593> 17263 4
20:22:51.156> 1334 3
20:22:51.656> 18172 1
20:22:52.156> 2242 3
20:22:52.656> 19081 2
20:22:53.156> 3151 4
20:22:53.656> 19989 2
20:22:54.156> 4059 4
20:22:54.656> 20898 3
20:22:55.156> 4968 1
20:22:55.656> 21806 3
20:22:56.156> 5877 2
20:22:56.656> 22715 4
20:22:57.156> 6785 2
20:22:57.656> 23624 1
20:22:58.156> 7694 3
20:22:58.656> 24532 1
20:22:59.156> 8603 4
20:22:59.656> 25441 2
20:23:00.218> 9511 4
20:23:00.718> 26349 2
20:23:01.218> 10420 1
20:23:01.718> 27258 3
20:23:02.218> 11328 1
20:23:02.718> 28167 4
20:23:03.218> 12237 2
20:23:03.718> 29075 4
20:23:04.218> 13146 3
20:23:04.718> 29984 1
20:23:05.218> 14054 3
20:23:05.718> 30893 2
20:23:06.218> 14963 4
20:23:06.718> 31801 2
20:23:07.218> 15871 4
20:23:07.718> 32710 3
20:23:08.218> 16780 1
20:23:08.718> 850 3
20:23:09.281> 17689 2
20:23:09.781> 1759 4
20:23:10.281> 18597 2
20:23:10.781> 2668 1
20:23:11.281> 19506 3
20:23:11.781> 3576 1
20:23:12.281> 20415 4
20:23:12.781> 4485 2
20:23:13.281> 21323 4
20:23:13.781> 5393 2
20:23:14.281> 22232 1
20:23:14.781> 6302 3
20:23:15.281> 23140 1
20:23:15.781> 7211 4
20:23:16.281> 24049 2
20:23:16.781> 8119 4
20:23:17.281> 24958 3
20:23:17.843> 9028 1
20:23:18.343> 25866 3
20:23:18.843> 9936 1
20:23:19.343> 26775 4
20:23:19.843> 10845 2
20:23:20.343> 27683 4
20:23:20.843> 11754 3
20:23:21.343> 28592 1
20:23:21.843> 12662 3
20:23:22.343> 29501 2


est-ce suffisament aleatoire ?
Aide toi, le ciel ou FantasPic t'aidera

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

#19 Message par Jérémy » lun. 25 juil. 2016 20:37

Oh la vache c'est super ca !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#20 Message par venom » lun. 25 juil. 2016 21:18

J'avais bien vue avant de poster les fonctions Rand et srand, mais je n'ai jamais réussi à les faire aller. Il faut une lib externe c'est ça ?






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


Retourner vers « Langage C »

Qui est en ligne

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