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;
}
}