전체 글 34

[SPI/TFT...] 디스플레이에 텍스트, 문자가 출력되는 원리

[SPI/TFT...] 디스플레이에 텍스트, 문자가 출력되는 원리 SPI를 사용하는 디스플레이는 여럿이 있습니다. ST7789 시리즈나 SSD1306가 있습니다. 이 디스플레이에서 텍스트(영어, 한글, 라틴, 유니코드 등)를 출력하는 원리는 동일합니다. 원리는 생각보다 간단합니다. 도트 하나하나 찍어서 연속적으로 출력합니다. 이는 문자뿐만 아니라 비트맵도 해당됩니다. 예를 들어 폰트의 width, height가 각각 24, 24로 설정된 폰트가 있다면, 한글 '가'는 다음과 같이 표현됩니다. 가로세로 모두 24픽셀로 특정 픽셀만 표시를 하여 '가'를 표시합니다. 그리고 한글 '가'를 표현하기 위해서는 아마 다음과 같은 코드들이 필요할겁니다. (아래 코드는 원리 이해의 예시로만 참고해주세요) // 가로 2..

[에러/arduino] avrdude: stk500_recv(): programmer is not responding

[에러/arduino] avrdude: stk500_recv(): programmer is not responding 아두이노 나노를 사용하다가 이런 에러 문구가 발생했습니다. 문구의 뜻으로는 프로그래머가 반응하지 않는다인데 이는 아두이노가 반응하지 않는다는 말입니다. 해결방법으로는 2가지가 있습니다. RX, TX 핀에 연결된 부분 확인 아두이노 보드에는 RX와 TX가 있습니다. 가장 많이 사용하는 아두이노 우노와 나노에는 0번 핀과 1번 핀이 Rx, Tx 역할을 합니다. 이 핀에 선이나 다른 장치들이 연결되어 있으면, 업로드하는 과정이 진행되지 않고, 에러를 띄우게 됩니다. 이 에러가 프로그래머가 반응하지 않는다는 에러입니다. 이 경우에는 연결된 선을 잠깐 제거하고 업로드가 완료되면 다시 연결하는 방법..

I2C와 SPI 통신, MOSI, MISO, SCL, SS, SDA 등의 핀 정리

I2C와 SPI 통신 I2C와 SPI 통신은 유사하지만 다른 통신 방법입니다. 따라서 소형 TFT 디스플레이들에 보면 SPI와 I2C가 겸용으로 되어 있는 부품들이 많습니다. I2C와 SPI를 겸용으로 사용하다 보니 핀 이름과 관련된 것부터 혼동이 있어서 정리하는 김에 글을 작성합니다. ※ 현재 SPI, I2C에서 사용되는 단어인 Master, Slave는 Controller(컨트롤러), Peripheral(주변기기)로 변경해서 사용하는걸 권장하는 추세이지만 여기에서는 기존에 사용했던 Master, Slave를 사용합니다. 현재 많은 부품들이 Controller, Peripheral보다는 Mastser, slave로 많이 사용되기 때문입니다. SPI 통신, Serial Peripheral Interfac..

[C/C++] -> 화살표 연산자와 . 도트(멤버) 연산자 차이점과 사용

-> 화살표 연산자와. 도트(멤버) 연산자 차이점과 사용 ptrStr->name = "aa"; 이런 화살표 연산자를 한 번쯤은 보셨을 겁니다. 사용상에 직감적으로 어느 구조체, 클래스에 name 변수에 접근한다는 것을 알 수 있으실 겁니다. 하지만 정확히 -> 와 . 의 차이점은 포인터인지 아닌지에 따라 결정됩니다. struct Character { int level; int rank; }; int main() { struct Character myCharacter = { 1, 100 }; myCharacter.level += 2; } 일반적인 구조체 모습입니다. Character 구조체에 level 변수에 접근하는 것은 도트(멤버) 연산자로 위와 같이 접근을 할 수 있습니다. struct Charact..

개발/C와 C++ 2022.09.03

[C/C++ Error] switch quantity not an integer

[C/C++ Error] switch quantity not an integer 스위치에는 정수 값을 넣어야 합니다. 정수 값을 넣지 않았을 경우에 발생하는 에러입니다. 저의 경우 실수 값을 넣었는데, 이를 해결하는 방법들을 아래에 작성합니다. 정수 변수로 변환_1 float num1 = 4.2; int num2 = num1; switch(num2) { ... case 4: ... break; ... } 정수 변수로 변환_2 float num = 4.2; switch((int)num) { ... case 4: ... break; ... }

개발/C와 C++ 2022.09.01

[Blender] 화면을 축소해 멀리 볼 때 모델링이 깨지는 이유, 해결법

[Blender] 화면을 축소해 멀리 볼 때 모델링이 깨지는 이유, 해결법 블렌더를 사용하다가 모형을 키우거나 화면을 축소하는 경우에 위 사진처럼 모델링의 페이스들이 깨져 보일 때가 있습니다. 화면을 축소에 축소를 하게 되면, 일반적인 모형의 테두리가 제대로 나오지 않거나 일부가 잘리는 듯한 모습을 볼 수 있습니다. Clip 범위 변경 블렌더에서 N 을 누르면 사이드 메뉴가 나옵니다. 여기에서 View 항목에서 Clip start와 end 값을 변경해 주면 보이는 모형이 변경됩니다. 위의 사진은 Clip end 값이 1100인 경우입니다. 위의 사진은 Clip end 값을 1500으로 변경하였을 때입니다. 아래의 Floor(격자 모양)이 보이게 됩니다. 이런 식으로 Clip의 범위를 설정해 주면 됩니다...

모델링/Blender 2022.08.30

[EPS32/memory] 플래시 메모리가 부족할 때 해결법

[EPS32/memory] 플래시 메모리가 부족할 때 해결법 보통 많이 사용하는 모델로는 ESP32-WROOM-32로 개발 키트에 많이 적용된 모델입니다. 이 모델에는 4BM 플래시 메모리가 있습니다. 하지만 코드를 짜서 업로드할때, 용량이 그렇게 크지도 않는데 용량 부족이라고 뜰 때가 있습니다. 이는 기본적으로 메모리 파티션이 1.4MB로 나누어져 있기 때문입니다. 아래는 기본 파티션에 대한 표입니다. #Name Type SubType Offset Size Flags nvs data nvs 0x9000 0x5000 otadata data ota 0xe000 0x2000 app0 app ota_0 0x10000 0x140000 app1 app ota_1 0x150000 0x140000 spiffs dat..

[Blender] 모따기, (bevel) 할 때 비율이 이상한 경우

모따기(bevel) 할 때 비율이 정상인 경우 보통 블렌더에서 모따기(bevel)를 할 때 위와 같은 이미지를 얻기를 원합니다. 하지만 종종 작업을 하다 보면 아래처럼 모서리가 깎이는 비율이 서로 다르게 나오는 경우가 있습니다. 모따기(bevel) 할 때 비율이 비정상인 경우 위 사진은 우리가 원하는 이미지가 아닙니다. 원인은 scale이 1이 아니라서 그렇습니다. 이 문제를 해결하기 위해서는 object 모드에서 scale을 1로 변경해야 하는데, 모양을 변경하지 않고 변경하는 메뉴가 있습니다. Object-apply-scale object 모드에서 상단 메뉴 중에 Object가 있습니다. 여기 하위 메뉴로는 Apply가 있고, 다시 하위 메뉴로 Scale이 있습니다. 현재 모형 그대로 Scale을 1..

모델링/Blender 2022.08.24

[C/C++] 메모리 할당(malloc, calloc, realoc, free)

[C/C++] 메모리 할당(malloc, calloc, realoc, free) C언어에서는 메모리를 할당할 때가 있습니다. 그때 사용하는 함수들입니다. allocation이 할당이라는 뜻을 가지고 있기에 함수의 이름으로 의미를 파악할 수 있습니다. 헤더파일에 있으며 다음과 같습니다. malloc (memory allocation - 메모리 할당) : 메모리를 할당한다. calloc (contiguous allocation - 연속 할당) : 메모리를 할당 및 초기화한다. realloc (resize allocation - 할당 크기 조절) : 메모리를 추가 할당한다. free : 메모리를 할당을 해제한다. 각각의 함수와 예시를 살펴보면 다음과 같습니다. void *malloc(size_t size); ..

개발/C와 C++ 2022.08.22

[에러/arduino] expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino

expected '=', ',', ';', 'asm' or 'attribute' before 'PROGMEM' arduino 아두이노를 작업하면서 혹은 C/C++을 작업하면서 종종 PROGMEM을 사용할 때가 있습니다. 이때 여러 파일에서 한 번에 작업하다 보면, 위와 같은 에러를 띄우기도 합니다. 저의 경우에는 pgmspace.h를 찾지 못해서 발생하는 에러였습니다. #ifdef ARDUINO_ARCH_AVR #include #else #include #endif 위와 같이 변경해 주면 에러 없이 진행됩니다.