본문으로 바로가기

교육 기록 남기기 - 1

category 아두이노 2014. 11. 20. 11:31

아두이노 기초 프로그래밍


1. http://artrobot.co.kr/

2. tx ,rx : 시리얼 통신시 확인 red

3. digital 은 디지털 입력/출력/아날로그 출력 역활

4. pwm 출력 : 아날로그 출력

5. BreadBoard


연습문제2

핀 5~12번


푸쉬 버튼과 LED 응용 -1

//내가 작성한 코드

int ledPin =  12;

int switchPin = 7;

int ledState = LOW;

int swState = LOW;


void setup ()

{

 pinMode(12,OUTPUT);

 pinMode(7,INPUT_PULLUP);

}

void loop ()

{

 swState = digitalRead(switchPin);

 if(swState == HIGH) {

    if(ledState == HIGH){

      digitalWrite(ledPin, HIGH);

    }

    else

    {

      digitalWrite(ledPin, LOW);

    }

 }

 else

 {

   if(ledState == LOW){

     ledState = HIGH;

   }

   else

   {

     ledState = LOW;

   }

 }


}


내껀 잘 안돌아 간다…


//본래 실습 내용

int swState = LOW;

int ledState = LOW;


void setup ()

{

 pinMode(12,OUTPUT);

 pinMode(7,INPUT_PULLUP);

}

void loop ()

{

 if(digitalRead(7) == LOW && swState == LOW) {

   swState = HIGH;

 }

 else if(digitalRead(7) == HIGH && swState == HIGH)

 {

   swState = LOW;

   ledState = !ledState;

 }

 

 if(ledState == HIGH) {

   digitalWrite(12,HIGH);

 }

 else if(ledState ==  LOW)

 {

   digitalWrite(12,LOW);

 }

}

여기서 문제!

스위치를 누를 경우 실제로 붙었다 떨어졌다 하고 있음..

해결 방안!

0.1uf 의 콘덴서(전류를 저장하는 역할,커패시터[갈색])를 스위치 연결에 붙여준다..

IMG_1008.JPG


푸쉬 버튼과 LED 응용 - II

LED가 꺼진 상태에서 버튼을 누르면 LED가 2초 간격으로 점멸한다. 버튼을 한번 더 누르면 LED가 꺼진 상태로 된다.

//본래 실습 내용

int swState = LOW;

int ledState = LOW;


void setup ()

{

 pinMode(12,OUTPUT);

 pinMode(7,INPUT_PULLUP);

}

void loop ()

{

 if(digitalRead(7) == LOW && swState == LOW) {

   swState = HIGH;

 }

 else if(digitalRead(7) == HIGH && swState == HIGH)

 {

   swState = LOW;

   ledState = !ledState;

 }

 

 if(ledState == HIGH) {

   digitalWrite(12,HIGH);

   delay(500);

   digitalWrite(12,LOW);

   delay(500);

 }

 else if(ledState ==  LOW)

 {

   digitalWrite(12,LOW);

 }

}


//개선 사항

//본래 실습 내용

int swState = LOW;

int ledState = LOW;

int ledFlag = LOW;

unsigned long preMillis = 0;

int deltaTime = 500;


void setup ()

{

 pinMode(12,OUTPUT);

 pinMode(7,INPUT_PULLUP);

}

void loop ()

{

   unsigned long current = millis();

   unsigned long delta = current - preMillis;

   

 if(digitalRead(7) == LOW && swState == LOW) {

   swState = HIGH;

 }

 else if(digitalRead(7) == HIGH && swState == HIGH)

 {

   swState = LOW;

   ledState = !ledState;

 }

 

 if(ledState == HIGH) {

   if(delta >= deltaTime) {

     digitalWrite(12,ledFlag);

     ledFlag = !ledFlag;

     preMillis = millis();

   }

 }

 else if(ledState ==  LOW)

 {

   digitalWrite(12,LOW);

 }

}


//개선 사항 MsTimer2 라이브러리 활용

#include <MsTimer2.h>


int swState = LOW;

int ledState = LOW;

int ledFlag = LOW;


void flash()

{

 if(ledState == HIGH) {

   digitalWrite(12,ledFlag);

   ledFlag = !ledFlag;

 }

 else if (ledState == LOW) {

     digitalWrite(12,LOW);

 }

}

void setup ()

{

 pinMode(12,OUTPUT);

 pinMode(7,INPUT_PULLUP);

 MsTimer2::set(500,flash);  

 MsTimer2::start();

}

void loop ()

{

 if(digitalRead(7) == LOW && swState == LOW) {

   swState = HIGH;

 }

 else if(digitalRead(7) == HIGH && swState == HIGH)

 {

   swState = LOW;

   ledState = !ledState;

 }

}


'아두이노' 카테고리의 다른 글

프로젝트 - SmartWatch  (0) 2014.11.20
교육 기록 남기기 - 4  (0) 2014.11.20
교육 기록 남기기 - 3  (0) 2014.11.20
교육 기록 남기기 - 2  (0) 2014.11.20