<div><코드></div> <div>#define led 2</div> <div>#define button 13</div> <div>int val=0; //<span style="color:rgb(255,0,0);">변수 val은 digitalRead();의 결과를 저장한다.</span></div> <div>int state=0;</div> <div><br></div> <div>void setup(){</div> <div>pinMode(led,OUTPUT);</div> <div>pinMode(button,INPUT);</div> <div>}</div> <div><br></div> <div>void loop(){</div> <div>val=digitalRead(button); // digitalRead(button);의 값 저장</div> <div><br></div> <div>if(val == HIGH){ // if(digitalRead(buttin) == HIGH) 라면 {~}문장 실행해라. <strong>//한번 클릭했을 때</strong></div> <div>state= 1-state; // int state =0; 이므로 0=1-0; > 0=1; 이되는데 ['='의 의미는 내 뒤에 오는 결과를 앞의 변수에 대입하라는 뜻이므로 ]state값은 1이된다. </div> <div><br></div> <div><strong>//버튼을 한번 더 클릭하면</strong> 처음 클릭으로 인해 state값은 1이므로 1=1-1 > 1=0 > state 값은 0이 된다. > 따라서 버튼을 한번더 클릭하면 led는 LOW상태가 된다. </div> <div><span style="color:rgb(255,0,0);">//**state에는 0과 1의 값만 들어갈 수 있다.</span></div> <div>}</div> <div><br></div> <div>if(state ==1){</div> <div>digitalWrite(led,HIGH);</div> <div>}else{</div> <div>digitalWrite(led,LOW);</div> <div>}</div> <div>}</div> <div><br></div> <div><u><span style="color:rgb(207,204,162);"><u> </u></span><span style="color:rgb(255,232,232);"><u><span style="color:rgb(81,143,187);"><u> </u></span><span style="color:rgb(81,143,187);"><u> </u></span></u></span></u></div> <div><u><span style="color:rgb(255,232,232);"><u><span style="color:rgb(81,143,187);"><u></u></span></u></span></u></div> <div><span style="color:rgb(255,232,232);"><span style="color:rgb(81,143,187);">이렇게 하면 버튼을 누를때 마다 정확하게 on /off 가 되지 않는다. </span></span></div> <div><span style="color:rgb(255,232,232);"><span style="color:rgb(81,143,187);">버튼이 눌러진 그 순간을 정확히 감지하여 on /off 상태로 되게 해야한다.</span></span></div> <div><span style="color:rgb(255,232,232);"><span style="color:rgb(81,143,187);"></span></span></div> <div><span style="color:rgb(81,143,187);">>int old_val; (이전 val값)을 넣어 현재 버튼(val)값과 이전 버튼(old_val)값을 비교하자. </span></div> <div><span style="color:rgb(81,143,187);">버튼이 LOW에서 HIGH (버튼을 누른후 손을 떼었다가[LOW]</span><strong><span style="color:rgb(81,143,187);"> 다시 눌렀을 때[HIGH])</span></strong><span style="color:rgb(81,143,187);">가 되었을 때 LED값이 변하게 해야한다.</span></div> <div><span style="color:rgb(81,143,187);"></span></div> <div><span style="color:rgb(81,143,187);"></span><span style="color:rgb(81,143,187);"> <font color="#cfcca2"><u> </u></font><u><span style="color:rgb(81,143,187);"><u><span style="color:rgb(255,232,232);"> </span></u><span style="color:rgb(255,232,232);"></span></span><span style="color:rgb(255,232,232);"><span style="color:rgb(81,143,187);"><u> </u></span></span></u></span></div> <div><span style="color:rgb(81,143,187);"><u><span style="color:rgb(255,232,232);"><span style="color:rgb(81,143,187);"><u></u></span></span></u></span></div> <div><span style="color:rgb(81,143,187);"><span style="color:rgb(255,232,232);"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255);"></span></span></span></div> <div><span style="color:rgb(0,0,0);background-color:rgb(255,255,255);"><코드2></span></div> <div><span style="color:rgb(0,0,0);background-color:rgb(255,255,255);">#define led 13</span></div> <div>#define button 2</div> <div>int val=0;</div> <div>int old_val=0; <span style="color:rgb(255,0,0);">//변수 val의 이전상태를 저장한다.</span></div> <div>int state=0;</div> <div><br></div> <div>void setup(){</div> <div>pinMode(led, OUTPUT);</div> <div>pinMode(button, INPUT);</div> <div>}</div> <div><br></div> <div>void loop(){</div> <div>val=digitalRead(button); // digitalRead(button);의 값 저장</div> <div>if(val==HIGH)&&(old_val==LOW){//이전에 버튼을 누르고 손뗌(LOW) 새로 버튼을 누름(HIGH)이라면 state문장 실행</div> <div>state=1-state; // state값 도출 </div> <div>delay(10); //10ms 대기 후 아래 if문 코드 실행 <span style="color:rgb(255,0,0);"> //변경을 감지한후 대기하는 시간을 넣으면 버튼을 완전히 누르지 않았을 때 나타나는 가짜신호인 바운싱을 방지할 수 있다. </span></div> <div>}</div> <div><br></div> <div>if(state==1){</div> <div>digitalWrite(led,HIGH);</div> <div>}else{</div> <div>digitalWrite(led,LOW);</div> <div>}</div> <div>}</div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra">-------------------------------------------------------------------------------------------------------------------------------</div> <div class="autosourcing-stub-extra">여기까지는 버튼 1개를 가지고 led전구 1개를 제어하는 코드인데요. </div> <div class="autosourcing-stub-extra">버튼을 누르면 켜졌다가 다시 누르면 꺼지는 코드입니다. </div> <div class="autosourcing-stub-extra">옆에 설명적어 놓은건 나중에 봐도 알아볼 수 있게 정리해서 이해한대로 적어 놓은거에요.</div> <div class="autosourcing-stub-extra">여기까지는 잘 됬고요. 이걸 응용해서 같은 효과를 버튼 2개와 led2개를 이용해서 해보려고 했습니다. </div> <div class="autosourcing-stub-extra">-------------------------------------------------------------------------------------------------------------------------------</div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra"> <table class="post-body" cellspacing="0" cellpadding="0"><tbody><tr><td class="bcl" nowrap></td> <td class="bcc"> <table class="post-top"><tbody><tr><td class="p12" valign="bottom"> <div class="clear blank5"> </div> <div class="post-sub ptr" style="display:none;"> <div><span class="pcol2"></span></div></div></td></tr></tbody></table><div> <div class="post-view pcol2 _param(1) _postViewArea220827285746"> <div>int led1=6;<br>int led2=7;<br>int key1=12;<br>int key2=13;<br>int val1=0;<br>int val2=0; //digitaRead(key2)값 저장</div> <div><br>int old_val1=0;<br>int old_val2=0; //이전의 digitaRead(key2)값 저장</div> <div></div> <div>int state1=0;<br>int state2=0;</div> <div><br></div> <div>void setup(){<br> pinMode(led1,OUTPUT);<br> pinMode(led2,OUTPUT);<br> pinMode(key1,INPUT);<br> pinMode(key2,INPUT);<br>}<br> <br>void loop(){<br> val1=digitalRead(key1);<br> val2=digitalRead(key2);<br> <br> if((val1==HIGH)&&(old_val1==LOW)){ //현재의 버튼값과 이전의 버튼값을 비교했을 때 값이 달라졌나? <br> state1=1-state1; //0=1-0 >1<br> delay(10);<br> }<br> if((val2==HIGH)&&(old_val2==LOW)){ <br> state2=1-state2; //0=1-0>1<br> delay(10);<br> }<br> </div> <div> <br> if(state1==HIGH){<br> digitalWrite(led1,HIGH);<br> }else{<br> digitalWrite(led1,LOW);<br> }<br> if(state2==HIGH){<br> digitalWrite(led2,HIGH);<br> }else{<br> digitalWrite(led2,LOW);<br> }<br>}</div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra">위에 적은 것 처럼 버튼 2개와led2개를 이용한 코드가 이건데요.</div> <div class="autosourcing-stub-extra">작동은 잘 됬는는데 코드중에서 잘 이해가 안가는 부분이 있어서요 </div> <div class="autosourcing-stub-extra"><br> if((val1==HIGH)&&(old_val1==LOW)){ //현재의 버튼값과 이전의 버튼값을 비교했을 때 값이 달라졌나? <br> state1=1-state1; //0=1-0 >1<br> delay(10);</div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra">이부분에서 state값이 원래 0이였는데 1로 변해서 </div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra"> if(<font>state1</font>==HIGH){ <<여기서 state1이 아니라 '1'이 들어가야된다고 생각했거든요 <br> digitalWrite(led1,HIGH);<br> }else{<br> digitalWrite(led1,LOW);<br> }</div> <div class="autosourcing-stub-extra"> </div> <div class="autosourcing-stub-extra">처음에는 1을 넣었는데 오류가 나서 state1로 바꿔 넣은건데 왜 1은 안되고 state1인지 잘 모르겠어요 ㅠㅠ</div> <div class="autosourcing-stub-extra">버튼 하나로 할때는 1이 맞았는데 왜 버튼 두개일때는 아닌가욤.... ㅠㅠ? </div> <div class="autosourcing-stub-extra">너무 길죠 ㅠㅠㅠ 죄송합니다. </div> <div class="autosourcing-stub-extra">너무 장황하게 써놔서 이해가 가실지 모르겠네요 ㅠㅠㅠ.... </div></div></div></td></tr></tbody></table></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.