Witam, jestem w trakcie robienia projektu i jestem a takim etapie ze chcę zeby po kolei włanczala się (i zaraz pozniej wylanczala) losowo jedna z dwoch diod, czasy miedzy kolejnymi zapaleniami się diod też są losowe (1, 2,3 lub 4 sekuncy). Korzystam z funcjki rand i srand. O to mój kod
Obsługa przycisku napewno działa poprawnie, niestety problem jest albo w złym wykorzystaniu funkcji losujących albo coś namotałem z tymi pętlami.
Za wszelką pomoc z góry dziękuje
Cytat:
//#include <time.h>
#include "char_code.h"
#include "LCD_lib.h"
#include "twi.h"
#include "rtc_lib.h"
#include <util/delay.h>
uint8_t zmienna = 0;
uint8_t i;
uint8_t j;
uint8_t k;
char zmienna2[5];
uint8_t flaga = 0;
int czasy[9];
int diody[9];
int ttemp;
int ttemp2;
int main(void)
{
//wejscie, wlancza
DDRA &= ~_BV(PA1);
//PORTA &= ~_BV(1);
//wyjscie, diodka kontrolna
DDRA |= _BV(PA2);
PORTA |= _BV(PA2);
////////
DDRD |= _BV(PD6);
DDRD |= _BV(PD7);
PORTD |= _BV(PD6);
PORTD |= _BV(PD7);
while(1) {
if(bit_is_clear(PINA, PA1)) { //PC2
PORTA &= ~_BV(PA2);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTA |= _BV(PA2);
//srand(get_seconds);
srand(10);
for(i=0;i<10;i++) { //losuje czasy odstepow
ttemp = rand();
czasy[i] = ttemp%4;
srand(ttemp);
}
for(j=0;j<10;j++) {
ttemp2 = rand();
diody[j] = ttemp2%2;
srand(ttemp2);
}
for(k=0;k<10;k++) {
switch(czasy[k]) {
case '0' :
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
break;
case '1' :
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
break;
case '2' :
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
break;
case '3' :
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
break;
default :
_delay_ms(250);
}
switch(diody[k]) {
case '0' :
PORTD &= ~_BV(PD6);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTD |= _BV(PD6);
break;
case '1' :
PORTD &= ~_BV(PD7);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTD |= _BV(PD7);
break;
default :
PORTD &= ~_BV(PD7);
PORTD &= ~_BV(PD6);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
PORTD |= _BV(PD6);
PORTD |= _BV(PD7);
}
}
}
}
return 0;
}
Obsługa przycisku napewno działa poprawnie, niestety problem jest albo w złym wykorzystaniu funkcji losujących albo coś namotałem z tymi pętlami.
Za wszelką pomoc z góry dziękuje