logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega16][c][avrstudio] losowość w programie

svensonie 22 Sty 2011 00:01 669 0
REKLAMA
  • #1 9039548
    svensonie
    Poziom 11  
    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

    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
  • REKLAMA
REKLAMA