본문 바로가기
Arduino

아두이노 :: PUSH BUTTON, 가변저항

by 코닛 2025. 1. 11.

http://www.tinkercad.com

 

Tinkercad - From mind to design in minutes

Tinkercad is a free, easy-to-use app for 3D design, electronics, and coding.

www.tinkercad.com

(※모든 이미지의 출처는 tinkercad.com에서 가지고 온 것입니다)

 

해당 사이트에서 구글로그인하여 사용 가능

DIGITAL 0또는 1

 

ANALOG IN

5V 전기신호가 나가는 것 +신호

GND (ground) - 신호

A0~A5 아날로그 핀번호

 

브레드보드

-하는 역할 : 여기의 어떤 부분과 아두이노의 어떤 부분을 연결해주는 역할을 한다.

-구멍 +부분은 구리선으로 연결이 되어있기 때문에 + 어디에 연결되어 있어도 같다.

 

 

e와 f는 연결되어 있지 않다

 

단자

-끝에 있는 놈

-브레드보드와 연결하는 부분

 

 

// C++ code
//
void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}

 

콜백(callback)

실행시키는게 아니라 자동으로 실행이 된다

 

setup은 딱 한번만 자동으로 실행이 된다.

-주로 프로그램 시작 전 수행될 환경설정과 초기화에 필요한 코드들이 포함됨

 

loop(반복) : while(true) - 무한반복

 

 

L (led)가 깜박이는 것을 볼 수 있다.

 

HIGE-전기신호를 보내는 것 (1)

LOW-전기신호를 끄는 것 (0)

 

 

 

이거 약간 플랑크톤 느낌

직선부 양극 - 캐소드

꺽인부 음극 - 애노드

전류는 높은 곳에서 낮은 곳으로 흐른다

 

 

 

캐소드가 GND에 연결되었기 때문에 항상 0V의 값을 가진다

BUT. 애노드가 13번에 연결되어 있어서

디지털 출력값이 LOW인지 HIGE인지에 따라

0V또는 5V가 될수 있다.

 

13번 출력값이 0V일때는 GND와 같은 값이라 전류가 흐르지 않는다.

13번 핀에 5V가 걸리면 애노드에서 캐소드로 전류가 흐르면서 LED의 불빛이 켜지게 된다.

 

 

pinMode(핀번호, 모드)

-INPUT : 입력

-OUTPUT : 출력

 

delay()

-천분의 1초 (millisecond)

1초 > delay(1000);

 

주석은 자바스크립트와 동일하게 // 로 입력

C언어 기반

 

// 설정 관련 - 1번 실행
void setup() {
	//13번 핀을 출력 모드로 설정한다
	pinMode(13, OUTPUT);
}

// 동작 관련 - 무한반복
void loop() {
	//13번 핀에 ON 상태
	digitalWrite(13, HIGH);
	//ON 상태를 1초 유지
	delay(1000);
	digitalWrite(13, LOW);
	delay(1000);
}

 

 

켜졌다 꺼지는 것을 반복하는 예제

 

레지스터 (register : 저항)

-터미널1, 2로 되어있으며 저항에 따라 색이 달라짐

-일반적으로 전원은 붉은색, 그라운드는 검은색으로 표현하고

다른 색상들은 신호선을 구분하기 위해 사용한다.

-저항의 단위는 옴(Ω)을 사용

http://www.parts-express.com

 

Parts Express: Speakers, Amplifiers, Audio Parts and Solutions

More air, more power, more MAX— the new Ultimax II from Dayton Audio Shop Now

www.parts-express.com

 

 

위의 표를 기준으로 해당 레지스터를 해석하면

갈색(1)흑색(0)*적색(102)±(골드)5%

의 저항값을 가진다

저항값 = 1,000Ω

저항값 단위가 ㏀값이면 가지므로 저항은 1㏀이 된다.

 

 

 

시리얼 모니터

-자바스크립트의 console.log와 같다고 생각하면 됨

 

2개의 led 교대로 깜박이기

 

 

// 설정 관련 - 1번 실행
void setup() {
	//13번 핀을 출력 모드로 설정한다
	pinMode(13, OUTPUT);
	pinMode(12, OUTPUT);
}

// 동작 관련 - 무한반복
void loop() {
	//13번 핀에 ON 상태
	digitalWrite(13, HIGH);
	digitalWrite(12, LOW);
	//ON 상태를 1초 유지
	delay(1000);
	digitalWrite(13, LOW);
	digitalWrite(12, HIGH);
	delay(1000);
}

3개의 led 차례대로 켜고 끄기

 

// 설정 관련 - 1번 실행
void setup() {
	//13번 핀을 출력 모드로 설정한다
	pinMode(13, OUTPUT);
	pinMode(12, OUTPUT);
	pinMode(11, OUTPUT);
}

// 동작 관련 - 무한반복
void loop() {
	//13번 핀에 ON 상태
	digitalWrite(13, HIGH);
	digitalWrite(12, LOW);
	digitalWrite(11, LOW);
	//ON 상태를 1초 유지
	delay(1000);
	digitalWrite(13, LOW);
	digitalWrite(12, HIGH);
	digitalWrite(11, LOW);
	delay(1000);
	digitalWrite(13, LOW);
	digitalWrite(12, LOW);
	digitalWrite(11, HIGH);
	delay(1000);
}​
 
 

 

푸시버튼으로 led 켜고 끄기

void setup() {
	Serial.begin(9600);
	pinMode(7, INPUT);
	//7번 핀을 입력모드로 설정
	pinMode(8, OUTPUT);
}
	


void loop() {
	int readValue = digitalRead(7);
	//정수를 저장할거다 정수의 이름은 읽은값 7번핀의 값을 읽겠다
	Serial.println(readValue);
	//값을 출력하고 줄을 바꿔라
	//ln = line
	//HIGH에는 1값, LOW에는 0값이 들어가있다.
	if (readValue == HIGH) {
		digitalWrite(8, HIGH);
	} else {
		digitalWrite(8, LOW);
	}
	delay(10);
}

 

스코프(scope, 유효범위)

지역 변수(지역구) - { }

-해당 지역에 영향을 미침

전역 변수(전국구) - 코드 전체

-전구역에 영향을 미침

 

한번 누르면 켜지고

다시 한번 누르면 꺼짐

 

 

 

int status = LOW;
//현재 상태 지정

void setup() {
	Serial.begin(9600);
	pinMode(7, INPUT);
	pinMode(8, OUTPUT);
}
	


void loop() {
	int readValue = digitalRead(7);
	Serial.println(readValue);
	if (readValue == HIGH) {
		if (status == LOW) {
			digitalWrite(8, HIGH);
			status = HIGH;
		} else {
			digitalWrite(8, LOW);
			status = LOW;
		}	
		
		delay(1000);
	}
}

 

해당 코드 해석

현재 status LOW >> 0의 값이 들어가있음

pinMode 가 7일때 입력

pinMode 가 8일때 출력

 

readValue 는 7번핀의 값을 읽겠다

시리얼 모니터에 7번핀의 값을 출력하고 라인을 변경하라

 

만약 { }안의 7번핀의 값이 HIGH라면 delay값을 1초 갖겠다.

{

{ 만약 첫 줄에 지정한 status = 값이 LOW라면 8번핀의 값을 출력하라

(8번핀은 출력이다)

status 값은 HIGH 가된다

 

}또는 {현재 status 값이 HIGH라면 8번핀의 값을 출력하라

(8번핀의 값은 LOW 다)

(윗 줄에서 8번핀의 값은 HIGH가 되었다)

그러므로 status 값은 LOW가 된다

}

}

 

가변저항

 

 

void setup() {
	Serial.begin(9600);
	//아날로그는 따로 핀모드 설정 필요없음
}
	


void loop() {
	int readValue = analogRead(A0);
	Serial.println(readValue);
	delay(100);
}

 

문제. led 3개를 넣고

분압기의 값에 따라서

차례로 점등하고 차례로 꺼지게 하기

0~255 : all off

256~500 : 1번 led 켜기

501~750 : 2번 led 켜기

751~1024 : 3번 led 켜기

 

 

void setup() {
	Serial.begin(9600);
	pinMode(13, OUTPUT);
	pinMode(12, OUTPUT);
	pinMode(11, OUTPUT);
}
	


void loop() {
	int readValue = analogRead(A0);
	Serial.println(readValue);
	if (251<=readValue && readValue <=500) {
		digitalWrite(13, HIGH);
		digitalWrite(12, LOW);
		digitalWrite(11, LOW);
	} else if (501<=readValue && readValue <=750) {
		digitalWrite(13, HIGH);
		digitalWrite(12, HIGH);
		digitalWrite(11, LOW);
	} else if (751<=readValue && readValue <=1024) {
		digitalWrite(13, HIGH);
		digitalWrite(12, HIGH);
		digitalWrite(11, HIGH);
	} else {
		digitalWrite(13, LOW);
		digitalWrite(12, LOW);
		digitalWrite(11, LOW);
	}
	delay(100);
}

 

△내가 한거

▼쌤이 한거

 

#define LED1 13
#define LED2 12
#define LED3 11

//상수로 정의 한다 = 상수 : 변하지 않는 수
//상수는 대문자로 작성한다
//led1을 13으로 정의한다.
//다른 사람이 봤을 때 코드가 더 이해하기 쉬워진다

void setup() {
	Serial.begin(9600);
	pinMode(LED1, OUTPUT);
	pinMode(LED2, OUTPUT);
	pinMode(LED3, OUTPUT);
}
	


void loop() {
	int readValue = analogRead(A0);
	Serial.println(readValue);
	if (251<=readValue && readValue <=500) {
		digitalWrite(LED1, HIGH);
		digitalWrite(LED2, LOW);
		digitalWrite(LED3, LOW);
	} else if (501<=readValue && readValue <=750) {
		digitalWrite(LED1, HIGH);
		digitalWrite(LED2, HIGH);
		digitalWrite(LED3, LOW);
	} else if (readValue > 750) {
		digitalWrite(LED1, HIGH);
		digitalWrite(LED2, HIGH);
		digitalWrite(LED3, HIGH);
	} else {
		digitalWrite(LED1, LOW);
		digitalWrite(LED2, LOW);
		digitalWrite(LED3, LOW);
	}
	delay(100);
}

 

확실히 정의해놓고 실제로 쓰일 때 어떤게 편하고 보기 좋을지 더 생각해봐야 할 것 같다.

 

상수(변하지 않는 수)

100, 20 (리터럴 상수) - 리터럴 (데이터 값)

LED1, LED2 (심볼릭 상수) - 상수

 

'Arduino' 카테고리의 다른 글

아두이노 :: 서브모터  (0) 2025.01.12