아두이노 기초 프로그래밍
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 의 콘덴서(전류를 저장하는 역할,커패시터[갈색])를 스위치 연결에 붙여준다..
푸쉬 버튼과 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 |