본문 바로가기

분류 전체보기937

STM32 , I2C 통신 오실로스코프로 확인하기 I2C Inter-Integrated Circuit의 약자, 아이투씨 또는 아이스퀘어씨라고 읽음 Data선(SDA)과 Clock선(SCL) 2개로만 통신이 가능 통신속도는 표준모드에서 100KHz, Fast모드에서 400KHz로 비교적 저속이라 GPIO로도 구현가능하다. (내가 사용하는 보드에는 3개의 I2C컨트롤러가 내장되어 있다. 하지만 GPIO로 굳이 구현한다면 마스터는 GPIO output, 슬레이브는 GPIO input으로 설정하면 된다.) 아래 사진과 같이 SDA, SCL 라인에 여러 디바이스가 연결될 수 있다. SDA, SCL 라인은 각각 풀업저항으로 연결되어있어 통신을 하지 않을 때는 HIGH 상태를 유지하고 하나의 마스터가 통신을 시작하면 LOW레벨로 떨어진다. 버스에 물려있는 누구나 마.. 2022. 6. 6.
npn, pnp 트랜지스터 정리 왼쪽이 순방향 결선. P형이 +극 N형이 -극에 연결된 상황 오른쪽이 역방향 결선.   NPN : 전원이 컬렉터에 연결. 베이스와 이미터가 순방향. 그래서 베이스에서 이미터 방향으로 화살표. PNP : 전원이 이미터에 연결. 베이스가 이미터가 역방향. 그래서 이미터에서 베이스 방향으로 화살표.   NPN형 : 베이스 전압이 이미터 전압보다 높아서 베이스에서 이미터로 작은 전류가 흐르면 콜렉터에서 이미터로 더 큰 전류가 흐르게 된다. PNP형 : 베이스 전압이 이미터 전압보다 낮아서 이미터에서 베이스로 작은 전류가 흐르면 이미터에서 콜렉터로 더 큰 전류가 흐르게 된다. 보통 회로설계에서는 NPN형 트랜지스터를 사용하는 경우가 대부분이다.   출처 : https://www.youtube.com/watch?v.. 2022. 6. 5.
GPIO output mode , Push-Pull 과 Open drain 의 차이 출처 : Push-Pull 일때 인풋이 1이면 아웃풋이 1이 나오고 인풋이 0이면 아웃풋이 0이 나온다. Open Drain 일때 단순히 Push-Pull에서 위의 PMOS 트랜지스터가 disabled 된 형태이다. 인풋이 0일때 아웃풋이 0이다. 인풋이 1일때는 아웃풋이 플로팅 상태이다. 이러한 회로는 외부 전원과 풀업저항을 연결해서 사용해야하는데, MCU의 출력레벨인 3.3V가 아닌 레벨이 다른 전원 소스를 사용할 수 있게끔하여 유연성을 제공한다. 또한 오픈드레인은 I2C버스를 구성하는데도 쓰인다. SCL, SDA 라인에는 풀업저항이 달려있고 다수의 디바이스가 연결된 형태로, 통신을 하지 않을 때는 라인이 HIGH상태를 유지하다가 어떤 마스터가 신호를 LOW로 당기고 통신을 시작했을 때 다른 마스터가.. 2022. 6. 5.
STM32CubeIDE , 프로젝트 복사 붙여넣기 하는법 / clone or duplicate a project for reuse STM32CubeIDE 에서는 프로젝트를 복붙해 재사용하는 방법 그냥 아무렇게나 복붙했다가는 오류가 나서 컴파일이 안되거나 혹은 복사한 프로젝트를 수정했는데 원본까지 같이 수정되는 경우가 생긴다. copy 라는 프로젝트를 복사해 paste 라는 프로젝트명으로 재사용 해본다. 카피할 프로젝트 우클릭 - Copy Project Explorer 빈 곳 우클릭 - Paste 프로젝트명을 써주고 Location 위치도 직접 써준다. 프로젝트를 저장하는 곳은 아래 STM32CubeIDE의 기본 workspace 외 다른곳을 사용하는 것이 좋다. C:\Users\[user_name]\STM32CubeIDE\workspace_1.10.1 .ioc 파일을 프로젝트명과 동일하게 수정해준다. Debug 폴더와 -Debug... 2022. 6. 4.
STM32 , UART 통신으로 4 digit 7 segment FND 실시간 제어하기 1편 ( 2가지 방법 ) UART 수신 인터럽트를 통한 4자리의 FND 실시간 제어 명령어 예시 FND38 : 3번째 FND에 숫자 8을 켠다. FNDA4 : 모든 FND를 4로 켠다. FND4X : 0-9 값이 아닌 다른 값을 입력하면 4번째 FND가 꺼진다. 이 글에 나오는 다른 함수는 이전글과 동일하다. 이전글 : 2022.06.02 - [MCU/STM32 (ARM Cortex-M)] - STM32 , 74HC595 시프트 레지스터로 FND 제어하기 , 카운터 / 시계 ( SysTick 타이머 사용) 테라텀 설정 New connection으로 포트를 제대로 잡은 후 보드레이트 115200으로 잡아주고 Setup - Terminal 설정에서 new-line 시 라인피드(\n)가 전송될 수 있도록 하고 내가 터미널에 친 글자가.. 2022. 6. 3.
STM32 , 74HC595 시프트 레지스터로 FND 제어하기 , 카운터 / 시계 ( SysTick 타이머 사용) 시프트 레지스터 두개로 4개의 FND를 제어할 수 있는 아두이노 호환보드를 사용하여 카운터 및 시계를 만들어 보겠습니다. 0부터 9999 까지 세는 카운터 시계, 왼쪽 두자리가 분이고 오른쪽 두자리가 초 확장보드의 회로도 직렬입력-병렬출력 시프트레지스터인 74595칩이 두 개가 달렸다. 왼쪽 칩의 SDI가 아두이노 8번핀과 연결되어 있고 Shift Clock 과 Latch Clock은 각각 7번핀 4번핀에서 두 칩에 동시에 들어간다. FND에 표시할 숫자를 결정하는 부분은 오른쪽 74595 칩이고 그 숫자를 4개중에 어디에 표시할 지는 왼쪽 74595 칩에 의해 결정된다. 예를 들어 왼쪽 74595칩의 QA, QB, QC, QD가 모두 HIGH라면 같은 숫자가 들어간다. 그리고 delay 없이 1번, 2.. 2022. 6. 2.
STM32 프로젝트 , 팩맨 게임 ( ADC in DMA mode 로 조이스틱 이용한 방향제어 , I2C LCD , Timer 인터럽트 및 PWM 사용 ) 코드는 GitHub에 공개되어 있으니 자유롭게 참고하여도 됩니다.다만, 본 프로젝트를 그대로 가져가 교육기관 프로젝트로 사용하는 것은 지양하기 바라며, 그렇게 사용할 경우에는 출처를 표기하기 바랍니다.  개인 프로젝트제작기간 : 3일보드 : STM32F429ZITool : STM32CubeIDE I2C LCD 모듈, 조이스틱, 수동부저 사용  https://github.com/joeteo/Pacman GitHub - joeteo/Pacman: STM32 Pacman game with LCD and JoystickSTM32 Pacman game with LCD and Joystick. Contribute to joeteo/Pacman development by creating an account on Gi.. 2022. 5. 31.
STM32 , UART 통신으로 피아노 연주하기 , PWM Frequency 제어 ( Passive Buzzer ) STM32F429 보드와 수동부저를 사용하여 멜로디를 연주해 보았다. 인터럽트 방식 UART 통신으로 시리얼 모니터에 숫자를 입력하는 해당하는 음계가 연주된다. 회로와 timer 설정은 지난번에 올린글과 동일하다. 거기서 uart3 설정만 켰다. 2022.05.27 - [MCU/STM32 (ARM Cortex-M)] - STM32 , PWM 주기 변경으로 수동 부저 ( Passive Buzzer ) 제어 , 실시간으로 ARR 변경시 동작 멈추는 현상 해결 , 멜로디 출력 소스코드 전역변수 구간 /* USER CODE BEGIN PV */ typedef enum { N = 0, C = 956, D = 852, E = 758, F = 716, G = 638, A = 568, B = 506, C6 = 478 .. 2022. 5. 27.
STM32 , PWM 주기 변경으로 수동 부저 ( Passive Buzzer ) 제어 , 실시간으로 ARR 변경시 동작 멈추는 현상 해결 , 멜로디 출력 일단 부저 (Buzzer)에는 수동부저 (Passive) 와 능동부저 (Active) 가 있다. 차이점은 Passive는 다리길이가 똑같고 Active 는 +쪽 다리가 더 길다. 하지말 둘 다 극성이 있어서 +라고 적힌 곳에 데이터선 그리고 다른곳에 GND를 연결해야 한다. 바닥면 생김새도 다르고 또 하나 큰 차이점은 Active Buzzer는 HIGH 신호를 공급하기만 하면 바로 소리가 난다. 반면 Passive Buzzer는 아무 소리도 안난다. 음계에 맞는 주파수를 조절해줘야 한다. 지난번 글에서는 서보모터 제어를 위해 펄스폭을 조정했었다. 한편 부저는 소리크기를 전압레벨 또는 펄스폭을 조정하거나 저항을 달아서 조절할 수 있는데 지금은 항상 같은 소리크기로 출력할 것이기 때문에 펄스폭은 50% 고정.. 2022. 5. 27.
WinMerge 텍스트 및 파일 비교 프로그램 (무료) 무료 텍스트 및 파일 비교툴 WinMerge 다운로드 링크 : https://winmerge.org/downloads/?lang=en Download WinMerge - WinMerge Download WinMerge The easiest way to install WinMerge is to download and run the Installer. Read the online manual for help using it. WinMerge 2.16.20 The current WinMerge version is 2.16.20 and was released at 2022-04-27. For detailed info on what is new, winmerge.org 설치 후 폴더 단위로 두 폴더를 선택 후 오.. 2022. 5. 27.
STM32 , UART 통신 ( 수신 ) 을 이용한 PWM 서보모터 ( SG90 ) 제어 + 펄스폭 찾아내는 팁 UART 설정 USART3을 비동기식으로 켜준다. Parameter는 디폴트로 놔두고 폴링방식을 사용할거면 NVIC 세팅을 켜주지 않아도 된다. 만약 MCU/MPU Selector로 시작했다면 보드매뉴얼을 보고 핀도 제대로 잡아주어야 한다. Timer 설정 클락설정은 아래와 같다. Timer 의 클락이 어떤 버스에서 제공되는지는 datasheet 20페이지의 블록 다이어그램을 보면 알 수 있다. 내가 사용할 TIM2가 쓰는 클락은 APB1이다. Internal Clock 소스로 설정해주고 PWM Generation CH1을 선택해준다. TIM2, PWM CH1에 어떤핀이 연결되어 있는지는 보드매뉴얼을 보고 알 수 있다. Board Selector 를 선택했다면 MX툴에서 그냥 채널 활성화 시키면 해당핀이.. 2022. 5. 26.
STM32 , 난수 발생 회로 프로그래밍으로 구현 ( EXTI 사용 ) D플립플롭을 4개 연결한 시프트 레지스터이고 이전의 디지털 금고와는 달리 같은 클락펄스가 들어간다. 프리셋 기능은 EXTI (외부 인터럽트)를 사용했다. 회로는 이전 글의 디지털 금고할때 쓰던 회로를 그대로 사용했는데 실제 사용하는건 왼쪽부터 LED 4개와 맨 아래의 버튼 1개 뿐이다. 15부터 시작해 무작위로 보이는 순서로 변화함 위의 상태도와 일치하게 순환한다. PG3과 연결된 버튼은 풀다운저항이고 Rising Edge 인터럽트로 설정한 버튼이 눌려 인터럽트 발생시, 각 플립플롭의 출력 Q값이 다 1111로 초기화된다. 소스코드 main.h 내 구조체 정의 typedef struct { uint8_t Q; uint8_t clockbefore; }JKFF; main.c 전역변수 선언 및 초기화 /* U.. 2022. 5. 25.
STM32 , Timer Interrupt 타이머 인터럽트 사용하기 (TIM2) 이전의 동기식 / 비동기식 카운터 프로그래밍으로 구현하기 글에서 이어진다. 2022.05.23 - [MCU/STM32 (ARM Cortex-M)] - STM32 , 동기식 / 비동기식 카운터 프로그래밍으로 구현하기 ( + Timer 사용 방법 ) STM32 , 동기식 / 비동기식 카운터 프로그래밍으로 구현하기 ( + Timer 사용 방법 ) 4비트 상향 카운터 4비트 하향 카운터 main.h 먼저 main.h 에 플립플롭에 필요한 변수들을 묶어 구조체로 정의해주었다. 함수에 매개변수를 여러개 둘 필요없이 보다 간략하게 짤 수 있다. /* USER CODE eteo.tistory.com 프로젝트 파일은 위 글 똑같고 while문 내에서 지역변수를 토글시키며 HAL_Delay(500) 한 이전버전과 달리 T.. 2022. 5. 25.
STM32 , 디지털 금고 프로그래밍으로 구현 ( 시프트 레지스터 응용 ) 시프트 레지스터를 응용한 디지털 금고를 프로그래밍으로 구현하였습니다. 올바른 비밀번호인 3190을 순서대로 입력하면 LED가 오른쪽 왼쪽으로 번갈아 이동하면서 켜지고, 틀린 번호를 입력하면 LED가 깜빡이면서 초기화 되서 다시 입력해야 합니다. 버튼 3, 1, 9, 0 은 PG0-3 과 연결해두었고 버튼 2, 4, 5, 6, 7, 8 은 PC7-12 와 연결해두었다. LED는 PD0-5 이다. D 플립플롭은 입력과 출력이 버퍼와 마찬가지이다. 시프트 레지스터라서 처음 입력이 1으로 고정이고 각 플립플롭의 출력 Qa, Qb, Qc, Qd의 값은 0으로 초기화된 상태에서 시작하기 때문에 올바른 순서대로 클락펄스를 주어야 비트 1이 이동한다. 소스코드 /* USER CODE BEGIN PFP */ void J.. 2022. 5. 24.
STM32 , 동기식 / 비동기식 상향/ 하향 카운터 프로그래밍으로 구현하기 ( JK 플립플롭 , IC 7490 / 7492 ) 4비트 상향 카운터 4비트 하향 카운터 main.h 먼저 main.h 에 플립플롭에 필요한 변수들을 묶어 구조체로 정의해주었다. 함수에 매개변수를 여러개 둘 필요없이 보다 간략하게 짤 수 있다. /* USER CODE BEGIN Private defines */ typedef struct { uint8_t clockbefore; uint8_t Q; uint8_t Qbar; }JKFF; /* USER CODE END Private defines */ 사실 하드웨어의 동작과 달리 여기서 Qbar의 역할은 없는데 그냥 넣었다. main.c 뒤에 나오는 memset 함수 사용을 위해 string.h 를 포함해주었다. /* USER CODE BEGIN Includes */ #include /* USER CODE .. 2022. 5. 23.
STM32 , 외부 인터럽트 ( EXTI ) 사용하기 EXTI는 External Interrupt의 약자로 인터럽트 Interrupt란 CPU(프로세스)가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치 등에서 예외상항이 발생하여 처리가 필요한 경우 프로세서에게 알려 처리할 수 있도록 하는 기능이다. 결과물 첫번째 스위치를 누르면 오른쪽으로 점멸하며 이동 두번째 스위치를 누르면 왼쪽으로 점멸하며 이동 세번째 스위치를 누르면 전체 점등 네번째 스위치를 누르면 전체 꺼짐 STM32F42시리즈는 다음과 같은 EXTI 구조를 가지고 있다. 각각의 PA0~PH0 핀이 EXTI0 에 연결되고 PA1~PH1이 EXTI1에 연결되는 식이다. 따라서 PD0번과 PC0번을 동시에 EXTI 용도로 설정할 수 없다. 위 사진에 보이듯이 EXTI0 - EXIT4 는 개별 .. 2022. 5. 22.
STM32 , UART 통신 사용하여 시리얼 모니터에 Hello world ! 출력하기 [ UART 통신 정의 ] 시리얼 통신 중 UART 통신에 대한 정리 UART (Universal Asynchronous Receiver Transmitter, 범용 비동기식 직렬 포트): PC와 타겟보드가 통신할 때 가장 기본으로 사용하는 포트. Windows 컴퓨터에서는 제어판 장치관리자의 COM으로 시작하는 포트가 UART 통신 포트에 해당 장점 : 많은 CPU와 PC에 기본적으로 달려있어 호환성이 좋다. 단점 : 1대1 통신만 가능하다. STM32보드에는 비동기식 UART 포트와 동기/비동기가 모두 가능한 USART 포트가 있으며 둘의 차이는 클락 펄스이다. 동기 : 별도의 클락핀이 추가로 필요하다. 전송속도가 빠르다. 데이터 송수신 효율이 좋다. 비동기 : 클락없이 데이터만 보내기 때문에 8 Bit의 데이터마다 Start.. 2022. 5. 22.
비트 마스크 기법 , 원하는 비트만 조작하기 비트 마스크 기법은 정수의 이진수 표현을 자료구조로 쓰는 기법을 말합니다. 아래 숫자를 초기상태로 사용해 예제를 진행해 보겠습니다. 최하위비트는 0번이고 최상위비트는 15번이라고 지칭하겠습니다. 1. 특정 비트를 1로 만들기 |= 연산 사용. 내가 켜고 싶은 비트는 1 나머지는 0 15, 11, 7, 3번 비트 켜기 이전 상태와는 상관없이 다른 비트는 건들지 않고 내가 켜고 싶은 비트만 1로 만듭니다. #include int main() { unsigned short num = 23130; // 0x5a5a num |= 0x8888; printf("0x%04x\n", num); return 0; } 결과 2. 특정 비트를 0으로 만들기 &= 연산 사용. 내가 끄고싶은 비트는 0 나머지는 1. 혹은 내가 .. 2022. 5. 21.
[ 아두이노 ] 풀업저항 , 풀다운저항 달아서 버튼 ( 스위치 )누르면 불켜지는 회로 구성하기 다리가 4개인 버튼을 사용해서 스위치를 누르면 불이 켜지고 누르지 않았을 때는 불이 꺼지도록 해보겠습니다. 플로팅 현상 위 사진처럼 회로를 구성했을 때 버튼을 누르지 않았을 땐 2번핀에 0이 입력되고 눌렀을 땐 1이 입력된다고 생각하기 쉬운데 실제로는 그렇지 않다. 스위치가 눌러졌을 땐 5V가 맞지만 열려있을 땐 주변 디지털 입출력핀에 영향을 받아 1일 수도있고 0일 수도 있는 부유하는 플로팅 상태이다. 그래서 버튼을 눌러도 내 의도대로 실행되지않는다고 느낄것이다. 스위치 사용한건 아래와 같은 다리가 4개인 버튼이다. 각각 위아래 다리가 연결되어 있고 오른쪽 왼쪽은 스위치로 떨어져있다. 버튼을 눌렀을 때 4개의 다리가 모두 연결된다. 다리가 2개인 버튼도 같은방식으로 사용 가능하다. 풀다운저항 소스코드 .. 2022. 5. 21.
STM32 , 4비트 병렬 가산기( IC 7483 ) 소스코드로 구현 ( 호환보드 사용 ) 호환보드에 대한 설명은 아래 링크에 있습니다. https://eteo.tistory.com/65 호환보드에서 버튼 4개(PG0-PG3)을 사용했고 가산기의 Sum을 표현하는데 LED 4개(PD4-PD7)를 사용하고 Carry-Out을 표현하는데 LED 1개(PD2)해서 총 LED 5개를 사용했다. 그리고 F-M점퍼선으로 따로 선을 빼서 버튼 4개(PE6-PE3)를 더 추가하였고 Carry-In 역할을 하는 input으로 PC8을 사용했다. 참고로 버튼은 호환보드의 버튼이 풀업으로 되어 있어서 따로 뺀 버튼 또한 마찬가지로 풀업으로 구성했다. 소스코드 /* USER CODE BEGIN WHILE */ while (1) { ttl74138(); /* USER CODE END WHILE */ /* USER C.. 2022. 5. 20.
STM32 , IC 74138 디코더 소스코드로 구현하기 ( Nucleo-144용 I/O 호환보드 사용 ) 결과물 다음과 같이 74138을 3x8디코더로 사용했을 때의 기능을 STM32보드 사용해 소스코드로 구현하기. 주의할 것은 디코더의 출력이 Active low라 default가 high고 해당되는 핀만 low신호가 나간다. 사용의 편리를 위해 Nucleo-144용 I/O 호환보드를 사용하였다. 출처 : https://cafe.naver.com/cortexworld/948 Nucleo-144용 I/O 보드 대한민국 모임의 시작, 네이버 카페 cafe.naver.com LED1~LED8 은 PD0~PD7 포트를 사용하고 SW1~SW4 는 PG0~PG3 포트를 사용하고 있다. 주의할 것은 이미 호환보드에서 사용하려고 reserved 된 포트가 있어서 내가 추가로 빼려면 겹치지 않게 잘 골라야한다. 아쉽게도 호.. 2022. 5. 20.
STM32 레지스터 직접 접근해서 LED를 이용한 카운터, 7 segment FND 출력 제어하기 먼저 PC8, 9, 10, 11 핀을 output 모드로 사용해 0x0-0xF 까지의 카운터를 구현하였고, PD0, 1, 2, 3, 4, 5, 6 핀을 output 모드로 사용해 FND에 0-9까지의 숫자를 출력하였다. 참고로 핀을 선택할때 내가 한 것처럼 이어진 핀을 선택해야 나중에 코드짜기가 쉽다. 그리고 아무리 MODER 에 원하는 값을 대입해도 현재 해당 GPIOx 핀이 MX 툴에서 활성화된게 아무것도 없으면 모드 설정이 안되더라.. 아마 MX_GPIO_Init(); 함수 내에 설정이 안되서 그런거 같은데 MODER은 MX툴 쓰는게 편한거 같다. unsigned char 배열을 사용해 0x0부터 0xF까지의 숫자를 미리 넣어주었다. /* USER CODE BEGIN 2 */ GPIOC->MODER.. 2022. 5. 19.
STM32CubeIDE , 디지털 논리회로 , 게이트 소스코드로 구현하기 AND / OR / NOT / NAND / NOR / XOR / XNOR GATE PFP 안에는 함수의 원형을 선언해둔다. /* USER CODE BEGIN PFP */ GPIO_PinState and(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState not(GPIO_PinState input); GPIO_PinState or(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState nand(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState nor(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState xor(GPIO_PinState input1, GPIO_PinState inp.. 2022. 5. 19.
STM32 레지스터에 접근해 GPIO 제어하기 보드명 : STM32F429ZI 직접 메모리를 들여다보고 레지스터에 접근해 출력을 제어해보도록 하겠다. 이전 게시글의 코드를 그대로 사용한다. 2022.05.19 - [MCU/STM32 (ARM Cortex-M)] - [STM32CubeIDE] STM32 개발보드 GPIO 제어하기 (by MCU/MPU Selector) [STM32CubeIDE] STM32 개발보드 GPIO 제어하기 (by MCU/MPU Selector) 보드명 : STM32F429ZI 개인 참고용 자료입니다. 새 프로젝트 생성 보드선택 프로젝트명 짓고 생성 프로젝트 매니저에서 다음 체크 주변장치 별로 소스파일, 헤더파일을 따로 생성해준다. RCC (Reset and eteo.tistory.com 아래와 같이 파란선에서 원하는 위치에 중.. 2022. 5. 19.
STM32CubeIDE ] STM32 개발보드 GPIO 제어하기 ( by MCU/MPU Selector ) 보드명 : STM32F429ZI 개인 참고용 자료입니다. 새 프로젝트 생성 보드선택 프로젝트명 짓고 생성 프로젝트 매니저에서 다음 체크 주변장치 별로 소스파일, 헤더파일을 따로 생성해준다. RCC (Reset and Clock Configuration) 을 수정 Debug는 Serial Wire로 설정 이 보도는 ST-Link/V2 가 보드에 포함되어 있어 외부에 별도 장비를 연결할 필요 없이 보드에 usb를 연결해서 디버깅할 수 있다. 타이머 설정 이더넷과 USB_OTG_FS는 disable 되어있는지 확인 클락 다음과 같이 설정 Clock은 External / Internal, Low speed / High Speed 에 따라 LSE, LSI, HSE, HSI 로 구분할 수 있다. LSE (32.76.. 2022. 5. 19.
C언어 ] 프로그래머스 Lv. 1 - 핸드폰 번호 가리기 문제 설명 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 phone_number는 길이 4 이상, 20이하인 문자열입니다. 입출력 예 phone_number return "01033334444" "*******4444" "027778888" "*****8888" 나의 풀이 #include #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(cons.. 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 자연수 뒤집어 배열로 만들기 문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345 [5,4,3,2,1] 나의 풀이 #include #include #include int* solution(long long n) { // 리턴할 값은 메모리를 동적 할당해주세요. long long copyn=n; int count=0; while(copyn>0){ copyn=copyn/10; count++; } int div=10; int* answer = (int*)malloc(sizeof(int)*count); for(int i=0;i 0) { answ.. 2022. 5. 17.
[ 아두이노 ] 핸드 제스처로 RC카 제어 ( 9축 기울기센서 , 블루투스 모듈 사용 ) 프로젝트 인원 : 2인 소요기간 : 4일 준비물 아두이노 2개 모터드라이버 L298N DC모터 4개, 차체 프레임 타이어 등 (알리익스프레스 구입) 9V & 1.5V AA 건전지 & 3.7V 2000mah 리튬이온배터리 HC-06 블루투스 모듈(슬레이브) HC-05 블루투스 모듈(마스터) mpu9250 9축 기울기센서 모듈 회로도 1 RC카 제어를 위한 데이터를 송신하는 부분 (Master) 1.5V 건전지 4개를 직렬로 연결한 배터리 홀더를 사용해 아두이노의 vin에 전원을 공급한다. 자이로 센서로 측정한 데이터를 i2c통신을 통해 읽어와서 실시간 핸드 무브먼트를 확인한다. AT명령어로 마스터 모드로 설정한 HC-05 블루투스모듈을 통해 현재의 핸드 제스처에 따라 RC카 컨트롤을 위한 데이터를 슬레이브.. 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 내적 문제 설명 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 제한사항 a, b의 길이는 1 이상 1,000 이하입니다. a, b의 모든 수는 -1,000 이상 1,000 이하입니다. 입출력 예 a b result [1,2,3,4] [-3,-1,0,2] 3 [-1,0,1] [1,0,-1] -2 #include #include #include // a_len은 배열 a의 길이입니다. // b_len은 배열 b의 길이입니다. int solution(int a[], size_t a_l.. 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 나머지가 1이 되는 수 찾기 문제 설명 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 3 ≤ n ≤ 1,000,000 입출력 예 n result 10 3 12 11 #include #include #include int solution(int n) { for(int i=1;i 2022. 5. 17.