arduino,avr

주사위led 연습문제

ds97l 2022. 2. 23. 18:11

1~6 주사위를 led로 랜덤하게 출력

 

arduino

int bPin=2;
int bState = LOW;
void setup()
{
  pinMode(bPin, INPUT);
  pinMode(12, OUTPUT);
   pinMode(11, OUTPUT);
   pinMode(10, OUTPUT);
  
  //수학함수 random() 난수 발생함수 이용하여 주사위의 눈 ( 1~6까지 생성)
  //random(1,7) => 1시작값이고 7은 마지막값으로 범위 지정된다. 7-1=6개 (1,2,3,4,5,6)
  randomSeed(analogRead(A0));
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(10,LOW);
  
}

void loop()
{
   bState = digitalRead(bPin);
  // 1 -> 001, 2 -> 010 3 -> 011 4 -> 100 5 -> 101 6 -> 110
  if(bState ==HIGH) {long ran = random(1,7);
                     
  if(ran==1) digitalWrite(10,HIGH);
  if(ran==2) digitalWrite(11,HIGH);
  if(ran==3) {digitalWrite(10,HIGH); digitalWrite(11,HIGH); } 
  if(ran==4) digitalWrite(12,HIGH);
  if(ran==5) {digitalWrite(12,HIGH);digitalWrite(10,HIGH);}
  if(ran==2) {digitalWrite(12,HIGH);digitalWrite(11,HIGH);}
  delay(3000);
               
   digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(10,LOW);
                     
                    }
}

 

avr

#include <avr/io.h>
#define F_CPU 16000000UL
#include "util/delay.h"

int main(void)
{              
    DDRD = 0x00;  // (PD2)입력설정    
    DDRB = 0xFF;  // (PB4)출력설정
    
    int ran; //의사난수 발생 arduino처럼 하려면 sran으로 따로 기준점 지정이 필요(추후 레지스터 참고하여 추가)
    while(1)
    { 
        if((PIND&0x04) != 0)
        {
          ran=rand()%7;
          PORTB = ran << 2;
        }

        _delay_ms(1000);
        PORTB = 0x00;

    }
}