본문 바로가기

카테고리 없음

아두이노 5일차

마이크로 프로세서 - 연산 제어 논리

마이크로 컨트롤러 - 마이크로 프로세서 + 기타


온도 센서 :  5v, 아날로그 신호, 그라운드 순서

7 Segment (FND) - (숫자판1개) : 점이 아래로 왼쪽 아래부터 반시계로 1~10번


위부터 시계방향으로 a~g


1번 e

2번 d

3번 그라운드

4번 c

5번 점

6번 b

7번 a

8번 그라운드

9번 f

10번 g


3번 혹은 8번 하나에 그라운드



Serial interrupt - 0번과 1번을 통한 인터럽트 (1byte)

usb또한 Serial interrupt

Serial.begin(9600)


void serialEvent(){

  int value = Serial.read();

  Serial.println(value);

}


Serial.read()
값이 들어왔을땐 값을 반환하지만 없을땐 -1을 반환한다.



void loop() {

  // put your main code here, to run repeatedly:


    value = Serial.read();

    Serial.println(value);


  if(value=='0') digitalWrite(LED,LOW); // '0' == 48

  else if(value=='1') digitalWrite(LED,HIGH);

}


이런식으로 구현할경우 Serial.read() 가 반복되어 value 값이 변한다.




Serial interrupt 를 사용하지않고 비슷하게 구현하기


void loop() {

  // put your main code here, to run repeatedly:

  if(Serial.available()) 

  {

    value = Serial.read();

    Serial.println(value);

  }

  if(value=='0') digitalWrite(LED,LOW); // '0' == 48

  else if(value=='1') digitalWrite(LED,HIGH);

}




온도센서 사용하기


#define LED 3

#define TEMP A0

#define VOLT 5.0


void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  pinMode(LED,OUTPUT);

  pinMode(TEMP,INPUT);

}

void loop() {

  // put your main code here, to run repeatedly:

     Serial.print(check_t());

     Serial.println("'C");

     delay(1000);

}

float check_t()

{

  return analogRead(TEMP)*VOLT/1024*100; // 공식

}




7-Segment  사용하기

#define DOT 9

bool num[10][7] = {
  {1,1,1,1,1,1,0},
  {0,1,1,0,0,0,0},
  {1,1,0,1,1,0,1},
  {1,1,1,1,0,0,1},
  {0,1,1,0,0,1,1},
  {1,0,1,1,0,1,1},
  {1,0,1,1,1,1,1},
  {1,1,1,0,0,1,0},
  {1,1,1,1,1,1,1},
  {1,1,1,1,0,1,1},
};
volatile bool dot = LOW;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for(int i=0;i<8;i++)
  pinMode(i+2,OUTPUT);
}
void loop() {
  // put your main code here, to run repeatedly:
  delay(100);
}

void serialEvent(){
  display(Serial.read());
}

void display(int value){
  if(value=='.'){
    dot = !dot;
    digitalWrite(DOT,dot);
    return;
  }
  if(value=='/'){
    for(int i=0;i<8;i++)
      digitalWrite(i+2,LOW);
      dot=LOW;
      return;
  }
  for(int i=0;i<7;i++)
    digitalWrite(i+2,num[value-'0'][i]);
}




이로써 특강이 끝났다.

여태까지

LED
스위치
조도센서
초음파센서
온도센서
7-segment

볼륨

PIEZO (사운드)

인터럽트


를 배웠다