아두이노 랜덤 LED - adu-ino laendeom LED

제가 가지고 있는 키트는 Sparkfun Inventor's Kit 이고 UNO Rev3가 들어있습니다.

두번째 예제까지 따라했는데 급 재미없어져가지고

랜덤으로 지랄을 하게끔 만들었습니다.

가끔 랜덤숫자 두개가 겹칠때가 있어서 안겹치게 처리하는 코드를 추가했습니다. ㅎㅎ

랜덤함수가 시작과 끝을 지정할수 있어서 정말 쉽고 좋습니다. ㅋㅋ

int ledPins[]={9,8,7,6,5,4,3,2};

void setup() {
  for(int i=0;i<8;i++)
    pinMode(ledPins[i],OUTPUT);
}

void loop() {
  int rand=random(8);
  int rand2=random(7);
  if(rand==rand2) rand2=(rand2+1)%8;
  
  digitalWrite(ledPins[rand],HIGH);
  delay(50);
  digitalWrite(ledPins[rand2],HIGH);
  delay(50);
  digitalWrite(ledPins[rand],LOW);
  delay(50);
  digitalWrite(ledPins[rand2],LOW);
  delay(50);
}

아두이노 랜덤 LED - adu-ino laendeom LED

1. 빵판과 LED, 저항

2. 전선을 2번부터 9번까지 꼽았습니다.

3. 5V와 GND에 연결, 왜 검은선을 안주지...

4. 다 꼽은 모습

BASIC4MCU | 질문게시판 | 아두이노 for문에 random함수 가능한지 질문입니다!

페이지 정보

작성자 호식이 작성일2020-12-30 01:18 조회15,616회 댓글3건

  • 이전글
  • 다음글
  • 목록
  • 글쓰기

본문

	

단순히 random함수는 작동이 되는데 반복문에서는 랜덤이 깨집니다. 

저는 반복문안에서 램덤하게 빛이 들어올 줄 알았는데 아니더라구요..ㅜㅠ

led 2,4번이 켜진 후 led가 10번 램덤하게 2개씩 빛이나게끔 loop로 코드 짠것입니다.

random함수가 안깨지면서 반복할 수 있는 방법이 있을까요? 

감사합니다.

int ledPins[]={2,3,4,5,6,7,9,10,11,12,13};

int i;

void setup() {

  for(int i=0;i<11;i++)

    pinMode(ledPins[i],OUTPUT);

}

void loop() {

  int rand=random(11);

  int rand2=random(7);

  digitalWrite(2, HIGH);

  digitalWrite(4, HIGH);

  delay(1000);

  digitalWrite(2, LOW);

  digitalWrite(4, LOW);

  delay(1000);

  for(int i=0;i<10;i++){

  if(rand==rand2) rand2=(rand2+1)%8;

  digitalWrite(ledPins[rand],HIGH);

  delay(100);

  digitalWrite(ledPins[rand2],HIGH);

  delay(100);

  digitalWrite(ledPins[rand],LOW);

  delay(100);

  digitalWrite(ledPins[rand2],LOW);

  delay(100);}

}

master님의 댓글

master 작성일 20-12-30 15:06

int ledPins[]={2,3,4,5,6,7,9,10,11,12,13};
int i;
//
void setup() {
  for(int i=0;i<11;i++)pinMode(ledPins[i],OUTPUT);
}
//
void loop() {
  digitalWrite(2,1); digitalWrite(4,1); delay(1000);
  digitalWrite(2,0); digitalWrite(4,0); delay(1000);
  //
  int rand=random(11);
  int rand2=random(7);
  if(rand==rand2)rand2=(rand2+1)%8;
  //
  for(int i=0;i<10;i++){
    digitalWrite(ledPins[rand],1); digitalWrite(ledPins[rand2],1); delay(100);
    digitalWrite(ledPins[rand],0); digitalWrite(ledPins[rand2],0); delay(100);
  }
}
랜덤 변수가 변경될 이유는 안보입니다.

호식이님의 댓글

호식이
아두이노 랜덤 LED - adu-ino laendeom LED
작성일 20-12-30 15:46

제가 질문을 자세하게 못했네요 죄송합니다
 for문 안에 10번이 작동하는 동안 동일한 led가(ex, led2, led4)10번이 작동이 되서 문제였습니다.
 for문안에서 10번이 작동되는 횟수만큼 led변화도 10번만큼 대응되게 주고 싶었습니다.

master님의 댓글

master 작성일 20-12-30 17:19

for(int i=0;i<10;i++){
    int rand=random(11);
    int rand2=random(7);
    if(rand==rand2)rand2=(rand2+1)%8;
    digitalWrite(ledPins[rand],1); digitalWrite(ledPins[rand2],1); delay(100);
    digitalWrite(ledPins[rand],0); digitalWrite(ledPins[rand2],0); delay(100);
  }
}
반복문 안에서 랜덤 변수를 얻으면 됩니다.

  • 이전글
  • 다음글
  • 목록
  • 글쓰기