Il gioco che vorrei fare è un classico quello dei led che si accendono in maniera casuale e i pulsanti che servono per verificare se hai memorizzato correttamente la sequenza.
Per prima cosa vorrei che si accendesse un led alla volta in maniera casuale tra quelli qui sopra proposti, si dovrebbero accendere 3 led in totale. Ho già provato a scrivere il codice più volte ma ottenendo scarsi risulati, perché inizialmente si accendono due o tre led più o meno bene e poi c'è la sequenza dei tre led che a me occorre. Ecco io vorrei chiedervi se questo problema iniziale è dovuto al codice che ho scritto.
Ecco di seguito il codice:
- Codice: Seleziona tutto
// PIC16F1829 Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// CONFIG1
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
// CONFIG2
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = OFF
#pragma config BORV = LO
#pragma config LVP = OFF
#include <stdlib.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000 //Definisco la frequenza di lavoro non quella del clock
int cont = 3;
int i; //Variabile per il numero casuale
int contLed = 0; int contPuls = 0; int controllo = 0; //Variabili contatori per i cicli
int led[] = {1,2,4}; //Vettore che imdica quale led deve lampeggiare
void delayMS(unsigned int count); //Funzione per il ritardo espressa in ms
void main(void) {
TRISA = 0b11111111; //Imposto i pin come INPUT = 1 o OUTPUT = 0
TRISB = 0b11111111;
TRISC = 0b11111000;
OSCCON = 0b01111010; //Clock interno impostato su 16MHZ
ANSELA = 0b00000000; //Imposto i pin come digitali
PORTC = 0b00000000;
delayMS(500);
while(1){ //Ciclo infinito dove si andrà a scrivere il programma
while(contLed < cont){ //Ciclo che memorizza i led acccesi in sequenza
i = rand() % 3;
PORTC = led[i];
delayMS(300);
PORTC = 0b00000000;
delayMS(300);
contLed = contLed + 1;
}
}
}
void delayMS(unsigned int count){
while(count-- !=0){
__delay_us(1000);
}
}
(Ho provato a usare anche srand(time(NULL)) includendo la libreria time.h però anche in questo caso i risultati non erano nei migliori).
Questa è solo una parte del mio programma se desiderate lo copio tutto e se desiderate altre informazioni chiedete pure.
Grazie mille in anticipo