[아두이노] 디지털 데이터 입/출력

PM077·2022년 12월 27일
0

CS Study

목록 보기
23/27

Microprocessor

  • CPU 이며 ALU, CU, Registers, Cache Memory, Buses로 구성되어있다

  • Fetch → Decode → Coding 순으로 Cycle됨

CISC vs RISC

  • CISC = intel
  • RISC = ARM → mobile, mac

Microcontroller

  • 아두이노와 같이 마이크로프로세서가 포함된 많은 기능을 가진 하드웨어

폰 노이만 아키텍쳐 vs 하버드 아키텍쳐

디지털 신호

  • 자료를 표현하는 최소 단위를 수치화 하는것
  • 이산적인 수치를 사용한다
  • 데이터가 특정값으로 표현이 가능하며 자료의 변형없이 저장 복제 삭제 편집등이 가능하다

아날로그 신호

  • 자료를 물리량으로 나타낸다
  • 자연에서 발생되는 신호이다 (빛의 정도, 바람의 세기 등등)
  • 신호가 끊어짐이 없는 연속적인 형태이다
  • 이는 일정한 주기로 샘플링하여 디지털로 변환한다

디지털 신호와 아날로그 신호

  • 디지털 샘플링 주기는 일정 주기로 추출해서 만든다
  • 샘플링 주기가 짧을 수록 원래 데이터와 비슷해진다
  • 허나 너무 과도하게 하면 처리할 양이 많아져서 과부하가 옴

Arduino UNO R3

  • 위의 1~13이 디지털 i/o핀
  • 아래 A0~5는 아날로그 INPUT핀

디지털 핀

  • 핀 개수는 13개
  • 디지털 입출력 함수: DigitalRead(), DigitalWrite()
  • 핀당 20mA, 내부 pull-up저항

아날로그 핀

  • A0~A5핀 개수 6개
  • 아날로그 입력 함수 : AnalogRead()

일반 핀

  • Vin : USB 넣는곳
  • 5V, 3.3V: 아두이노 보드에서 공급하는~

특별 핀

부품

  • LED
  • 저항(resistor)

디지털출력

디지털출력으로 LED제어하기

  • LED2개 + 저항 330옴 2개

  • 위의 함수 사용
  • 밑와 같은 형식으로 진행

```cpp
// 번갈아하면서 깜빡깜빡
void setup()
{
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop()
{
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  delay(500); // Wait for 1000 millisecond(s)
  digitalWrite(8, LOW);
  digitalWrite(7, HIGH);
  delay(500); // Wait for 1000 millisecond(s)
}
/////////////////////////////////////////////////////////
//같이 깜빡깜빡
void setup()
{
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop()
{
  digitalWrite(8, HIGH);
  digitalWrite(7, HIGH);
  delay(500); // Wait for 1000 millisecond(s)
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  delay(500); // Wait for 1000 millisecond(s)
}
```

## 디지털 출력
  • 시리얼 모니터를 이용한 아두이노와 대화

  • 이론
    • ASCII코드를 넣어서 알파벳을 출력해야됨
    • 통신을 위한 대화 창구인 시리얼 모니터를 설정해야됨
    • Serial.println(”hi”) 처럼 Serial 사용


void setup()
{
	Serial.begin(9600);
  	Serial.println("Hi! Arduino");
}

void loop()
{
	char rcv_data;
  	
  if (Serial.available())
  {
    rcv_data = Serial.read();
    Serial.print(rcv_data);
  }
  delay(20);
}
  • setup시 Hi Arduino 출력
  • loop을 통해서 입력값을 read함
char value;
void setup()
{
	Serial.begin(9600);
}

void loop(){
	while(!Serial.available());
  value = Serial.read();
  
  Serial.write(value);
}
  • 이 코드는 available 을 활용하여서 입력값이 있으면 while문을 빠져나와 출력해줌

0과 1의 입력값을 받아서 전원 껐다 키기

int led1 = 8;
int led2 = 7;
int led1_status = LOW;    // LED1 상태 
int led2_status = LOW;    // LED2 상태

void setup()
{
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW); 
    Serial.begin(9600);
}

void loop()
{
    char read_data;

    if (Serial.available())
    {
        read_data = Serial.read();
        if( read_data == '0' && led1_status == LOW)
        {
            digitalWrite(led1, HIGH);
            led1_status = HIGH;
            Serial.println("LED1 ON"); 
        }
        

       else if( read_data == '0' && led1_status == HIGH )
       {
           digitalWrite(led1, LOW); 
           led1_status = LOW;
           Serial.println("LED1 OFF"); 
        }
       else if( read_data == '1' && led2_status == LOW)
       {
            digitalWrite(led2, HIGH);
            led2_status = HIGH;
            Serial.println("LED2 ON"); 
        }
        else if( read_data == '1' && led2_status == HIGH )
        {
            digitalWrite(led2, LOW); 
            led2_status = LOW;
            Serial.println("LED2 OFF");
        } 
    } 
    delay(20);
}
profile
PM/PO

0개의 댓글