아두이노:코드

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2021년 8월 19일 (목) 13:08 판 (→‎반복문)
둘러보기로 이동 검색으로 이동

아두이노 관련 정보를 모으기 위한 틀. 틀:아두이노

  1. 아두이노:개요
  2. 아두이노:하드웨어
    1. 아두이노:우노보드
  3. 아두이노:코드
    1. 아두이노:기초 문법
    2. 아두이노:라이브러리
    3. 아두이노:컴퓨터에서 보드로
    4. 아두이노:안드로이드에서 보드로
  4. 아두이노:핀 사용
    1. 아두이노:전원공급
  5. 아두이노:시리얼 통신
    1. 아두이노:엑셀기록
    2. 아두이노:파이썬과 통신
  6. 아두이노:편의함수
  7. 센서 사용
    1. 아두이노:모션센서
    2. 아두이노:온습도센서
    3. 아두이노:조도센서
    4. 아두이노:pH미터 만들기(Gravity 아날로그 pH센서)
  8. 아두이노:LCD 사용
  9. 아두이노:스위치 사용
  10. 아두이노:릴레이
  11. 아두이노:WIFI
  12. 아두이노:해결되지 않은 다양한 의문들
  13. 수업용 간단 실습
    1. 아두이노:LED
    2. 아두이노:초음파센서
  14. 분류:아두이노 프로젝트

개요

c언어를 사용해 쉽지 않다. 친절하게도 아두이노에서 제공하는 IDE가 있어 이를 사용하면 무리 없이 코딩을 할 수 있다.

https://www.tinkercad.com/에서 아두이노 회로와 코드의 시뮬레이션을 해볼 수 있다.

유의사항

  • 소문자, 대문자를 구분한다. 해당 함수의 옵션에 대소문자를 구분해 입력해야 한다.
  • 동일한 라이브러리는 하나만 갖고 있어야 한다.(충돌위험)
  • 코드는 잘 저장해두기. 아두이노에 업로드한 코드를 컴퓨터에 되돌리는 일은 굉장히 어렵다. HEX추출은 가능하지만 이를 코드로 되돌리는 일은 해당분야 종사자가 아니라면 거의 불가능에 가깝다 보면 되겠다.

초기설정

setup 함수 안에 초기 설정을 집어넣는다.

void setup(){
 //여기 안에 세팅요소를 넣는다.
}
요소 설명 예시
Serial.begin(9600); 시리얼 모니터를 사용하겠다는 선언. 숫자는 초당 비트를 의미한다.
pinMode(포트번호,OUTPUT);
  • 해당 포트번호를 OUTPUT으로 쓰겠다는 의미(출력(+)극으로 쓰겠다는 의미.)
  • A1 등의 포트에선 필요가 없지만, 번호로 이루어진 포트를 사용하려면 필수적인 설정이다.
pinMode(포트번호,INPUT); 센서 따위를 통해 특정 값을 수신하겠다는 의미. pinMode(12,INPUT);
constrain(포트번호, 최솟값, 최댓값); 해당 포트의 입력값을 최솟값, 최댓값 사이로 제한한다.
이외 필요하다고 생각되는 코드.

업로드

좌측 상단의 체크마크를 클릭 후 업로드를 하면 보드에 업로드된다.

기본명령

일반적으로 loop() 함수 안에 다양한 명령들을 기입한다.

신호 방출

해당 포트의 초기설정을 해준 후 진행해야 한다.

명령 설명 예시
digitalWrite(포트번호, HIGH); 포트번호에 HIGH 혹은 LOW 값을 넣는다. 이는 1, 0과 같다. digitalWrite(12, HIGH);
analogWrite(포트번호, i); 포트번호에 i값을 넣는다. 아날로그 데이터를 흉내 내어 0~255 을 넣을 수 있다.

아날로그를 흉내 낸 데이터를 출력하기 위해선 PWM(~표시가 있는 칸)이 가능한 곳에서만 가능하다.

analogWrite(10, 200);

신호 수신

명령 설명 예시
digitalRead(포트번호); 해당 포트의 초기설정을 해준 후 진행해야 한다.

포트번호에 입력된 값을 받는다.(0, 1로 받는다.)

digitalRead(12);
analogRead(포트번호); 포트번호로 들어온 신호를 0~255로 받는다.

아날로그 데이터라면 인풋만 가능하기에 ANALOG IN 포트에 꽂으면 별 설정없이 가져온다.

우노보드에 아날로크 포트로 들어온 경우 0~1023 사이의 값으로 받는다. 한계값이 정해진 경우, n/1023 을 곱하는 등의 처리로 데이터의 값을 맞춰준다.

int a = analogRead(A0);

기타 조작

명령 설명
delay(숫자); 숫자에 해당하는 시간(ms)만큼 쉰다.

시리얼모니터 관련

시리얼 모니터에서 읽어오는 데이터를 확인할 수 있다. 이를 위해서 데이터를 Serial로 보내는 과정이 필요.

설명
Serial.print(각종 문자열); 시리얼 모니터에 해당 문자열을 띄운다.

변수의 경우 String(변수) 처리 해주어야 한다.

Serial.println(문자열); ln은 한 칸 내리는 것을 의미.

사용

우측 상단의 Serial Monitor를 통해 내부에서 연산된 값을 보거나, 필요한 값을 보드에 전달할 수 있다.

Tools>Serial Plotter를 통해 그래프로 볼 수 있다.



tip

주석처리 : 쌍 슬래시 // 뒤에 쓰는 것은 주석처리된다.

범위주석 : /* 내용 */ 형식으로 쓰면 범위 주석이 된다.


개별 함수

사용자가 자주 사용하는 명령들을 블록화하는 등의 작업이 필요하다.

개별함수 만들기

과정 설명 예시
만들기 void 함수명() {내용} 형태로 개인함수를 지정할 수 있다.
변수 사용하기 함수명(자료형 변수) 형태로 첫줄을 시작하고, 내부에서 사용하면 된다.


전역변수를 그대로 사용하려면 자료형을 기입하지 않고 그냥 변수명을 쓰면 된다.

void func(int x)
{
    digitalWrite(x, 1);
}

개별함수 사용

함수명(); 이라고 입력하면 그 부분에서 함수가 작동한다.


반복문

for(int i=0; i<5;) {내용} 형태로 작성한다.

for(int i=0; i<5;)
    {
    명령
    i = i+1
    }

조건문

if(조건)
    {
    명령
    }
else
    {
    명령
    }

유의사항

코드를 폴더단위로 저장하기 때문에 다른 프로젝트를 같은 폴더에 넣어버리면 에러가 나곤 한다.