본문으로 바로가기

교육 기록 남기기 - 2

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

외부 인터럽트 사용하기


boolean LEDStatus = LOW;


void setup()

{

 pinMode(12, OUTPUT);

 pinMode(2,INPUT_PULLUP);

 attachInterrupt(0,interrupt,FALLING);

 digitalWrite(12,LOW);

}


void interrupt()

{

 LEDStatus = !LEDStatus;

 digitalWrite(12,LEDStatus);

}


void loop()

{

 

}


-------------------------------

FND 사용하기

unsigned fndOnFlag = LOW;


void setup()

{

 //6~13 PINT OUT

 for(int i =6; i<=13 ; i++)

 {

   pinMode(i,OUTPUT);

 }

}


void loop()

{

 fndOnFlag = !fndOnFlag;

 for(int i = 6; i <= 13; i++)

 {

   digitalWrite(i,fndOnFlag);

 }

 delay(500);

}

------------------------------------

FND 숫자 표시(사진)


int arrNum[10][10] = {

 {0,0,0,0,0,0,1},

 {1,0,0,1,1,1,1},

 {0,0,1,0,0,1,0},

 {0,0,0,0,1,1,0},

 {1,0,0,1,1,0,0},

 {0,1,0,0,1,0,0},

 {0,1,0,0,0,0,0},

 {0,0,0,1,1,1,1},

 {0,0,0,0,0,0,0},

 {0,0,0,0,1,0,0}

};

unsigned int count = 0;

boolean dpFlag = LOW;

void setup()

{

 //6~13 PINT OUT

 for(int i =6; i<=13 ; i++)

 {

   pinMode(i,OUTPUT);

 }

}


void loop()

{

 setFndNum(count++);

 if(count == 10) count = 0;

 digitalWrite(13,dpFlag);

 dpFlag = !dpFlag;

 delay(10

00);

}


void setFndNum(int num){

 for(int i = 6; i <= 13; i++){

   digitalWrite(i,arrNum[num][i-6]);

 }

}

----------------------------

FND 스탑 워치

1. 내가 한 방식

#include<MsTimer2.h>

int arrNum[10][10] = {

 {0,0,0,0,0,0,1},

 {1,0,0,1,1,1,1},

 {0,0,1,0,0,1,0},

 {0,0,0,0,1,1,0},

 {1,0,0,1,1,0,0},

 {0,1,0,0,1,0,0},

 {0,1,0,0,0,0,0},

 {0,0,0,1,1,1,1},

 {0,0,0,0,0,0,0},

 {0,0,0,0,1,0,0}

};

unsigned int count = 0;

boolean dpFlag = LOW;

boolean stopFlag = LOW;

boolean swStatus = LOW;

void setup()

{

 //5 PIN SWICH

 pinMode(5,INPUT_PULLUP);

 //6~13 PINT OUT

 for(int i =6; i<=13 ; i++)

 {

   pinMode(i,OUTPUT);

 }

 swStatus = HIGH;

 MsTimer2::set(10,swSet);

 MsTimer2::start();

}


void swSet()

{

 if(stopFlag == LOW){

   setFndNum(count++);

   if(count == 10) count = 0;

   digitalWrite(13,dpFlag);

   dpFlag = !dpFlag;

   delay(0.1);

 }

}


void loop()

{

   if(digitalRead(5) == LOW && swStatus == LOW){

     swStatus = HIGH;

   }

   else if(digitalRead(5) == HIGH && swStatus == HIGH)

   {

     swStatus = LOW;

     stopFlag = !stopFlag;

   }

}


void setFndNum(int num){

 for(int i = 6; i <= 13; i++){

   digitalWrite(i,arrNum[num][i-6]);

 }

}

2. 정답 코드

int arrNum[10][10] = {

 {0,0,0,0,0,0,1},

 {1,0,0,1,1,1,1},

 {0,0,1,0,0,1,0},

 {0,0,0,0,1,1,0},

 {1,0,0,1,1,0,0},

 {0,1,0,0,1,0,0},

 {0,1,0,0,0,0,0},

 {0,0,0,1,1,1,1},

 {0,0,0,0,0,0,0},

 {0,0,0,0,1,0,0}

};

unsigned int count = 0;

boolean dpFlag = LOW;

boolean stopFlag = LOW;

boolean swStatus = LOW;

void setup()

{

 //5 PIN SWICH

 pinMode(5,INPUT_PULLUP);

 //6~13 PINT OUT

 for(int i =6; i<=13 ; i++)

 {

   pinMode(i,OUTPUT);

 }

}


void loop()

{

   if(digitalRead(5) == LOW && swStatus == LOW){

     swStatus = HIGH;

   }

   else if(digitalRead(5) == HIGH && swStatus == HIGH)

   {

     swStatus = LOW;

     stopFlag = !stopFlag;

   }

   

   if(stopFlag == LOW) {

     setFndNum(count++);

     if(count > 6) count =1;    //카운터가 6이하만 나오도록 유도

     delay(10);

   }

}


void setFndNum(int num){

 for(int i = 6; i <= 13; i++){

   digitalWrite(i,arrNum[num][i-6]);

 }

}


//Serial 통신으로 제어하는 LED

int incomingByte = 0;


void setup() {

 pinMode(10,OUTPUT);

 pinMode(11,OUTPUT);

 pinMode(12,OUTPUT);

 Serial.begin(9600);

}


void loop() {

 

}


void serialEvent(){

 incomingByte = Serial.read();

   Serial.println(incomingByte);

   

   if(incomingByte == '1'){

     digitalWrite(10,HIGH);

   } else if (incomingByte == '0') {

     digitalWrite(10,LOW);

   }

   else if(incomingByte == '3'){

     digitalWrite(11,HIGH);

   } else if (incomingByte == '2') {

     digitalWrite(11,LOW);

   }

   if(incomingByte == '5'){

     digitalWrite(12,HIGH);

   } else if (incomingByte == '4') {

     digitalWrite(12,LOW);

   }

}


// Arduino to Arduno 서로간의 통신(사진)

IMG_1010.JPG

#include <SoftwareSerial.h>


//SoftwareSearial (RXD PIN, TXD PIN)

SoftwareSerial softSerial(2,3);


void setup() {

 Serial.begin(9600);

 softSerial.begin(9600);

}


void loop() {

if(softSerial.available()){

  Serial.write(softSerial.read());    //아두이노에서 받은 데이터를 PC 전송

}

if(Serial.available()){

  softSerial.write(Serial.read());    //PC에서 받은 데이터를 아두이노로 전송

}

}



// Arduino to Arduno 서로간의 통신2 원격 으로 LED 켜기

//STX  LED1  LED2  LED3  ETX

// A    0     0     0     Z

//LED : 0 LED OFF, 1 LED ON

1. 내가 한 방식

#include<SoftwareSerial.h>


//SoftwareSearial (RXD PIN, TXD PIN)

SoftwareSerial softSerial(2,3);

char _data[5];

unsigned int count = 0;

void setup() {

 pinMode(10,OUTPUT);

 pinMode(11,OUTPUT);

 pinMode(12,OUTPUT);

 Serial.begin(9600);

 softSerial.begin(9600);

}


void loop() {

if(softSerial.available()){

  _data[count] =  softSerial.read();

  if(_data[0] == 'A'){

    count++;

  }

  

  if(count >4 ){

    count = 0;

    if(_data[4] == 'Z'){

        setLED(10,_data[1]);

        setLED(11,_data[2]);

        setLED(12,_data[3]);

    }

  }

}

if(Serial.available()){

  softSerial.write(Serial.read());

}

}


void setLED(int ledPin, char Status)

{

 if(Status == '0'){

    digitalWrite(ledPin,LOW);

 }

 else if(Status == '1'){

     digitalWrite(ledPin,HIGH);

 }

}


2. 정답

//STX  LED1  LED2  LED3  ETX

// A    0     0     0     Z

//LED : 0 LED OFF, 1 LED ON

#include<SoftwareSerial.h>


//SoftwareSearial (RXD PIN, TXD PIN)

SoftwareSerial softSerial(2,3);

char _data[5];

unsigned int count = 0;

void setup() {

 pinMode(10,OUTPUT);

 pinMode(11,OUTPUT);

 pinMode(12,OUTPUT);

 Serial.begin(9600);

 softSerial.begin(9600);

}


void loop() {

if(softSerial.available()){

  _data[count] =  softSerial.read();

  if(_data[0] == 'A'){

    count++;

  }

  if(count > 4 ){

    count = 0;

    _data[0] = 0;

    

    if(_data[4] == 'Z'){

        _data[4] = 0;

        digitalWrite(12,_data[1]-48);

        digitalWrite(11,_data[2]-48);

        digitalWrite(10,_data[3]-48);

    }

  }

}

if(Serial.available()){

  softSerial.write(Serial.read());

}

}


void setLED(int ledPin, char Status)

{

 if(Status == '0'){

    digitalWrite(ledPin,LOW);

 }

 else if(Status == '1'){

     digitalWrite(ledPin,HIGH);

 }

}


//아날로그 입력

int adcPin = A0;  // 내부적으로 A0 은 0임

void setup()

{

 Serial.begin(9600);

}


void loop()

{

 int adcData = analogRead(adcPin);

 Serial.println(adcData);

}


//아날로그 입력2 가변 저항 으용 실습(사진)

IMG_1011.JPG

int adcPin = A0;  //

void setup()

{

 Serial.begin(9600);

 for(int i=6 ; i <=13; i++)

 {

   pinMode(i,OUTPUT);

 }

}


void loop()

{

 int adcData = analogRead(adcPin);

 int ledData = (adcData/1023.0)*8;

 ledOn(ledData);

 Serial.println(ledData);

}


void ledOn(int data)

{

 for(int i=0;i<8;i++)

 {

   if(i<data) {

     digitalWrite(i+6,HIGH);

   }

   else{

     digitalWrite(i+6,LOW);

   }

 }

}


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

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