전체 글 64

외부 인터럽트 #1

구현 목표 switch1을 누를때마다 LED가 ON과 OFF를 반복 switch2를 누르면 switch1을 누른 횟수를 LED로 표현 외부 인터럽트 관련 레지스터 - EIMSK (External Interrupt Mask Resister) Interrupt0~7을 개별적으로 허용하는데 사용 SREG Resister의 Global Interrupt 허용비트 I비트가 1로 되어야 실제 허용 가능 - EIFR (External Interrupt Flag Resister) Interrupt0~7에 신호가 입력되어 트리거 되었음을 표시 자동으로 값 변화(직접 건드릴 필요 없음) 강제로 0을 clear하려면 해당 비트에 1을 write - EICRA (External Interrupt Control Resister..

학습/ATmega128 2021.09.29

ArrayQueue

* 배열을 이용하여 구현하는 원형 큐 1. 큐(Queue): 선입선출구조의 자료구조 2. Queue ADT 객체: 선입선출의 접근방법을 유지하는 요소들의 모음 연산: enqueue(x), dequeue(), isEmpty(), peek(), isFull(), size(), display() 3. 원형 큐: - 삽입을 계속 하기 위해서는 데이터 쉬프팅이 필요한 선형 큐와는 달리, 배열을 원형으로 사용하여 구현한 큐 - 전단과 후단을 관리하는 변수 필요 - 원형 구조를 유지하기 위해 인덱스에 순환 구조의 연산이 필요

아날로그/디지털 입출력 #3

#버튼을 이용하여 delay()와 millis()의 차이 확인 void delay(unsigned long ms) ms단위의 지연 딜레이함수가 실행중인 동안에는 대부분의 마이크로컨트롤러의 동작이 중단됨 동작이 중단되므로 다른 동작을 할 수 없음 chattering방지: 버튼과 같은 물리적인 요소를 사용해 신호를 입력으로 받았을 때 신호에 바운싱이 발생하는데 delay()함수는 chattering을 방지를 소프트웨어적으로 해결하는 해결책이 될 수 있음 unsigned long millis(void) 프로그램 시작 이후의 경과 시간을 반환 딜레이 함수와 달리 다른 작업이 가능 일정 시간 간격을 설정하기 위해서는 경과시간을 계속 검사 해야함 코드가 복잡해지는 단점

학습/Arduino 2021.09.24

아날로그/디지털 입출력 #1

#가변저항을 이용해 LED의 밝기 조절 / 시리얼 통신을 이용하여 변수의 값 확인 - map(value, from Low, from High, to Low, to High)와 constrain(value, min, max) map()함수를 이용해 아날로그 입력값을 n개의 구간으로 나누는 경우, to Low, to High 값을 0,n-1이 아닌 0,n으로 설정하고 constrain()함수에는 min=0, max=n-1 이용해 구간의 범위를 묶어줘야한다. 예를 들어 map(val, 0, 1023, 0, 4)의 경우 0~1구간, 1~2구간, 2~3구간, 3~4구간 총 4구간이 발생한다. 하지만 map함수가 4로 맵핑하는 한가지 경우: 입력값이 1023인 경우가 있다. 이 경우를 배제하기 위해 constrai..

학습/Arduino 2021.09.24

생성자와 소멸자

생성자(constructor) 객체가 생성되는 시점에서 자동으로 호출되는 멤버함수 객체가 생성될때 객체에게 필요한 초기화를 위해 사용 리턴 타입을 선언하지 않음 생성자가 선언되지 않은 경우 컴파일러가 자동으로 기본생성자(매개변수x)를 생성하지만, 생성자가 하나라도 선언된 경우 기본생성자는 생성되지 않는다. 생성자는 중복가능하지만 매개변수의 형태는 달라야 함 위임 생성자 여러 생성자에 중복 작성된 코드를 간소화하기 위해 범용으로 사용가능한 생성자만 남김 타겟 생성자: 객체 초기화를 전담하는 생성자 위임 생성자: 타겟 생성자를 호출하는 생성자, 객체 초기화를 타겟 생성자에게 위임 소멸자(destructor) 객체가 소멸되는 시점에서 자동으로 호출되는 멤버함수 마무리작업(ex.할당된 메모리 해제, 파일저장/닫..

학습/C++ 2021.09.23

FND제어 연습 #1

# JKIT-128-1의 네 개의 FND를 사용하는 원리 한 개의 FND에는 A, B, C, D, E, F, G, DP 총 8개의 비트가 필요하다. JKIT-128-1은 4개의 FND를 가지고 있고, 따라서 4개의 FND를 구동시키려면 32개의 I/O포트가 필요하다. 하지만 FND를 구동하기 위해 32개의 포트를 사용하는 것은 키트의 확장성을 떨어뜨린다. 이에 대한 방안으로 G포트의 4개 비트를 FND를 선택하는 포트로 사용하고, C포트의 8개 비트를 LED출력용으로 사용한다. 여기서 발생하는 문제점은 4개의 FND중 하나만 출력을 할 수 있다는 점이다. 하지만 눈의 잔상효과를 이용해 FND가 동시에 디스플레이 되는 것처럼 보이게 할 수 있다. 이같은 원리로 4개의 FND는 12개의 I/O포트로 구동시킬..

학습/ATmega128 2021.09.17

클래스 생성

멤버 접근 지정자 private: 현재클래스의 멤버함수에서만 접근 가능 protected: 현재 클래스와 이 클래스의 자식 클래스의 멤버함수에서만 접근 간으 public: 어떤 클래스나 함수에서도 접근 가능 생성자 객체가 생성될 떄 자동으로 싱행되는 특수 멤버함수 객체 초기화 절차 필요시 사용 1개 이상의 생성자를 만들 수 있음 소멸자 객체가 파괴될 때 자동으로 실행되는 특수 멤버함수 객체 소멸 절차 필요 시 사용 1개의 소멸자만 존재 경고: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] C++ 11이후로 암시적 형 변환이 더 이상 표준이 아니게 됨. 문자열 상수는 const char* 형으로 취급되어 char*를 사용..