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 ---
- 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 ---
Modérateur : Jérémy
simon says
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 :
J'essaie de comprendre le code mais c'est pas simple.
@++
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=0; j<20; j++)
for(i=0; i<4; i++)
{
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=0; j<2; j++)
for(i=0; i<4; i++)
{
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=0; PatternPointer<PATTERN_SIZE; PatternPointer++)
{
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=0; i<PatternPointer; i++)
{
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 a, char b, char c, char d)
{
int InputNumber=0;
if(a || b || c || 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=0; i<4; i++)
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.
@++
simon says
simon says
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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
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
simon says
simon says
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
simon says
simon says
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
un petit test, pour VOIR !
ce qui donne :
est-ce suffisament aleatoire ?
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=(k %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 ?
simon says
simon says
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 ?
@++
@++
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 49 invités