반응형 [C++ 임베디드 시스템 프로그래밍 시리즈] Day 12: 모터 제어 (PWM) 모터 제어의 개요모터 제어는 임베디드 시스템에서 매우 중요한 역할을 합니다. 특히, PWM(Pulse Width Modulation) 신호를 사용하여 모터의 속도와 방향을 제어할 수 있습니다. 오늘은 PWM을 사용하여 DC 모터를 제어하는 방법을 학습하겠습니다.1. PWM의 기본 개념PWM은 펄스 폭 변조(Pulse Width Modulation)의 약자로, 디지털 신호의 듀티 사이클을 변경하여 평균 전력을 제어하는 방법입니다. 듀티 사이클은 펄스 신호가 HIGH 상태를 유지하는 시간의 비율을 나타냅니다.듀티 사이클: PWM 주기 동안 신호가 HIGH 상태인 시간의 비율(%)입니다. 예를 들어, 듀티 사이클이 50%이면 신호가 주기의 절반 동안 HIGH 상태를 유지합니다.2. PWM을 사용한 모터 제어P.. 2024. 8. 1. [C++ 마스터] Day 13: 생성자와 소멸자 생성자 (Constructors)생성자는 객체가 생성될 때 자동으로 호출되는 특수한 함수입니다. 생성자는 주로 객체의 초기화 작업을 수행합니다. 1. 기본 생성자기본 생성자는 매개변수가 없는 생성자입니다.class Person {public: string name; int age; Person() { name = "Unknown"; age = 0; }};int main() { Person person; cout 2. 매개변수가 있는 생성자매개변수가 있는 생성자는 인수를 받아 객체의 멤버 변수를 초기화합니다.class Person {public: string name; int age; Person(string n, int a) { .. 2024. 8. 1. [C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 13: 디자인 패턴 심화 - 커맨드 패턴 (Command Pattern) 커맨드 패턴 (Command Pattern)커맨드 패턴은 요청을 객체의 형태로 캡슐화하여 요청자와 수행자 간의 의존성을 줄이는 패턴입니다. 이는 요청을 큐에 저장하거나, 로그로 기록하거나, 되돌릴 수 있는 작업을 구현할 수 있도록 합니다. 커맨드 패턴의 특징요청 캡슐화: 요청을 객체 형태로 캡슐화하여 요청자와 수행자를 분리합니다.커맨드 객체: 요청을 실행하는 메서드를 포함하는 객체입니다.되돌리기 가능: 실행된 요청을 되돌리거나 재실행할 수 있습니다.커맨드 패턴의 구조Command (커맨드): 실행 메서드를 정의하는 인터페이스ConcreteCommand (구체적 커맨드): 실제 실행될 작업을 구현하는 클래스Invoker (호출자): 커맨드를 실행하는 역할Receiver (수신자): 실제 작업을 수행하는 객.. 2024. 8. 1. [C++ 성능 최적화 및 고급 테크닉] Day 13: 고급 상속 및 다형성 기법 상속과 다형성의 중요성상속과 다형성은 객체 지향 프로그래밍의 핵심 개념입니다. 이를 통해 코드 재사용성을 높이고, 유연하고 확장 가능한 소프트웨어를 개발할 수 있습니다. 고급 상속 및 다형성 기법을 사용하면 더 효과적으로 객체 간의 관계를 정의하고, 유지보수가 용이한 코드를 작성할 수 있습니다.기본 상속과 다형성기본적인 상속과 다형성은 다음과 같이 정의할 수 있습니다:#include class Base {public: virtual void show() { std::cout show(); // Derived class delete basePtr; return 0;} 위 코드에서 Base 클래스는 show 함수를 가상 함수로 선언하고, Derived 클래스는 show 함수를 재.. 2024. 8. 1. [C++ 네트워크 프로그래밍] Day 13: 웹 소켓 클라이언트 개발 웹 소켓(WebSocket) 클라이언트 개발웹 소켓 클라이언트는 서버와의 양방향 실시간 통신을 위해 웹 소켓 연결을 설정하고, 데이터를 송수신하는 프로그램입니다. 웹 소켓 클라이언트는 주로 브라우저 또는 네이티브 애플리케이션에서 사용되며, 서버와의 지속적인 연결을 유지하여 실시간 데이터를 주고받습니다.웹 소켓 클라이언트의 주요 기능연결 설정: 서버와의 웹 소켓 연결을 설정합니다.데이터 송신: 서버로 데이터를 전송합니다.데이터 수신: 서버로부터 데이터를 수신합니다.연결 종료: 서버와의 웹 소켓 연결을 종료합니다.웹 소켓 클라이언트 구현 (Boost.Beast 사용)Boost.Beast는 HTTP 및 웹 소켓 프로토콜을 지원하는 라이브러리로, Boost.Asio를 기반으로 합니다. Boost.Beast를 사.. 2024. 8. 1. [C++로 배우는 알고리즘과 자료구조] Day 13: 이진 힙과 힙 정렬 이진 힙 (Binary Heap)이진 힙은 완전 이진 트리의 형태를 가지며, 각 노드가 특정한 우선순위를 가지는 자료구조입니다. 이진 힙은 주로 최대값이나 최소값을 빠르게 찾기 위해 사용됩니다. 이진 힙에는 최대 힙(Max-Heap)과 최소 힙(Min-Heap)이 있습니다.이진 힙의 종류:최대 힙 (Max-Heap): 부모 노드의 값이 자식 노드의 값보다 크거나 같습니다.최소 힙 (Min-Heap): 부모 노드의 값이 자식 노드의 값보다 작거나 같습니다.힙 정렬 (Heap Sort)힙 정렬은 이진 힙을 이용한 정렬 알고리즘으로, 최대 힙 또는 최소 힙을 사용하여 배열을 정렬합니다. 힙 정렬은 평균 및 최악의 경우 시간 복잡도가 (O(n \log n))입니다.힙 정렬의 과정:배열을 이진 힙으로 변환합니다... 2024. 8. 1. [C++로 배우는 알고리즘과 자료구조 심화] Day 13: 이분 그래프 매칭 (Hopcroft-Karp 알고리즘) 이분 그래프 매칭 (Bipartite Graph Matching)이분 그래프 매칭은 두 개의 분리된 정점 집합을 가지는 그래프에서 최대 매칭을 찾는 문제입니다. 이분 그래프 매칭은 네트워크 플로우, 작업 할당 문제, 매칭 문제 등 다양한 응용 분야에서 사용됩니다.Hopcroft-Karp 알고리즘Hopcroft-Karp 알고리즘은 이분 그래프에서 최대 매칭을 찾는 효율적인 알고리즘입니다. 이 알고리즘은 BFS와 DFS를 결합하여 구현됩니다.Hopcroft-Karp 알고리즘의 시간 복잡도:(O(\sqrt{V}E)), 여기서 (V)는 정점의 수, (E)는 간선의 수입니다.Hopcroft-Karp 알고리즘 구현다음은 C++로 Hopcroft-Karp 알고리즘을 구현한 예제입니다. 그래프 클래스 정의#includ.. 2024. 8. 1. [C++ 게임 개발 시리즈] Day 13: 충돌 처리와 반응 충돌 처리와 반응충돌 처리와 반응은 물리 기반 게임에서 중요한 요소입니다. 오늘은 Box2D를 사용하여 충돌을 처리하고, 충돌에 반응하는 방법을 학습하겠습니다.충돌 처리 기초Box2D는 충돌을 감지하고 처리하기 위해 충돌 콜백 시스템을 제공합니다. 이 시스템을 사용하면 두 물체가 충돌했을 때 특정 동작을 수행할 수 있습니다.Box2D 충돌 콜백Box2D에서 충돌을 처리하려면 b2ContactListener 클래스를 상속하고, BeginContact와 EndContact 메서드를 재정의합니다. 이 메서드들은 충돌이 시작되거나 끝날 때 호출됩니다.충돌 콜백 클래스 정의#include #include #include // 픽셀을 미터로 변환하는 비율const float SCALE = 30.0f;// 사용자 정.. 2024. 8. 1. [C++ 임베디드 시스템 프로그래밍 시리즈] Day 13: 서보 모터 제어 서보 모터의 개요서보 모터는 정밀한 위치 제어가 필요한 애플리케이션에서 사용됩니다. 서보 모터는 특정 각도로 회전할 수 있으며, 이를 통해 로봇 공학, 모델링, 자동화 시스템 등 다양한 분야에서 사용됩니다. 오늘은 서보 모터의 기본 개념과 제어 방법을 학습하겠습니다.1. 서보 모터의 기본 개념서보 모터는 내부에 제어 회로와 위치 피드백 시스템을 갖추고 있습니다. 일반적으로 0도에서 180도 또는 360도까지 회전할 수 있으며, 정확한 각도 제어가 가능합니다. 서보 모터의 주요 특성제어 신호: 서보 모터는 PWM 신호를 통해 제어됩니다. PWM 신호의 듀티 사이클에 따라 회전 각도가 결정됩니다.회전 각도: 일반적인 서보 모터는 0도에서 180도까지 회전할 수 있습니다. 일부 서보 모터는 360도 회전이 가.. 2024. 8. 1. [C++ 마스터] Day 14: 연산자 오버로딩 연산자 오버로딩 (Operator Overloading)연산자 오버로딩은 기존의 C++ 연산자를 사용자 정의 타입(클래스)에 대해 재정의하는 기능입니다. 이를 통해 객체 간의 연산을 보다 직관적으로 수행할 수 있습니다. 1. 기본 개념연산자 오버로딩은 함수 형태로 정의되며, 클래스의 멤버 함수 또는 전역 함수로 구현할 수 있습니다. 2. 멤버 함수로 연산자 오버로딩연산자를 멤버 함수로 오버로딩하는 방법은 다음과 같습니다:class Complex {private: double real; double imag;public: Complex(double r = 0, double i = 0) : real(r), imag(i) {} // + 연산자 오버로딩 Complex operator .. 2024. 8. 1. 이전 1 ··· 15 16 17 18 19 20 21 ··· 30 다음 반응형