질문게시판 > 소스파일

TODAY589 TOTAL2,440,392
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 소스파일

페이지 정보

작성자 cucumber 작성일2018-06-06 18:16 조회7,415회 댓글0건

본문

	

#include <SoftwareSerial.h>

#define BT_RXD 8

#define BT_TXD 7

SoftwareSerial bluetooth(BT_RXD,BT_TXD);

SoftwareSerial gps(11,12); //tx,rx를 각각의 핀에 연결

//

#include <OneWire.h>

int DS18S20_Pin=2; //온도센서를 2번 핀으로 연결

OneWire ds(DS18S20_Pin); //2번 핀과 연결되 OneWire 객체 생성

//

int red=11; //빨간색led를 11번 핀으로 연결

int blue=10; //파란색led를 10번 핀으로 연결

//

void setup(){

  pinMode(red,OUTPUT); pinMode(blue,OUTPUT);

  Serial.begin(9600);

  bluetooth.begin(9600);

  gps.begin(9600);

}

//

void loop(){

  if(gps.available()){ Serial.write(gps.read()); }

  //

  if(bluetooth.available()){ Serial.write(bluetooth.read()); }

  if(Serial.available()){ bluetooth.write(Serial.read()); }

  //

  float temperature=getTemp(); //온도 측정 후 변수에 저장

  Serial.println(temperature);

  if(temperature<24){ digitalWrite(red,LOW); digitalWrite(blue,HIGH); delay(100); } //온도가 24도 이하일 때,파란색 LED 점등

  else{ digitalWrite(red,HIGH); digitalWrite(blue,LOW); delay(100); } //온도가 24도 이상일 때,빨간색 LED 점등

}

//

float getTemp(){ //온도 측정 후 반환하는 함수

  byte data[12];

  byte addr[8];

  if(!ds.search(addr)){ ds.reset_search(); return-1000; }

  if(OneWire:: crc8(addr,7)!=addr[7]){ Serial.println("CRC is not valid!"); return-1000; }

  if(addr[0]!=0x10&&addr[0]!=0x28){ Serial.print("Device is not recognized"); return-1000; }

  ds.reset();

  ds.select(addr);

  ds.write(0x44,1);

  byte present=ds.reset();

  ds.select(addr);

  ds.write(0xBE);

  for(int i=0; i<9; i++){ data[i]=ds.read(); }

  ds.reset_search();

  byte MSB=data[1]; byte LSB=data[0];

  float tempRead=((MSB<<8)|LSB);

  float TemperatureSum=tempRead/16;

  return TemperatureSum;

 

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

심장박동센서1

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


/*  Pulse Sensor Amped 1.5    by Joel Murphy and Yury Gitman   http://www.pulsesensor.com

----------------------  Notes ----------------------  ----------------------
This code:
1) Blinks an LED to User's Live Heartbeat   PIN 13
2) Fades an LED to User's Live HeartBeat    PIN 5
3) Determines BPM
4) Prints All of the Above to Serial

Read Me:
https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino/blob/master/README.md
 ----------------------       ----------------------  ----------------------
*/

#define PROCESSING_VISUALIZER 1
#define SERIAL_PLOTTER  2

//  Variables
int pulsePin = 0;                 // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13;                // pin to blink led at each beat
int fadePin = 5;                  // pin to do fancy classy fading blink at each beat
int fadeRate = 0;                 // used to fade LED on with PWM on fadePin

// Volatile Variables, used in the interrupt service routine!
volatile int BPM;                   // int that holds raw Analog in 0. updated every 2mS
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // int that holds the time interval between beats! Must be seeded!
volatile boolean Pulse = false;     // "True" when User's live heartbeat is detected. "False" when not a "live beat".
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.

// SET THE SERIAL OUTPUT TYPE TO YOUR NEEDS
// PROCESSING_VISUALIZER works with Pulse Sensor Processing Visualizer
//      https://github.com/WorldFamousElectronics/PulseSensor_Amped_Processing_Visualizer
// SERIAL_PLOTTER outputs sensor data for viewing with the Arduino Serial Plotter
//      run the Serial Plotter at 115200 baud: Tools/Serial Plotter or Command+L
static int outputType = SERIAL_PLOTTER;


void setup(){
  pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
  pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
  Serial.begin(115200);             // we agree to talk fast!
  interruptSetup();                 // sets up to read Pulse Sensor signal every 2mS
   // IF YOU ARE POWERING The Pulse Sensor AT VOLTAGE LESS THAN THE BOARD VOLTAGE,
   // UN-COMMENT THE NEXT LINE AND APPLY THAT VOLTAGE TO THE A-REF PIN
//   analogReference(EXTERNAL);
}

 

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

심장박동센서2

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


//////////
/////////  All Serial Handling Code,
/////////  It's Changeable with the 'outputType' variable
/////////  It's declared at start of code.
/////////

void serialOutput(){   // Decide How To Output Serial.
  switch(outputType){
    case PROCESSING_VISUALIZER:
      sendDataToSerial('S', Signal);     // goes to sendDataToSerial function
      break;
    case SERIAL_PLOTTER:  // open the Arduino Serial Plotter to visualize these data
      Serial.print(BPM);
      Serial.print(",");
      Serial.print(IBI);
      Serial.print(",");
      Serial.println(Signal);
      break;
    default:
      break;
  }

}

//  Decides How To OutPut BPM and IBI Data
void serialOutputWhenBeatHappens(){
  switch(outputType){
    case PROCESSING_VISUALIZER:    // find it here https://github.com/WorldFamousElectronics/PulseSensor_Amped_Processing_Visualizer
      sendDataToSerial('B',BPM);   // send heart rate with a 'B' prefix
      sendDataToSerial('Q',IBI);   // send time between beats with a 'Q' prefix
      break;

    default:
      break;
  }
}

//  Sends Data to Pulse Sensor Processing App, Native Mac App, or Third-party Serial Readers.
void sendDataToSerial(char symbol, int data ){
    Serial.print(symbol);
    Serial.println(data);
  }

 

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

심장박동센서3

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

 

 


volatile int rate[10];                    // array to hold last ten IBI values
volatile unsigned long sampleCounter = 0;          // used to determine pulse timing
volatile unsigned long lastBeatTime = 0;           // used to find IBI
volatile int P =512;                      // used to find peak in pulse wave, seeded
volatile int T = 512;                     // used to find trough in pulse wave, seeded
volatile int thresh = 530;                // used to find instant moment of heart beat, seeded
volatile int amp = 0;                   // used to hold amplitude of pulse waveform, seeded
volatile boolean firstBeat = true;        // used to seed rate array so we startup with reasonable BPM
volatile boolean secondBeat = false;      // used to seed rate array so we startup with reasonable BPM


void interruptSetup(){  // CHECK OUT THE Timer_Interrupt_Notes TAB FOR MORE ON INTERRUPTS
  // Initializes Timer2 to throw an interrupt every 2mS.
  TCCR2A = 0x02;     // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE
  TCCR2B = 0x06;     // DON'T FORCE COMPARE, 256 PRESCALER
  OCR2A = 0X7C;      // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE
  TIMSK2 = 0x02;     // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A
  sei();             // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}

 

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

심장박동센서4

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

 

/*
  These notes put together by Joel Murphy for Pulse Sensor Amped, 2015
  The code that this section is attached to uses a timer interrupt
  to sample the Pulse Sensor with consistent and regular timing.
  The code is setup to read Pulse Sensor signal at 500Hz (every 2mS).
  The reasoning for this can be found here:
  http://pulsesensor.com/pages/pulse-sensor-amped-arduino-v1dot1

  There are issues with using different timers to control the Pulse Sensor sample rate.
  Sometimes, user will need to switch timers for access to other code libraries.
  Also, some other hardware may have different timer setup requirements. This page
  will cover those different needs and reveal the necessary settings. There are two
  part of the code that will be discussed. The interruptSetup() routine, and
  the interrupt function call. Depending on your needs, or the Arduino variant that you use,
  check below for the correct settings.


  ******************************************************************************************
  ARDUINO UNO, Pro 328-5V/16MHZ, Pro-Mini 328-5V/16MHz (or any board with ATmega328P running at 16MHz)

 >> Timer2

    Pulse Sensor Arduino UNO uses Timer2 by default.
    Use of Timer2 interferes with PWM on pins 3 and 11.
    There is also a conflict with the Tone library, so if you want tones, use Timer1 below.

      void interruptSetup(){
        // Initializes Timer2 to throw an interrupt every 2mS.
        TCCR2A = 0x02;     // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE
        TCCR2B = 0x06;     // DON'T FORCE COMPARE, 256 PRESCALER
        OCR2A = 0X7C;      // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE
        TIMSK2 = 0x02;     // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A
        sei();             // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
      }

    use the following interrupt vector with Timer2

      ISR(TIMER2_COMPA_vect)

 >> Timer1

    Use of Timer1 interferes with PWM on pins 9 and 10.
    The Servo library also uses Timer1, so if you want servos, use Timer2 above.

      void interruptSetup(){
        // Initializes Timer1 to throw an interrupt every 2mS.
        TCCR1A = 0x00; // DISABLE OUTPUTS AND PWM ON DIGITAL PINS 9 & 10
        TCCR1B = 0x11; // GO INTO 'PHASE AND FREQUENCY CORRECT' MODE, NO PRESCALER
        TCCR1C = 0x00; // DON'T FORCE COMPARE
        TIMSK1 = 0x01; // ENABLE OVERFLOW INTERRUPT (TOIE1)
        ICR1 = 16000;  // TRIGGER TIMER INTERRUPT EVERY 2mS
        sei();         // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
      }

    Use the following ISR vector for the Timer1 setup above

      ISR(TIMER1_OVF_vect)

 >> Timer0

    DON'T USE TIMER0! Timer0 is used for counting delay(), millis(), and micros().
                      MESSING WITH Timer0 IS HIGHLY UNADVISED!

  ******************************************************************************************
  ARDUINO Fio, Lilypad, ProMini328-3V/8MHz (or any board with ATmega328P running at 8MHz)

  >> Timer2

    Pulse Sensor Arduino UNO uses Timer2 by default.
    Use of Timer2 interferes with PWM on pins 3 and 11.
    There is also a conflict with the Tone library, so if you want tones, use Timer1 below.

      void interruptSetup(){
        // Initializes Timer2 to throw an interrupt every 2mS.
        TCCR2A = 0x02;     // DISABLE PWM ON DIGITAL PINS 3 AND 11, AND GO INTO CTC MODE
        TCCR2B = 0x05;     // DON'T FORCE COMPARE, 128 PRESCALER
        OCR2A = 0X7C;      // SET THE TOP OF THE COUNT TO 124 FOR 500Hz SAMPLE RATE
        TIMSK2 = 0x02;     // ENABLE INTERRUPT ON MATCH BETWEEN TIMER2 AND OCR2A
        sei();             // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
      }

    use the following interrupt vector with Timer2

      ISR(TIMER2_COMPA_vect)

 >> Timer1

    Use of Timer1 interferes with PWM on pins 9 and 10.
    The Servo library also uses Timer1, so if you want servos, use Timer2 above.

      void interruptSetup(){
        // Initializes Timer1 to throw an interrupt every 2mS.
        TCCR1A = 0x00; // DISABLE OUTPUTS AND PWM ON DIGITAL PINS 9 & 10
        TCCR1B = 0x11; // GO INTO 'PHASE AND FREQUENCY CORRECT' MODE, NO PRESCALER
        TCCR1C = 0x00; // DON'T FORCE COMPARE
        TIMSK1 = 0x01; // ENABLE OVERFLOW INTERRUPT (TOIE1)
        ICR1 = 8000;  // TRIGGER TIMER INTERRUPT EVERY 2mS
        sei();         // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
      }

    Use the following ISR vector for the Timer1 setup above

      ISR(TIMER1_OVF_vect)

 >> Timer0

    DON'T USE TIMER0! Timer0 is used for counting delay(), millis(), and micros().
                      MESSING WITH Timer0 IS HIGHLY UNADVISED!


  ******************************************************************************************
  ARDUINO Leonardo (or any board with ATmega32u4 running at 16MHz)

  >> Timer1

    Use of Timer1 interferes with PWM on pins 9 and 10.

      void interruptSetup(){
          TCCR1A = 0x00;
          TCCR1B = 0x0C; // prescaler = 256
          OCR1A = 0x7C;  // count to 124
          TIMSK1 = 0x02;
          sei();
      }

  The only other thing you will need is the correct ISR vector in the next step.

      ISR(TIMER1_COMPA_vect)


  ******************************************************************************************
  ADAFRUIT Flora, ARDUINO Fio v3 (or any other board with ATmega32u4 running at 8MHz)

  >> Timer1

    Use of Timer1 interferes with PWM on pins 9 and 10.

      void interruptSetup(){
          TCCR1A = 0x00;
          TCCR1B = 0x0C; // prescaler = 256
          OCR1A = 0x3E;  // count to 62
          TIMSK1 = 0x02;
          sei();
      }

  The only other thing you will need is the correct ISR vector in the next step.

      ISR(TIMER1_COMPA_vect)
  ******************************************************************************************
  ADAFRUIT Gemma, ADAFRUIT Trinket 8MHz, Digispark Pro 8MHz, (or any other board with ATtiny85 running at 8MHz)

    NOTE: Gemma does not do serial communication! Comment out or remove the Serial code in the Arduino sketch!
   
    NOTE: You must use Software Serial with the Trinket or Digispark!
          A the top of the main code page put these lines
         
            #define rxPin 3
            #define txPin 4
            SoftwareSerial uart(rxPin, txPin);

          Then, whenever the word 'Serial' is used, replace it with 'uart'
            example:
              change Serial.begin(115200); to uart.begin(57600);
           
    NOTE: Use pin 2 to connect the Pulse Sensor Purple Pin on Trinket and Gemma!

  Timer1

    Use of Timer1 breaks PWM output on pin D1

      void interruptSetup(){
        TCCR1 = 0x88;      // Clear Timer on Compare, Set Prescaler to 128 TEST VALUE
        GTCCR &= 0x81;     // Disable PWM, don't connect pins to events
        OCR1C = 0x7C;      // Set the top of the count to  124 TEST VALUE
        OCR1A = 0x7C;      // Set the timer to interrupt after counting to TEST VALUE
        bitSet(TIMSK,6);   // Enable interrupt on match between TCNT1 and OCR1A
        sei();             // Enable global interrupts
      }
    The only other thing you will need is the correct ISR vector in the next step.

      ISR(TIMER1_COMPA_vect)

  ******************************************************************************************
  ADAFRUIT Trinket with 16MHz software setting, Digispark Pro 16MHz, (or any other board with ATtiny85 running at 16MHz)

    NOTE: Use analog pin 2 for the Pulse Sensor purple wire.
   
    NOTE: You must use Software Serial with the Trinket or Digispark!
          A the top of the main code page put these lines
         
            #define rxPin 3
            #define txPin 4
            SoftwareSerial uart(rxPin, txPin);

          Then, whenever the word 'Serial' is used, replace it with 'uart'
            example:
              change Serial.begin(115200); to uart.begin(57600);

  Timer1

    Use of Timer1 breaks PWM output on pin D1

      void interruptSetup(){
        TCCR1 = 0x89;      // Clear Timer on Compare, Set Prescaler to 256
        GTCCR &= 0x81;     // Disable PWM, don't connect pins to events
        OCR1C = 0x7C;      // Set the top of the count to  124
        OCR1A = 0x7C;      // Set the timer to interrupt after counting to 124
        bitSet(TIMSK,6);   // Enable interrupt on match between TCNT1 and OCR1A
        sei();             // Enable global interrupts
      }
    The only other thing you will need is the correct ISR vector in the next step.

      ISR(TIMER1_COMPA_vect)
     
  ******************************************************************************************

  IF YOU DON'T SEE THE MICROCONTROLLER YOU ARE USING, BUT YOU WANT A QUICK AND DIRTY SOLUTION

  So many new micros are coming out that it's kind of mind boggling. We will add to this list with
  code that uses interupts when we can, but if your micro is not listed here, and you are not willing
  or able to grab a hardware timer yourself, here is a shortcut that will work.
  It won't have the tight timing of a hardware interrupt, but it just might be good enough.
  We are calling this the 'Software Interrupt' version.
  The code below will set up a microsecond timer and 'trigger' every 2mS (or so).
 
  FIRST:
  You will need to change the name of the funcion in the Interrupts tab from
  'ISR(TIMER2_COMPA_vect)'
  to
  'void getPulse()'
 
  THEN:
  Comment out the entire interruptSetup() function in the interrupts tab in order for this to work.
 
  USE:
  The code example below. Notice that we are using the micros() and the millis() to time the sample rate and the fade rate.
  DO NOT put any delays in the loop, or it will break the sample timing!

  Happy Hacking!

 

  // FIRST, CREATE VARIABLES TO PERFORM THE SAMPLE TIMING AND LED FADE FUNCTIONS
  unsigned long lastTime; // used to time the Pulse Sensor samples
  unsigned long thisTime; // used to time the Pulse Sensor samples
  unsigned long fadeTime; // used to time the LED fade
 
  void setup(){
    pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
    pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
    Serial.begin(115200);             // we agree to talk fast!
    // ADD THIS LINE IN PLACE OF THE interruptSetup() CALL
    lastTime = micros();              // get the time so we can create a software 'interrupt'
    // IF YOU ARE POWERING The Pulse Sensor AT VOLTAGE LESS THAN THE BOARD VOLTAGE,
    // UN-COMMENT THE NEXT LINE AND APPLY THAT VOLTAGE TO THE A-REF PIN
    //   analogReference(EXTERNAL);
  } //end of setup()

  //IN THE LOOP, ADD THE CODE THAT WILL DO THE 2mS TIMING, AND CALL THE getPulse() FUNCTION.
  void loop(){

    serialOutput() ;

    thisTime = micros();            // GET THE CURRENT TIME
    if(thisTime - lastTime > 2000){ // CHECK TO SEE IF 2mS HAS PASSED
      lastTime = thisTime;          // KEEP TRACK FOR NEXT TIME
      getPulse();                   //CHANGE 'ISR(TIMER2_COMPA_vect)' TO 'getPulse()' IN THE INTERRUPTS TAB!
    }

  if (QS == true){     // A Heartbeat Was Found
                       // BPM and IBI have been Determined
                       // Quantified Self "QS" true when arduino finds a heartbeat
        fadeRate = 255;         // Makes the LED Fade Effect Happen
                                // Set 'fadeRate' Variable to 255 to fade LED with pulse
        fadeTime = millis();    // Set the fade timer to fade the LED
        serialOutputWhenBeatHappens();   // A Beat Happened, Output that to serial.
        QS = false;                      // reset the Quantified Self flag for next time
  }
 
  if(millis() - fadeTime > 20){
    fadeTime = millis();
    ledFadeToBeat();                      // Makes the LED Fade Effect Happen
    }
   
} // end of loop

 

 

 

 

 

 

 

맨 위에 코드랑 심장박동센서코드랑 합쳐주세요.

LCD기능은 없애버리고 측정만 할 수 있게 해주세요.

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 0

조회수 7,415

등록된 댓글이 없습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 14881
공지 사이트 이용 안내댓글[28] master 17-10-29 32704
질문 atmega128 온도센서 질문입니다. 새글 으아어려워 03:35 16
답변 답변글 답변 : atmega128 온도센서 질문입니다. 새글 master 06:46 7
질문 (아두이노)qr리더기 gm65 관련 질문입니다. 새글 숨니 01:36 15
답변 답변글 답변 : (아두이노)qr리더기 gm65 관련 질문입니다. 새글 master 06:32 5
질문 flame sensor 질문입니다 새글 Tell 01:30 15
답변 답변글 답변 : flame sensor 질문입니다 새글 master 06:17 8
질문 서보모터 제어 질문댓글[3] 이미지새글첨부파일 NEOkANTsim 22-12-09 31
질문 dfplayer와 음성인식 모듈이 동시에 인식이 안되요댓글[3] 이미지새글첨부파일 tjqhd 22-12-09 20
질문 아두이노 스텝모터 값 제어(헤더파일 사용X) 새글첨부파일 산만 22-12-09 21
답변 답변글 답변 : 아두이노 스텝모터 값 제어(헤더파일 사용X) 새글 master 22-12-09 21
질문 초음파 카운트 새글 고구만 22-12-09 18
답변 답변글 답변 : 초음파 카운트 새글 master 22-12-09 18
질문 정전기로 인해 아두이노 핀이 죽어버립니다..댓글[1] 이미지새글 무야더싱 22-12-08 26
질문 매트랩 블루투스 무선 통신댓글[1] 이미지새글첨부파일 아두이노대학 22-12-08 18
질문 아두이노 else if Relay 관련 질문 새글 노토산스 22-12-08 19
답변 답변글 답변 : 아두이노 else if Relay 관련 질문댓글[1] 새글 master 22-12-08 21
질문 모터드라이버(L298N E6) 2개 동시사용.댓글[1] 이미지첨부파일 마고 22-12-08 31
질문 아두이노 l298n frequency sweep 관련 질문댓글[2] 이미지 sdwdjangwon 22-12-07 24
답변 답변글 답변 : 아두이노 l298n frequency sweep 관련 질문댓글[2] master 22-12-07 31
질문 stm32에서 코드 경과시간 측정하는 방법좀댓글[3] 라칸 22-12-07 24
질문 아두이노 코드 질문있습니다. 호2 22-12-07 33
답변 답변글 답변 : 아두이노 코드 질문있습니다. master 22-12-07 28
질문 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다. blackbunn 22-12-07 32
답변 답변글 답변 : 아두이노와 초음파 센서로 모터 제어 코드 질문있습니다.댓글[1] master 22-12-07 37
질문 버튼 릴레이댓글[3] 아두이노배우기 22-12-07 26
질문 아두이노 초급자 과제 중인데 코드해석이 어렵습니다.. zhem 22-12-06 37
질문 시리얼 모니터 분리 안 되나요?댓글[4] 이미지 까만키위 22-12-06 38
질문 타이머 관련 질문입니다. 이미지첨부파일 adui 22-12-06 32
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기