BASIC4MCU | 질문게시판 | 아두이노 랜덤 스위치 관련 질문있습니다 ㅠㅠ
페이지 정보
작성자 호두댕댕 작성일2021-04-12 09:44 조회3,270회 댓글1건본문
지금 스위치 다섯개중 하나만 led의 불을 켤 수 있고 10초 후에는 다시 led를 켤 수 있는 스위치를 랜덤하게 다시 바꾸는 것을 짜고 싶습니다.
그런데 랜덤 숫자를 받아 10초동안 led를 켤 수 있게끔하는 과정이랑 10초후에 넘어가는게 쉽지가 않네요 ㅠㅠㅠ 숫자를 받고 10초간 유지하면서 동시에 버튼 입력 받게 하는게 잘 되지 않는것 같습니다 ㅠㅠㅠ 제발 도와주세요
코드는 이렇게 해두었습니다.
int led=13;
int switch1=2;
int switch1state=0;
int switch2=3;
int switch2state=0;
int switch3=4;
int switch3state=0;
int switch4=5;
int switch4state=0;
int switch5=6;
int switch5state=0;
unsigned long previousMillis = 0;
const long interval = 10000;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(switch1, INPUT);
pinMode(switch2, INPUT);
pinMode(switch3, INPUT);
pinMode(switch4, INPUT);
pinMode(switch5, INPUT);
}
void loop()
{
switch1state=digitalRead(switch1);
switch2state=digitalRead(switch2);
switch3state=digitalRead(switch3);
switch4state=digitalRead(switch4);
switch5state=digitalRead(switch5);
unsigned long currentMillis = millis();
int r=random(1,5);
Serial.println(r);
while(millis() - currentMillis >= interval)
{
currentMillis=millis();
if(switch1state==HIGH)
{
if(r==1)
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
}
}
if(switch2state==HIGH)
{
if(r==2)
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
}
}
if(switch3state==HIGH)
{
if(r==3)
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
}
}
if(switch4state==HIGH)
{
if(r==4)
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
}
}
if(switch5state==HIGH)
{
if(r==5)
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
}
}
}
}
댓글 1
조회수 3,270master님의 댓글
master 작성일
int led=13;
int sw[5]={2,3,4,5,6};
int stat,r=7,led=0;
unsigned long t=0,t1=0,t2;
//
void setup(){
Serial.begin(9600);
pinMode(13,OUTPUT);
t1=millis();
}
//
void loop(){
t=millis();
//
stat=6; // 스위치를 읽기전, 스위치 값과 상관없는 값으로 초기화
for(int i=0;i<5;i++){
if(digitalRead(sw[i]){ // 스위치를 누르면
stat=i; // 해당 스위치 값을 저장
r=random(1,5); Serial.println(r); // 새로운 랜덤값을 받음
t1=t; // 시간도 새로 저장
}
}
//
if(r==stat){ // 랜덤값과 스위치누른 것이 같다면
t2=t-t1;
if(t2<1000)digitalWrite(13,1);
else if(t2<2000)digitalWrite(13,0);
else if(t2<3000)digitalWrite(13,1);
else if(t2<4000)digitalWrite(13,0);
else if(t2<5000)digitalWrite(13,1);
else if(t2<6000)digitalWrite(13,0);
else if(t2<7000)digitalWrite(13,1);
else if(t2<8000)digitalWrite(13,0);
else if(t2<9000)digitalWrite(13,1);
else digitalWrite(13,0);
}
}