5월, 2017의 게시물 표시

인터럽트

인터럽트 -loop()문이 반복적으로 동작 되고 있는 도중, 일시 중단하고 다른일을 처리하는 기능 -아두이노에서 사용가능한 인터럽트 타이머 인터럽ㅌ, 욉 인터럽트, 시리얼통신 인터럽트 등 혹은 라이브러리 추가시 스케치->라이브러리 포함하기->라이브러리 관리 에서 다운로드 MsTimer2 library 인터럽트 설정 MsTimer2::set(unsigned long ms, void(*f)()) ms: 인터럽트 시간, 밀리초 void(*f)() : 인터럽트 분기 함수명 인터럽트 시작 MsTimer2::start() 인터럽트 정지 MsTimer2::stop() 예제 #include<MsTimer2.h>   /*외부 라이브러리를 불러온다*/ int swState = LOW; int ledState = LOW; int ledFlag = HIGH; void setup(){   pinMode(7,INPUT_PULLUP);   pinMode(12,OUTPUT);   MsTimer2::set(500,flash);   /*500msec 주기로 flash 함수로 갔다온다*/   MsTimer2::start(); } void flash(){   /*인터럽트 분기함수*/   if(ledState ==HIGH){     digitalWrite(12,ledFlag);     ledFlag = !ledFlag;   }else if(ledState ==LOW){     digitalWrite(12,LOW);   } } void loop(){   if(digitalRead(7) == LOW && swState == LOW){ ...

전자 카운터 만들기

int count = 0; void setup(){   pinMode(7, INPUT_PULLUP);   pinMode(12, OUTPUT);   Serial.begin(9600); } void loop(){   int swState = digitalRead(7);   if(swState == LOW){     digitalWrite(12, HIGH);     count++;   }else{     digitalWrite(12, LOW);   }   Serial.println(count); } count를 0으로 설정하고 위와 같이 7,12 를 설정한다 이때 serial 통신을 위하여 void setup에 선언을 해주고 loop문에서 swState 값을 7번 핀에서 읽어 온다. 만약 swState가 LOW라면 불이 들어오고 count에 +1씩 숫자를 더해라 그렇지 않으면 그냥 불을 꺼라 라고 명령을 주고 통신을 보게 되면 1ms 마다 숫자가 올라가는 것을 볼 수 있다. 이러한 현상을 Bouncing 현상이라고 한다. 해결방법은 디 바운싱을 걸어주면 되는데, int swState = LOW; int lastSwState = LOW; int ledState = LOW; int count = 0;/*기본 선언*/ void setup(){   pinMode(7,INPUT_PULLUP);   pinMode(12,OUTPUT);   digitalWrite(12,ledState);/*핀모드 설정과 12번을 ledState로 설정*/   Serial.begin(9600); } void loop(){   swState = digitalRead(7);/*스위치의 상태는...

led응용

int swState = LOW; int ledState = LOW; void setup(){   pinMode(7, INPUT_PULLUP);   pinMode(12,OUTPUT); } 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);   } } 스위치와 led의 상태를 LOW로 정의한다. 이후 pinMode를 셋업한다. loop문에서 7번핀의 상태와 스위치의 상태를 본다면, 7번의 상태는 LOW이고 스위치의 상태도 LOW이다. 그래서 처음의 조건을 만족시키는데 이때는 swState를 HIGH로 만들어 주는 것이다. 그다음 if문을 보게 된다면 ledState를 확인할 수 있는데 만약 ledSteate가 HIGH라면 12번 핀 즉 led에 들어가는 전원을 HIGH값으로 보내는 것 이다.(그래야 불이 들어온다) 그렇게 되면 led의 불은 계속 들어와 있는 상태가 되는데, 이때 한번 더 누르게 되면, 첫번째 if문에서 첫번째 줄의 조건을 만족할 수 없다. 그래서 else if 문으로 들어가게 되는데 이때의 7번핀의 값과 swState는 불이 들어와 있는 상태이기 때문에 HIGH값이다. 그다음 i...

PULLDOWN 예제

int ledPin = 12; int switchPin = 7; void setup(){   pinMode(ledPin, OUTPUT);   pinMode(switchPin, INPUT_PULLUP);  }  void loop(){ int swState = digitalRead(switchPin); if(swState == HIGH){   digitalWrite(ledPin, LOW); }else{   digitalWrite(ledPin, HIGH); }  } 12번 핀과 7번 핀을 int (integer : 자연수)로 지정해준다 이후 void setup을 통해 각각의 핀모드를 설정해준다. loop문에서 swState를 switchPin에서 읽어오는 값 즉, PULLUP으로 설정된 7번핀에서 읽어오는 값 이므로 회로가 오픈된 상태가 HIGH상태(1)이고 이때 값을 swState라 한다. if문을 이용하여 HIGH값에는 led출력을 LOW로 두고 LOW값에는 led의 출력을 HIGH로 두어 버튼을 누를때 마다 불이 들어오게 하는 것 이다.

시리얼 통신, if, int, Floating, Pull-Down, Pull-Up

void setup () {   pinMode(7, INPUT);   pinMode(9, OUTPUT); } void loop(){   int swState = digitalRead(7);   if(swState == HIGH){     digitalWrite(9, HIGH);    }else{     digitalWrite(9, LOW);    } } Serial 통신이란 아두이노와 대화 하는것 시리얼 모니터를 통해서 상태를 확인 가능하고 loop문 안에 print를 해주면 되는데 뒤에 ln은 라인을 바꾸는 명령이다. if 조건문은 소괄호() 안에 조건을 넣어준다. 그 뒤 만약 소괄호 안에 조건을 만족하면 중괄호 안의 동작을 취하라는 명령이며 그 다음 else는 만약 소괄호 안에 있는 조건이 아니라면 다음과 같은 동작을 취하라는 뜻이다. 스케치를 재확인 해봐도 잘못된게 없다면, 플로팅(Floating) 상태일 가능성이 크다 Floating(플로팅) 상태 = 아무것도 연결하지 않은 상태 해결방법 풀다운(Pull-Down) or 풀업(Pull-Up) 1. 풀다운 저항 풀다운이란 스위치를 On으로 했을때 디지털 회로의 값이 1 이라면 스위치를 Off로 했을때 회로값이 0이 되게 하는 저항이다. 2, 풀업 저항 풀업이란 스위치를 Off로 했을때 디지털 회로의 값이 0이라면 스위치를 On으로  했을때 회로값이 1이 되게 하는 저항이다.

스케치의 구조

아날로그 -어떤 양 또는 데이터를 연속적으로 변환하는 물리량(전압,전류 등)으로 표현 -아날로그 신호는 전류의 주파수나 진폭 등 연속적으로 변화하는 형태로 전류를 전달 디지털 -어떤 양 또는 데이터를 2진수로 표현 -디지털 신호는 전류가 흐르는 상태(1)와 흐르지 않는 상태(0)의 2가지 조합으로 전달 전역변수 void setup() {코드 실행 시, 최초 한번만 실행} void loop() {무한반복} 프로그램 업로드 완료 --> setup() --> loop() 모든 문자들은 대/소 문자를 구분한다. pinMode(pin, mode) pin L 핀 번호 Mode : INPUT, OUTPUT, INPUT_PULLUP 핀 번호와 핀의 용도를 설정한다. 핀을 사용하기 전에는 반드시 핀 모들르 설정해야 한다. digitalWrite(pin, value) Pin : 핀 번호 Mode : HIGH, LOW 출력 모드로 설정된 핀에 디지털 값을 출력한다. delay(ms) ms : 밀리세컨드