전체 글
-
min_element, substr, erase, unique 함수카테고리 없음 2025. 9. 8. 19:39
오늘 프로그래머스를 풀면서 4가지의 함수에 대해 공부하게 되었다. 하나 하나씩 정리해보자.vector arr이 공통적으로 있다고 가정하자.1. min_element() 함수는 min_element(arr.begin(), arr.end()) 로써 해당 벡터의 범위 내에서 가장 작은 위치를 반환하는 함수이다.여기서 중요한건 값을 바로 반환하는 것이 아닌 위치를 반환하는 것이다.#include #include #include using namespace std;vector solution(vector arr) { if (arr.size() == 1) { arr[0] = -1; } else { arr.erase(min_element(arr.begin(), ..
-
코딩테스트 LV.2 최댓값과 최솟값Algorithm 2025. 8. 29. 18:22
레벨 2의 첫 문제는 최댓값과 최솟값이였다.여기서 사용한 함수는 push_back()와 sort(), front(), back(),stoi() 함수이다.push_back() 함수는 벡터의 가장 마지막 원소에 값을 넣는것이고, sort() 함수는 오름차순으로 정렬하는 것이다.stoi() 함수는 string을 int형으로 바꿔주는 것이다.#include #include #include using namespace stdstring solution(string s) { string answer = ""; vector v; string tmp; for (int i =0; i먼저 코드를 보면 v라는 정수형 벡터를 만들고, tmp라는 문자를 생성한다.그리고 문자열 형식이기때문에 ..
-
코딩테스트 LV.0 2의 영역Algorithm 2025. 6. 25. 18:59
공부를 하다 이런 문제를 봤다.반복문을 사용해야 한다는것도 알았고, 2의 시작위치와 끝 위치를 find()함수를 통해 찾으면 된다는 생각을 했다.#include #include #include using namespace std;vector solution(vector arr) { auto start = find(arr.begin(), arr.end(), 2); if (start == arr.end()) { return {-1}; } auto end = find(arr.rbegin(), arr.rend(), 2); vector answer(start, end.base()); return answer;}먼저 find함수는 배열..
-
스위치 동작 원리Embedded 2025. 6. 24. 20:57
내가 사용한 버튼 스위치는 총 3개이다.이 3개는 온도 상승, 온도 하강, 온도 설정의 각 기능을 하는 버튼으로 구성되어 있다.PB0, PB1, PB2 버튼을 사용했는데, GPIO 세팅을 할때 EXTI0으로 세팅했다.EXTI0은 External Interrupt 0으로 외부 인터럽트(외부 핀을 통해 들어오는 인터럽트) 중 0번 라인을 의미한다.Input, Output 등 있지만 굳이 인터럽트로 설정한 이유는 이 스위치들을 연달아 누르게 되면 버튼을 누를 때 신호가 튀는바운스 현상이 발생한다. 인터럽트를 설정하면, 다음과 같이 시간 기반 조건을 줘서 디바운스 처리를 할 수 있다.이 두 코드를 연관지어 보게 되면, 먼저 버튼 상태들은 모두 0으로 초기화되어있다.내가 온도 상승 버튼을 한번 누르게 되면, 인터..
-
ds18b20 온도센서 공부Embedded 2025. 6. 21. 18:10
먼저 나는 Ds18b20 이라는 온도센서를 사용했다.회로도를 보면 3.3V를 사용하고, GND로 전류를 흘러보낸다. PA2번에 연결해서 사용한다.One-wire 방식으로 통신한다.먼저, 데이터시트에 따르면 이 온도센서의 해상도는 9, 10, 11, 12비트로 구성할 수 있다.이에 따른 측정값의 증가 단위는 각각 0.5, 0.25, 0.125, 0.0625이다.Ds18b20은 1-Wire 방식으로, 여러 개의 센서를 하나의 선에 붙일 수 있다.센서마다 고유한 64비트(8바이트) ROM 주소가 있다.온도값을 저장할 Temperature, 데이터가 정상적으로 읽어지는지 확인하는 DataIsValid 변수이다.static uint8_t m_init = 0; // 초기화 여부static uint8_t m_bus..
-
I2C 통신Embedded 2025. 6. 19. 18:41
I2C통신은 SDA(데이터선), SCK(클럭선), VCC, GND를 사용한다.클럭을 기반으로 하는 통신은 SPI, I2C 등 있다.SPI 방식일 경우 CS선이 존재하지만, I2C 방식은 CS선이 따로 존재하지 않는다. 그래서 누굴 호출했는지 구분하기 위해 주소를 사용한다.1-Wire 방식도 주소를 사용했고, 거기선 주소를 ROM이라 칭하였다. I2C에선 Address라고 칭한다.항목 I2C SPI데이터 선1개 (SDA)2개 (MOSI, MISO)통신 방식반이중 (Half-Duplex)전이중 (Full-Duplex)속도낮음높음회선 수적음 (2개)많음 (보통 4개 이상)복잡성낮음약간 복잡I2C 방식은 데이터 선이 한개여서 동시에 송수신이 안되는 반이중 방식이다.SPI는 MOSI, MISO, SCLK, CS선..
-
7세그먼트 동작 원리Embedded 2025. 6. 2. 11:12
위 그림은 4개의 불이 DIG1 ~ 4까지 4자리에 숫자가 들어오는 7세그먼트의 회로도이다.0x80을 킨다는 가정으로 설명을 하겠다.0x80은 10진수로 표현하면 16*0*0 + 16*1*8 = 128이다. 이 숫자는 2진수로 1000 0000이다.먼저, 1이란 값이 저장되는 과정을 보면 데이터 클럭과 시프트 클럭이 동작한다.위에는 데이터 선으로 1을 보내기위해 High로 올라가있는 상태이며, 아래는 시프트 클럭으로 HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, LOW); HAL_GPIO_WritePin(FND_SCLK_GPIO_Port, FND_SCLK_Pin, HIGH);GPIO를 Low -> High로 올라가게 설정을 해놨기때문에 위와 같이 시프트 ..
-
ds18b20 코드 분석Embedded 2025. 5. 24. 18:10
칩 자체의 내용으로 구성돼있는 함수와 One-Wire (소스 구성)로 되어있는 함수가 있다. 먼저, OneWire_Int() 함수의 첫번째 인자는 OneWire의 주소값이다. 이 OneWire 변수는 다음과 같이 구조체로 이루어져 있다.GPIOx, GPIO_Pin 번호가 있는걸로 보아 GPIO 그룹과 핀을 저장해서 GPIO를 제어 한다고 생각할 수 있다.다시 돌아와서 OneWire_Init() 함수를 보면 HAL_TIM_Base_Start(&_DS18B20_TIMER)함수를 볼 수 있다.이 함수는 저번에 설정했던 타이머를 동작하여 카운팅을 시작하는 함수이다. OneWireStruct->GPIOx = GPIOx; OneWireStruct->GPIO_Pin = GPIO_Pin;GPIOx와 GPIO_Pin도 ..