글

라벨이 arduino인 게시물 표시

arduino 플랫폼 기반인 arduboy 게임기

Arduboy 프로젝트는 Arduino 플랫폼을 기반으로 합니다. Arduino는 오픈 소스 전자 프로토타이핑 플랫폼으로, 소프트웨어(IDE)와 하드웨어(아두이노 보드)로 구성되어 있습니다. Arduboy는 Arduino 호환 가능한 마이크로컨트롤러를 사용하여 개발되었으며, Arduino IDE를 사용하여 프로그래밍할 수 있습니다. 사용자는 Arduino 언어와 IDE를 사용하여 자신만의 게임을 개발하고, Arduboy에 업로드하여 실행할 수 있습니다. 이러한 접근성과 유연성 덕분에 Arduboy는 코딩, 게임 개발, 전자공학을 배우는 학생들과 취미로 하는 사람들에게 인기가 있습니다. Arduboy는 자체적인 전용 하드웨어를 가지고 있습니다. 이 하드웨어는 Arduino와 호환되는 마이크로컨트롤러를 기반으로 하지만, Arduboy는 특정한 형태와 크기, 버튼 배열, 디스플레이 등을 갖춘 완성된 제품입니다. 즉, 일반적인 Arduino 보드(예: Arduino Uno, Nano 등)로는 Arduboy의 독특한 디자인과 기능을 모두 구현할 수 없습니다. Arduboy를 사용하려면, Arduboy 기기 자체를 구매해야 합니다. 이 기기는 게임 개발, 학습, 또는 취미 목적으로 Arduino IDE와 함께 사용할 수 있도록 설계되었으며, 사용자가 직접 게임을 만들고 기기에 업로드할 수 있게 해줍니다. 따라서, Arduino 프로젝트와 관련된 지식을 활용하여 Arduboy용 게임을 개발할 수는 있지만, 실제 게임을 실행하기 위해서는 Arduboy 하드웨어가 필요합니다. 아두이노로 간단한 게임기를 만들고 계신다니 정말 멋진 프로젝트네요! 아두이노는 그 자체로도 매우 다양한 전자 프로젝트와 게임 개발에 활용될 수 있는 훌륭한 플랫폼입니다. Arduboy와 비슷한 프로젝트가 있다고 해도, 각 프로젝트는 개발자의 창의성, 디자인, 구현된 기능들에 따라 독특한 가치를 가집니다. 아두이노를 사용해 게임기를 만드는 과정에서는 다음과 같은 학습 기회가 있습니다: 프로그래밍과 소프트웨...

아두이노 납땜 배선 꿀팁

이미지
 이런식으로 배선했던데 보고 머리가 트이는 느낌이었다. 고민이 많았는데 좀 해결될거 같다. https://boldport.blogspot.com/2014/03/a-tribute-to-cordwood-construction-of.html 이글에서 찾음.. https://electronics.stackexchange.com/questions/234020/how-to-make-perfboard-circuits-more-compact 디지털핀 vs 아날로그핀 https://wikidocs.net/30776 프로미니 사용시 정전압이 아닐경우 RAW에 연결. 출처 아래 https://m.blog.naver.com/goldlux_/220806023120 헤더핀과 전선을 연결하는 영상 https://youtu.be/IkjMK26ROcM?si=VyIioxWLOBcPsBZt 핀헤더 소켓자르는 법 https://youtu.be/kQqw9en2Bx8?si=hQkGS0nhLIZWEGC3 쇠로된 거 하나 뽑고 거기 선 그어서 자른다. 전선 굵기 설정 우리가 흔히 접하는 브레드보드에 사용할 수 있는 전선의 지름은 약 0.6mm 정도이며, 연선으로는 AWG24 (전선이 여러 가닥으로 구성) 그리고 단선으로는 AWG22가 브레드보드에 적합  래핑와이어는 AWG30으로 이는 전원 공급이 아닌 신호를 전달하는 목적으로 사용하는 것이 적합 https://blog.naver.com/roboholic84/220594778514 perfboard 배선하는 영상 https://youtu.be/_ypW45Y8VSs?si=fAgSMoChtaxRh48X smd soldering영상 https://youtu.be/fYInlAmPnGo?si=XU722XUlv2qFUz0i

부품 납땜 준비

  promini soldering https://youtu.be/37mW1i_oEpA?si=A-6QadE6SFJZ-Emn 냉납: 크랙가서 납땜 잘 안된거 https://www.youtube.com/shorts/Wqg84eaaoT0?feature=share 케이블(끼리) 납땜 https://youtu.be/fb2KrEvJCSQ?si=Iz83k8TTpgSlqfdU 납땜의 기초(좋음) https://youtu.be/plVfzJjY-jc?si=7iURl-ngZiaONlNA 인두기 끝이 검게 산화되면 잘 안됨 https://youtu.be/rZRwlET1H-w?si=zYks9hS8jQGJd7NZ 전선 종류 단선 연선 https://www.youtube.com/shorts/UcZX-s3lEN4 엄청 세밀한 납땜 https://youtu.be/i5MNLTc7YhY?si=r5bRkACaqsflYoiB

브레드보드에 컴퓨터 만들기 유튜브

이미지
  Why build an entire computer on breadboards? https://youtu.be/fCbAafKLqC8?si=cRZgrvvD3RxnkVsu

아두이노 Error opening sketch: main file missing from sketch:

[Starting] Verifying sketch 'main.ino' [Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README. Error opening sketch: main file missing from sketch: /Users/.../pixel_friend_arduino/pixel_friend_arduino.ino [Warning] Failed to generate IntelliSense configuration. [Error] Verifying sketch 'main.ino': Exit with code=1\ 에러 메시지에 따르면, 여러 가지 문제가 발생하고 있습니다. 다음은 각 문제에 대한 해결책입니다: 1. **Output path is not specified**:    - 이 경고는 컴파일된 파일의 출력 경로가 지정되지 않았음을 나타냅니다. 이 문제는 VS Code의 설정에서 "Arduino: Output" 경로를 지정하여 해결할 수 있습니다.    - VS Code 설정으로 이동하여 "Arduino: Output"에 특정 폴더 경로를 지정하세요. 이렇게 하면 컴파일된 파일이 이 경로에 저장되어 재사용될 수 있습니다. 2. **Error opening sketch: main file missing from sketch**:    - 이 에러는 주 스케치 파일(`.ino` 파일)이 해당 폴더 내에 존재하지 않음을 의미합니다. 아두이노 프로젝트 폴더는 `.ino` 파일을 포함해야 하며, 이 파일 이름은 폴더 이름과 일치해야 합니다.    - `/Users/.../pixel_friend_arduino/` 폴더 안에 `pixel_friend_arduino.ino`라는 이름의 파일이 있는지 확인하세요. 파일 이름이 폴더 이름과 정확히 ...

Adafruit_GFX.h Adafruit_SSD1306.h

 Adafruit의 SSD1306 라이브러리를 사용하는 기본적인 방법을 설명드리겠습니다. 이 라이브러리는 SSD1306 기반의 OLED 디스플레이를 쉽게 제어할 수 있게 해주는 여러 기능을 제공합니다. 먼저, SSD1306 라이브러리와 필요한 Adafruit_GFX 라이브러리를 아두이노 IDE에 설치해야 합니다. **라이브러리 설치 방법:** 1. 아두이노 IDE를 엽니다. 2. 메뉴에서 "스케치" > "라이브러리 포함하기" > "라이브러리 관리..."를 선택합니다. 3. 라이브러리 관리자에서 "SSD1306"을 검색하고, Adafruit SSD1306 라이브러리를 찾아 설치합니다. 4. 동일한 방법으로 "GFX"를 검색하고, Adafruit GFX 라이브러리를 설치합니다. **기본적인 사용법:** ```cpp #include <Wire.h>      // I2C library #include <Adafruit_GFX.h>   // Adafruit 그래픽 핵심 라이브러리 #include <Adafruit_SSD1306.h> // SSD1306 라이브러리 #define SCREEN_WIDTH 128 // OLED 디스플레이 너비, 픽셀 단위 #define SCREEN_HEIGHT 64 // OLED 디스플레이 높이, 픽셀 단위 // SSD1306 디스플레이의 I2C 주소 (대부분 0x3D 또는 0x3C입니다) #define OLED_RESET     -1 // 리셋 핀이 필요 없으면 -1로 설정 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() {   if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 디스플레이 초기화     Serial.println(F("SSD...

아두이노 관련 초급 정보

## 저항 필요 이유 저항을 사용하는 주된 이유는 회로에서 전류를 제한하고, 다양한 전자 부품을 보호하기 위함입니다. 버튼과 같은 입력 장치에 저항을 사용하는 구체적인 상황은 다음과 같습니다: 1. **풀업 또는 풀다운 저항**: 버튼을 사용할 때 풀업 또는 풀다운 저항을 사용하는 것이 일반적입니다. 이는 버튼이 눌리지 않았을 때 입력 핀의 상태를 안정적으로 유지하기 위함입니다.        - **풀업 저항**: 버튼이 눌리지 않았을 때 입력 핀을 높은 전압(보통 VCC)으로 유지합니다. 버튼이 눌리면 회로가 닫히고 입력 핀이 접지로 떨어집니다.    - **풀다운 저항**: 반대로, 버튼이 눌리지 않았을 때 입력 핀을 접지로 유지합니다. 버튼이 눌리면 회로가 닫히고 입력 핀이 높은 전압으로 올라갑니다. 2. **노이즈 방지**: 저항 없이 버튼을 연결하면, 버튼이 눌리지 않았을 때의 입력 핀 상태가 불안정해져서 노이즈로 인한 가짜 신호가 발생할 수 있습니다. 이는 버튼을 누르지 않았는데 누른 것처럼 인식되는 현상을 초래할 수 있습니다. 3. **회로 보호**: 저항은 또한 회로를 보호하는 역할을 합니다. 예를 들어, 과도한 전류가 부품을 통과하는 것을 방지하여 부품이 손상되는 것을 막습니다. 회로가 작동하는 것처럼 보이더라도, 저항을 사용하지 않으면 장기적으로 불안정성이나 부품 손상의 위험이 있습니다. 따라서 안정적인 작동을 위해 적절한 저항의 사용이 권장됩니다. 풀업(pull-up)과 풀다운(pull-down) 저항은 전자 회로에서 버튼이나 스위치 같은 입력 장치의 상태를 명확하게 정의하기 위해 사용됩니다. 각각은 다음과 같은 역할을 합니다: 1. **풀업 저항(Pull-up Resistor)**:    - 버튼이나 스위치가 눌리지 않았을 때, 입력 핀을 높은 전압 상태(보통 VCC, 즉 전원 공급 전압)로 유지합니다.    - 버튼을 누르면, 회로가 닫히고 입력 핀이...

쇼트 나는 것 단락 주의

 전자전기 분야에서 "쇼트 나는 것"은 일반적으로 "단락(Short Circuit)"을 의미합니다. 단락은 전기 회로에서 전류가 의도하지 않은 경로를 통해 흐르는 현상을 말합니다. 이는 회로의 두 점이 부적절하게 연결되어 전기 저항이 비정상적으로 낮아질 때 발생합니다. 단락이 발생하면 다음과 같은 문제가 생길 수 있습니다: 1. **과도한 전류**: 단락으로 인해 회로를 통과하는 전류가 과도하게 증가하여, 전선이 과열되거나 녹아서 손상될 수 있습니다. 2. **장비 손상**: 전자 장비나 회로 자체가 과열되거나 과전류로 인해 손상될 수 있습니다. 3. **화재 위험**: 과도한 전류와 과열로 인해 화재가 발생할 위험이 있습니다. 단락을 방지하고 안전을 유지하기 위해서는 다음과 같은 조치를 취할 수 있습니다: - **회로 보호 장치 사용**: 퓨즈나 차단기 같은 회로 보호 장치를 사용하여 과도한 전류가 흐를 때 회로를 자동으로 차단합니다. - **적절한 배선과 절연**: 전선이 적절히 배치되고 절연되어야 합니다. - **정기적인 검사 및 유지보수**: 전기 설비와 회로의 정기적인 검사와 유지보수를 통해 단락의 위험을 최소화할 수 있습니다. 단락은 전자전기 분야에서 중요한 안전 이슈이며, 적절한 설계와 관리를 통해 예방할 수 있습니다. 배터리의 양극(+)과 음극(-)을 동시에 자르면서 두 선이 서로 접촉하게 되었다면, 이는 직접적인 단락 상태를 만들어낸 것입니다. 이렇게 되면 배터리의 전기가 매우 낮은 저항을 통해 순간적으로 큰 전류가 흘러, 불꽃이 튀거나 심한 경우에는 화재나 폭발의 위험도 발생할 수 있습니다. 이런 상황을 방지하기 위해서는 전기 회로나 배터리를 다룰 때 항상 주의해야 합니다. 특히 배터리의 양극과 음극을 동시에 접촉시키지 않도록 조심해야 하며, 필요하다면 절연 테이프나 기타 보호 장비를 사용하는 것이 좋습니다. 또한, 배터리나 전기 회로를 다룰 때는 항상 전문 지식과 안전 수칙을 숙지하고 작업해야 합니다.

아두이노 프로 미니 사용하기

 아두이노 프로 미니(Arduino Pro Mini)는 아두이노 우노(Arduino Uno)와 많은 부분에서 호환됩니다. 아두이노 프로 미니는 아두이노 우노와 동일한 마이크로컨트롤러(ATmega328)를 사용합니다. 그래서 대부분의 경우, 아두이노 우노용으로 작성된 코드와 라이브러리는 프로 미니에서도 작동합니다. ### 호환성 측면 - **마이크로컨트롤러**: 우노와 프로 미니 모두 ATmega328 마이크로컨트롤러를 사용합니다. - **핀 아웃**: 프로 미니의 핀 아웃(Pinout)은 우노와 유사합니다. 그러나 물리적 크기와 핀의 배치가 다를 수 있으므로, 이를 확인해야 합니다. - **기능**: 프로 미니는 아두이노 우노의 기능을 대부분 지원하지만, 프로 미니는 USB-to-Serial 변환기가 내장되어 있지 않아 별도의 USB-to-Serial 어댑터가 필요합니다. ### 주의사항 - **USB-to-Serial 변환**: 프로 미니에는 USB 포트가 없으므로, 컴퓨터에 연결하기 위해서는 USB-to-Serial 어댑터가 필요합니다. - **전원 공급**: 프로 미니는 별도의 전원 연결 지점을 가지고 있으며, 일반적으로 3.3V 또는 5V에서 작동합니다. 우노와 다르게 내장된 전원 규제가 없을 수 있으니, 전원 공급에 주의가 필요합니다. - **크기 및 폼 팩터**: 프로 미니는 우노보다 훨씬 작고, 일부 기본적인 연결이 빠져 있을 수 있습니다 (예: 전원 잭, 표준 USB 연결 등). 프로젝트를 프로 미니로 옮기는 경우, 이러한 차이점들을 고려하여 필요한 수정을 해야 할 수도 있습니다. 기본적으로, 프로그래밍 로직과 대부분의 라이브러리는 호환될 것입니다. 아두이노 프로 미니에 배터리를 연결하는 방법은 간단합니다. 아두이노 프로 미니는 일반적으로 3.3V 또는 5V 버전으로 제공되며, 배터리 연결 방법은 선택한 프로 미니의 버전에 따라 달라집니다. ### 3.3V 프로 미니 - **배터리 연결**: 3.3V 프로 미니의 경우, 일반적으로 3.7V...

아두이노 메모리 관리

아두이노 IDE에서 스케치를 업로드할 때 표시되는 "dynamic memory" 사용량은 프로그램이 시작할 때 이미 할당된 글로벌 변수와 정적 변수에 대한 메모리 사용량을 나타냅니다. 이는 프로그램 실행 전에 미리 계산되는 고정된 값입니다. 실행 중에 추가적으로 RAM을 사용하는 것은 다음과 같은 경우에 발생할 수 있습니다: 1. **로컬 변수**: 함수 내부에서 선언된 로컬 변수는 함수가 호출될 때 스택 메모리에 할당됩니다. 함수가 종료되면 이 메모리는 해제됩니다. 2. **동적 할당**: `malloc()`, `calloc()`, `new` 같은 함수를 사용하는 동적 메모리 할당은 실행 중에 RAM을 추가로 사용합니다. 이 메모리는 `free()`나 `delete`를 통해 명시적으로 해제해야 합니다. 3. **재귀 호출**: 재귀 함수는 각 호출마다 스택 메모리를 사용합니다. 너무 깊은 재귀 호출은 스택 오버플로를 일으킬 수 있습니다. 4. **String과 기타 동적 객체**: 아두이노의 `String` 객체는 내부적으로 동적 할당을 사용합니다. 문자열 연산(결합, 추가, 수정 등)은 실행 중에 추가 메모리를 사용할 수 있으며, 이는 메모리 단편화를 일으킬 수 있습니다. ### 실시간 메모리 사용 모니터링 아두이노에서 실시간으로 메모리 사용량을 모니터링하는 것은 기본적으로 간단하지 않습니다. 하지만, 몇 가지 방법으로 현재 사용 가능한 메모리의 양을 추정할 수 있습니다: - **자유 메모리 계산 함수**: 사용 가능한 힙(Heap)과 스택(Stack) 메모리 사이의 간격을 계산하는 함수를 작성하여 현재 남은 메모리의 양을 추정할 수 있습니다. - **외부 라이브러리 사용**: 메모리 사용을 모니터링하는 데 도움이 되는 여러 아두이노 라이브러리가 있습니다. 예를 들어, `MemoryFree` 라이브러리 등이 있습니다. ### 주의사항 - 동적 메모리 할당은 메모리 누수와 단편화를 일으킬 위험이 있으므로, 가능한 한 피하는 것이 좋습니다. ...

아두이노 버전 확인

아두이노 IDE에서 사용되는 C++ 표준 버전을 확인하려면, 아두이노 보드에 작은 스케치를 업로드하여 `__cplusplus` 매크로의 값을 출력해보면 됩니다. 이 값은 사용 중인 C++ 표준 버전을 나타냅니다. 다음과 같은 간단한 스케치를 사용하여 확인할 수 있습니다: ```cpp void setup() {     Serial.begin(9600);     while (!Serial) {} // 시리얼 포트가 연결될 때까지 기다립니다.     Serial.println(__cplusplus); // C++ 표준 버전을 출력합니다. } void loop() {} ``` 이 스케치를 아두이노에 업로드한 후, 9600의 보드 레이트로 시리얼 모니터를 열어보세요. 출력된 숫자는 C++ 표준 버전을 나타냅니다: - `199711L`: C++98 또는 C++03 - `201103L`: C++11 - `201402L`: C++14 - `201703L`: C++17 이 버전은 사용하고 있는 아두이노 보드와 아두이노 IDE의 버전에 따라 다를 수 있습니다. 아두이노 IDE는 일반적으로 가장 최근의 C++ 표준을 사용하지 않고, 다양한 마이크로컨트롤러 아키텍처에 걸쳐 안정성과 호환성을 우선시합니다. --- 참고로 내꺼 201103 c++11사용

c++ 문자열 함수

 아두이노에서 문자열(String) 비교를 수행하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 `String` 클래스에 내장된 `==` 연산자를 사용하는 것입니다. 또한 `equals()` 메서드나 C 스타일 문자열을 위한 `strcmp()` 함수도 사용할 수 있습니다. ### `String` 객체 사용하기 아두이노의 `String` 클래스는 `==` 연산자를 오버로드하여 문자열 비교를 쉽게 수행할 수 있게 합니다. ```cpp String str1 = "Hello"; String str2 = "World"; String str3 = "Hello"; if (str1 == str3) {     // str1과 str3는 같습니다. } if (str1 != str2) {     // str1과 str2는 다릅니다. } ``` `equals()` 메서드를 사용하는 방법도 있습니다. 이 메서드는 두 `String` 객체가 같은지 비교하고, 결과를 불리언 값으로 반환합니다. ```cpp if (str1.equals(str3)) {     // str1과 str3는 같습니다. } ``` ### C 스타일 문자열 비교하기 C 스타일 문자열(즉, `char` 배열)의 경우 `strcmp()` 함수를 사용할 수 있습니다. 이 함수는 두 문자열이 같으면 0을 반환합니다. ```cpp char charStr1[] = "Hello"; char charStr2[] = "World"; char charStr3[] = "Hello"; if (strcmp(charStr1, charStr3) == 0) {     // charStr1과 charStr3는 같습니다. } if (strcmp(charStr1, charStr2) != 0) {     // charStr1과 charStr2는 다릅니다. } ``` `strcmp()` 함수는 문자열이 정확히 같은 경우 0을 반환하며, 다...

XBM (X BitMap) vs Bitmap

  `XBM` (X BitMap) 형식과 일반 `Bitmap` 형식 사이에는 몇 가지 주요 차이점이 있습니다. ### XBM (X BitMap) - **텍스트 기반**: XBM 형식은 주로 텍스트 파일로 저장되며, C 언어 스타일의 구문으로 표현됩니다. 이는 배열 형태로 데이터가 저장되어 있으며, 이를 통해 비트맵 이미지가 표현됩니다. - **모노크롬**: XBM은 모노크롬 이미지를 위한 형식으로, 각 픽셀은 1비트로 표현됩니다 (켜짐 또는 꺼짐). - **프로그래밍 용이성**: XBM 형식은 프로그래밍에서 직접적으로 사용하기 쉬운 형태를 가지고 있습니다. C나 C++ 코드에 쉽게 포함시킬 수 있으며, 아두이노와 같은 마이크로컨트롤러 프로그래밍에서 자주 사용됩니다. ### Bitmap - **바이너리 기반**: 일반 `Bitmap` 파일은 바이너리 형식으로 저장됩니다. 이 형식은 이미지의 픽셀 데이터를 포함하며, 색상 정보, 해상도, 이미지의 크기 등 추가적인 메타데이터도 포함할 수 있습니다. - **컬러 및 그레이스케일 지원**: Bitmap 형식은 모노크롬뿐만 아니라 컬러 및 그레이스케일 이미지도 지원합니다. 각 픽셀은 여러 비트를 사용하여 색상을 표현할 수 있습니다. - **일반적인 이미지 형식**: Bitmap은 널리 사용되는 이미지 파일 형식으로, 많은 그래픽 편집 도구와 뷰어에서 지원됩니다. ### 결론 - `XBM`은 프로그래밍에서 사용하기 쉬운 텍스트 기반의 모노크롬 이미지 형식입니다. - 일반 `Bitmap`은 보다 복잡한 바이너리 기반 형식으로, 다양한 색상을 지원하며 일반적인 이미지 파일 형식으로 사용됩니다. 이 두 형식은 사용 목적과 요구 사항에 따라 선택될 수 있으며, 특히 임베디드 시스템이나 마이크로컨트롤러 프로그래밍에서는 XBM 형식이 더 적합할 수 있습니다.

#include "filename vs #include

C와 C++ 언어에서 `#include "filename"`와 `#include <filename>` 사이의 차이는 헤더 파일을 포함하는 방식에 대한 컴파일러의 검색 경로에 관한 규칙을 정의합니다. ### `#include "filename"` - 컴파일러는 먼저 소스 코드 파일이 있는 현재 디렉토리에서 `"filename"`을 찾습니다. - 만약 거기에 없다면, 표준 라이브러리 경로와 같은 시스템 포함 경로를 검색합니다. - 이 방식은 주로 사용자 정의 헤더 파일이나 프로젝트 내부에 있는 헤더 파일을 포함할 때 사용됩니다. ### `#include <filename>` - 컴파일러는 표준 라이브러리 경로와 같은 시스템 포함 경로에서 `"filename"`을 검색합니다. - 이 방식은 주로 표준 라이브러리 헤더 파일이나 외부 라이브러리의 헤더 파일을 포함할 때 사용됩니다. ### 적용 - C나 C++ 프로그래밍에서, 표준 라이브러리(예: `iostream`, `stdio.h`)나 외부 라이브러리 헤더 파일을 포함할 때는 `<>`를 사용하는 것이 일반적입니다. - 프로젝트 내부의 사용자 정의 헤더 파일을 포함할 때는 `""`를 사용합니다. 이러한 규칙은 컴파일러가 헤더 파일을 더 효율적으로 찾을 수 있도록 도와주며, 표준 라이브러리와 사용자 정의 코드 사이의 구분을 명확하게 합니다.

unsigned int signed int

 unsigned int signed int 옛날에 배울때는 감흥이 없었는데 이걸 어디다 쓰지 이런 기분이었는데 아두이노 공간 줄이면서 적절한걸로 맞춰 쓰니까 뭔가 딱 떨어지는 쾌감과 두근거림이 있다

멋진 led 디스플레이 + 회전 조합

 멋지다 https://youtu.be/HKpBhE7QVAI?si=6VIH1XuIGPFyXrgS

xbm 아두이노용 에디터

 xbm 아두이노용 에디터 https://xbm.jazzychad.net/? 이런게 있는줄 몰랐다

아두이노 랜덤 함수 random()

 랜덤 함수 사용법 https://www.arduino.cc/reference/en/language/functions/random-numbers/random/ long randNumber; void setup() { Serial.begin(9600); // if analog input pin 0 is unconnected, random analog // noise will cause the call to randomSeed() to generate // different seed numbers each time the sketch runs. // randomSeed() will then shuffle the random function. randomSeed(analogRead(0)); ////여기서 시드 생성인데 아날로그 연결 안해도 지정해주면 //거기서 나오는 전기 신호로 랜덤 값으로 시드 지정 } void loop() { // print a random number from 0 to 299 randNumber = random(300); Serial.println(randNumber); // print a random number from 10 to 19 randNumber = random(10, 20); Serial.println(randNumber); delay(50); } `randomSeed(analogRead(0));`는 아두이노에서 `random()` 함수의 난수 생성 패턴을 더 무작위로 만드는 데 사용됩니다. `randomSeed()` 함수는 난수 생성기에 "시드(seed)" 값을 제공하여 난수 생성의 시작점을 설정합니다. 이 시드 값에 따라 생성되는 난수의 시퀀스가 결정됩니다. ### 왜 필요한가? - **동일한 시퀀스 방지**: 아두이노를 리셋하거나 새로 시작할 때마다 같은 난수 시퀀스가 반복되는 것을 방지합니다. `random()` 함수는 기본적으로 동일한 시드 값을...

아두이노 ram dynamic memory 절약 팁

Progmem에 스트링 옮기기  https://www.arduino.cc/reference/en/language/variables/utilities/progmem/ string 보다는 char string으로 길이 고정해서 사용하기

u8g2 사용하기

이미지
# 용량관리 아두이노에서 "Global variables use 1669 bytes (81%) of dynamic memory"라는 메시지는 사용 중인 글로벌 변수가 동적 메모리(RAM)의 상당 부분을 차지하고 있음을 나타냅니다. 이는 메모리 부족 문제로 이어질 수 있으므로, 메모리 사용량을 최적화하는 것이 중요합니다. 메모리 사용량을 줄이기 위해 시도할 수 있는 몇 가지 방법은 다음과 같습니다: 1. **변수 크기 최적화**: 변수를 선언할 때 필요한 최소 크기의 데이터 타입을 사용합니다. 예를 들어, `int` 대신 `byte`나 `uint8_t`를 사용할 수 있습니다. 2. **정적 메모리 사용**: 가능하면 `PROGMEM`을 사용하여 상수 데이터(예: 문자열, 설정값)를 플래시 메모리에 저장합니다. 이렇게 하면 이러한 데이터가 RAM을 차지하지 않습니다. 3. **로컬 변수 사용**: 글로벌 변수 대신 함수 내부에 로컬 변수를 사용합니다. 로컬 변수는 해당 함수가 실행될 때만 메모리를 차지하고 함수가 종료되면 메모리가 해제됩니다. 4. **동적 할당 최소화**: `malloc`이나 `new`를 사용하는 동적 메모리 할당을 최소화합니다. 동적 할당은 메모리 관리를 복잡하게 만들고 메모리 누수의 위험을 증가시킵니다. 5. **불필요한 라이브러리 제거**: 사용하지 않는 라이브러리를 코드에서 제거합니다. 라이브러리는 종종 추가적인 메모리를 사용하기 때문입니다. 6. **배열 크기 조정**: 배열을 사용하는 경우, 배열의 크기를 실제로 필요한 최소한으로 조정합니다. 7. **싱글턴 패턴 사용**: 여러 인스턴스가 필요하지 않은 객체에 대해 싱글턴 패턴을 사용하여 단 하나의 인스턴스만을 유지합니다. 8. **코드 최적화**: 불필요한 코드를 제거하고, 효율적인 알고리즘을 사용하여 메모리 사용을 줄입니다. 9. **디버깅 메시지 최소화**: 시리얼 통신을 통한 디버깅 메시지는 문자열을 많이 사용할 수 있으므로, 이를 최소화합니다. 메모리 사용량...