개발자가 원했습니다! 우리는이 프로젝트를 도와주기 위해 재능있는 React 및 C ++ 개발자를 찾고 있습니다. 코드를 확인하고 관심이 있으시면 [email protected]으로 문의하십시오.

Davepl, 9/19/2021
NightDriversTrip은 ESP32 마이크로 컨트롤러에 업로드하는 플래시 프로그램을 구축하기위한 소스 코드 패키지입니다. 칩 핀에 연결된 WS2812B 스타일 LED의 최대 8 채널을 구동하고 멋진 색상과 패턴 및 디자인을 표시 할 수 있습니다. 마이크가 장착 된 모듈에 대한 오디오/음악/비트 반응 효과를 포함하여 LED 스트립에 표시되도록 구성 할 수있는 수많은 효과가 있습니다. 또한 포트 49152에서 기본적으로 열리는 TCP/IP 소켓을 통해 간단한 LZ 코압 (또는 비 압축) 형식으로 LED에 대한 색상 데이터를 선택적으로 수신 할 수 있습니다. ESP32는 NTP를 사용하여 클럭을 동기화합니다.
Nightdriver는 WS2812B 스타일 스트립과 HUB75 스타일 행렬을 모두 구동 할 수 있습니다.
최근에는 웹 설치 프로그램이 웹 브라우저를 사용하여 대부분의 Nightdriver 프로젝트를 지원되는 장치에서 플래시 할 수있는 프로젝트에 추가되었습니다. 이것이 시작하는 방법이라면 다음 섹션을 참조하십시오.
지원되는 장치에 대부분의 NightDriver 프로젝트를 설치하는 데 사용할 수있는 웹 응용 프로그램이 제공되었습니다. 이를 통해 ESP32 장치에서 프로젝트를 빠르게 플래시하고 Wi -Fi에 연결하고 즉시 소스 코드로 작업하지 않고도 사용을 시작할 수 있습니다.
설치 프로그램에는 웹 직렬을 지원하는 브라우저가 필요합니다. 글을 쓰는 시점에서 이러한 지원이 포함 된 브라우저는 최근 버전의 Chrome, Edge 및 Opera입니다.
다음 단계를 따라 플래시를하고 지원되는 경우 장치에 Wi -Fi를 설정하십시오.
USB 케이블을 사용하여 장치를 컴퓨터에 연결하십시오.
브라우저의 다음 URL로 이동하십시오. https://plummerssoftwarellc.github.io/nightdriverstrip. 그런 다음 다음과 같은 화면을 표시해야합니다. 
드롭 다운 목록에서 장치 ( "M5Sticc Plus"와 같은)를 선택하십시오. 해당 장치에 지원되는 프로젝트가있는 두 번째 드롭 다운이 나타납니다.
두 번째 드롭 다운에서 플래시하려는 프로젝트를 선택하십시오. 그렇게하면 연결 버튼이 아래에 나타납니다. 각 프로젝트의 레이블에는 해당 빌드에서 활성화 된 주요 기능을 표시합니다. 각 기능 문자에 대한 전설은 프로젝트 드롭 다운 아래에 표시됩니다.
연결 버튼을 클릭하십시오. 대화 상자는 직렬 포트를 선택하도록 요청합니다. 시스템에 따라 시스템은 하나 또는 목록 만 표시 할 수 있습니다. 다중 표시가 표시되면 일반적으로 "USB Serial Port (COMN)"라고 불리는 것이 일반적입니다. 올바른 포트를 선택하고 연결을 클릭하십시오.
새로운 대화가 표시됩니다. 그것이 제공하는 옵션 중 하나는 "<project> for <device>"입니다. 해당 옵션을 클릭하십시오.
기기를 지우고 싶은지 묻는 대화 상자가 표시됩니다. NightDriversTrip을 장치에 처음으로 플래시 할 때 상자를 확인하거나 깨끗한 설치를 플래시하려는 경우를 확인하십시오. 모든 설정을 기본값으로 재설정합니다. WiFi 구성은 지우기를 선택했는지 여부를 지워집니다. 다음을 클릭하십시오.
이제 장치를 플래시 할 수 있도록 확인해야합니다. 설치를 클릭합니다.
설치 진행을 보여주는 대화 상자가 나타납니다. 일반적으로 약 2 분이 걸립니다. 플래시가 완료되면 다음을 클릭하십시오.
이 시점에서 네 가지가 발생할 수 있습니다.
장치가 Wi -Fi를 지원하지 않으면 지점 12로 건너 뛸 수 있습니다.
Wi -Fi 연결 정보 대화 상자에서 SSID 및 비밀번호를 선택하거나 입력하십시오. 연결을 클릭합니다. 경우에 따라 성공적인 연결이 실제로 이루어진 후 WiFi 연결 대화 상자가 다시 나타납니다. 이 경우 Skip을 클릭합니다. Wi-Fi가 실제로 성공적으로 연결된 반면 타임 아웃이보고 될 수도 있습니다. 이 경우 뒤로 클릭하십시오.
이제 플래시 한 프로젝트의 세부 사항을 보여주는 대화 상자가 나타납니다. 또한 다시 플래시하고 장치의 로그 및 콘솔을 표시하는 옵션을 제공합니다. 또한 장치가 WiFi를 지원하는 경우 장치의 웹 응용 프로그램을 방문하거나 (ON-DEVICE 웹 서버도 활성화 된 경우) WiFi 설정을 변경할 수있는 옵션을 사용할 수 있습니다. 웹 서버/웹 애플리케이션이 포함 된 장치 이미지를 플래시 한 경우 WiFi 네트워크에 연결 한 후 1 분 정도 걸릴 수 있습니다.
이미 플래시 된 장치에서 WiFi 구성을 변경하려면 다음 단계를 사용하십시오.
USB 케이블을 사용하여 장치를 컴퓨터에 연결하십시오.
브라우저의 다음 URL로 이동하십시오. https://plummerssoftwarellc.github.io/nightdriverstrip.
드롭 다운 목록에서 장치 ( "M5Sticc Plus"와 같은)를 선택하십시오. 해당 장치에 지원되는 프로젝트가있는 두 번째 드롭 다운이 나타납니다.
두 번째 드롭 다운에서 앞서 플래시 한 프로젝트를 선택하십시오. 그렇게하면 연결 버튼이 아래에 나타납니다.
연결 버튼을 클릭하십시오. 대화 상자는 직렬 포트를 선택하도록 요청합니다. 시스템에 따라 시스템은 하나 또는 목록 만 표시 할 수 있습니다. 다중 표시가 표시되면 일반적으로 "USB Serial Port (COMN)"라고 불리는 것이 일반적입니다. 올바른 포트를 선택하고 연결을 클릭하십시오.
새로운 대화가 표시됩니다. "Wi-Fi에 연결"또는 "Wi-Fi 변경"옵션을 아직 표시하지 않으면 "Logs & Console"창을 열고 로그 라인이 나타날 때까지 기다리십시오. 그런 다음 뒤로 클릭하여 창을 닫습니다. "Wi-Fi에 연결"또는 "Wi-Fi 변경"옵션이 표시되면 클릭하십시오.
Wi -Fi 연결 정보 대화 상자에서 SSID 및 비밀번호를 선택하거나 입력하십시오. 연결을 클릭합니다. 경우에 따라 성공적인 연결이 실제로 이루어진 후 WiFi 연결 대화 상자가 다시 나타납니다. 이 경우 Skip을 클릭합니다. Wi-Fi가 실제로 성공적으로 연결된 반면 타임 아웃이보고 될 수도 있습니다. 이 경우 뒤로 클릭하십시오.
설치 프로그램에 포함 된 이미지는이 저장소에서 소스 코드의 현재 상태를 사용하여 구축됩니다. 사용하려는 프로젝트의 구성 (구성)에서 변경하고 싶은 것이 있으면 다음 단계로 이동해야합니다.
다음 단계는 Nightdriverstrip 인 응용 프로그램의 구조에 대한 지식이 매우 빠르게 필요하기 때문에 NightDriverstrip 코드베이스에 대한 소개를 읽는 것이 좋습니다.
Wi -Fi가있는 장치에서 NightDriverstrip은 프로젝트의 일부인 웹 UI를 호스팅하는 웹 서버를 시작할 수 있습니다. 실행중인 효과를보고 변경하고 장치의 라이브 성능 통계를 얻는 데 사용될 수 있습니다.
웹 브라우저를 열고 주소 표시 줄에 장치의 IP 주소를 입력하여 웹 UI에 액세스 할 수 있습니다. 로드되면 화면 왼쪽의 아이콘을 사용하여 UI 내에서 뷰를 켜고 끄는 데 사용될 수 있습니다.
웹 UI에 대한 자세한 내용은 자체 readme.md에서 확인할 수 있습니다.
웹 UI 외에도 웹 서버는 REST와 같은 API도 게시합니다. 무엇보다도 다양한 구성 설정을 읽고 변경하여 변경할 수 있습니다. API에 대한 자세한 내용은 rest_api.md에서 확인할 수 있습니다.
다음을 수행하는 것이 좋습니다.
DEMO 구성을 구축하십시오. 이 작업에 필요한 작업에 대한 일부 포인터는 아래에서 찾을 수 있습니다.globals.h 또는 Platformio.ini 파일에서 기능 활성화를 시작하십시오. 기능을 참조하십시오. include/secrets.example.h의 사본을 만들어 Wi -Fi SSID 및 비밀번호를 포함/비밀로 설정되어 있는지 확인하십시오.
포함/비밀로 설정했는지 확인하십시오.
enable_wifi 정의를 Globals에서 1로 설정하여 Wi -Fi를 활성화하십시오.
# define ENABLE_WIFI 1아래의 기능 정의 섹션에 설명 된대로 플랫폼 오니 파일에서 구성 할 수도 있습니다.
이들은 NightDriversTrip의 주요 기능을 사용합니다. Platformio.ini의 build_flags 또는 Globals.h에서 정의하십시오. 참고 : 일부 정의는 보드별로 구체적이며 아래에 표시됩니다.
| 기능 정의 | 설명 |
|---|---|
| enable_wifi | Wi -Fi에 연결하십시오 |
| incoming_wifi_enabled | 들어오는 색상 데이터 및 명령 수락 |
| enable_webserver | 내부 웹 서버를 켭니다 |
| time_before_local | 램프가 시간이 지나고 로컬 콘텐츠를 표시하기 몇 초 전에 몇 초 |
| enable_ntp | 웹에서 시계를 설정하십시오 |
| enable_ota | 에어 플래시 업데이트를 통해 수락하십시오 |
| 하드웨어 별 | 설명 | 지원되는 보드 |
|---|---|---|
| use_m5display | 내장 LCD에서 통계 표시를 활성화하십시오 | M5Stick-C 및 M5Stic-C Plus |
| use_oled | OLED에 내장 된 통계 표시를 활성화하십시오 | Heltec Wi -Fi 키트 32 |
| use_lcd | 외부 ILI9341 LCD에서 통계 표시를 활성화하십시오 | WROVER32 |
| use_tftspi | 외부 TTGO LCD에서 통계 표시를 활성화합니다 | ESP32dev |
| enable_audio | 마이크에서 오디오를 듣고 처리하십시오 | M5Stick-C 및 M5Stic-C Plus |
| enable_remote | IR 원격 제어 | IR 하드웨어가 필요합니다 |
Platformio.ini의 예제 ( -D 로 플래그를 접두사, 예를 들어 ENABLE_WIFI=1 이됩니다 -DENABLE_WIFI=1 )
build_flags = - DENABLE_WIFI =1Globals.h의 예 :
# define ENABLE_WIFI 1 새로운 효과를 추가하려면 :
LEDStripEffect (또는 기존 효과 클래스)에서 파생되면 유일한 중요한 기능에서 좋은 일이 발생합니다 Draw() . 내장 효과가 무엇을하는지 확인하지만 간단히 말해서 기본적으로 각각 24 비트 컬러 트리플렛을 나타내는 CRGB 객체 배열로 그려집니다. 완료되면 CRGB 배열이 LED로 전송되고 즉시 다음 프레임을 요청받습니다. 드로우 방법은 약 30ms 어딘가에 있어야하며 이상적으로는 균형을 잡기 위해 delay() 합니다. 바쁜 루프로 기본적으로 반복적으로 그릴 수 있지만 필요하지 않습니다.#define effects.h 추가하십시오. 각 효과 클래스는 하나의 효과 번호 만 필요하며 선택한 번호가 다른 효과 클래스에서 아직 사용되지 않도록하십시오! 효과 클래스와 관련 효과 번호 간의 링크에 대한 자세한 내용은 effects.h 찾을 수 있습니다.LoadEffectFactories() ( DEMO 와 같은 빌드 구성 섹션 아래) effects.cpp 생성 된 효과 목록에 클래스를 추가하십시오. ADD_EFFECT() 매크로는 새 효과의 효과 번호와 유형 이름을 매개 변수로 기대합니다. 추가 매개 변수는 생성 될 때 효과의 생성자로 전달됩니다. SPIFFS의 JSON 파일에서 ICEC EFFERMANGER 인스턴스가있는 경우 SPIFFS의 JSON 파일에서 ICFECT 테이블을 생성하는 Global EffectManager 인스턴스가 있습니다. 그런 다음 LoadEffectFactories() 에 등록되었지만 JSON 파일에는 포함되지 않은 다른 효과를 추가합니다. 그런 다음 DEFAULT_EFFECT_INTERVAL 에 의해 제어되는 속도로 이러한 효과 중에 회전합니다. 효과는 활성화 될 때는 알림을받지 않으며 필요할 때 그만 두어야합니다.
각 LED 채널에는 LEDStripGfx 인스턴스가 관련되어 있습니다. _GFX[0] 은 LED_PIN0 과 관련된 LEDStripGfx 등입니다. _GFX[0]->leds() 호출하여 PIN0의 LED 버퍼를 얻을 수 있으며 _GFX[0]->GetLEDCount 픽셀이 포함됩니다. fill_solid , fill_rainbow , setPixel 및 기타 드로잉 기능을 호출하여 원시 바이트를 만지지 않고 버퍼에 그릴 수 있습니다.
가장 간단한 구성 인 DEMO 단일 미터 스트립 144 개의 LED와 ESP32에 연결된 전원 공급 장치가 있다고 가정합니다. 그것은 부팅하고, LoadEffectFactories() 함수에서 단일 RainbowFillEffect 찾아서 Draw() 메소드를 반복해서 호출하여 CRGB 배열을 업데이트하기 전에 LED로 전송합니다. 올바르게 작동하면 LED 스트립에 스크롤 레인보우 팔레트를 그려야합니다.
여기에서 단순히 '데모'라고 불리는 가장 간단한 구성은 보드 특정 빌드 환경에서 제공합니다. 이러한 환경의 목록은 'Python3 Tools/Show_envs.py'를 실행하여 볼 수 있으며,이 글을 쓰는 시점에서 'Demo'의 하드웨어 특정 변형에는 다음이 포함되어 있음을 독자에게 알려줍니다.
이러한 빌드 유형은 PIO에 대한 '-e'인수 또는 플랫폼 IDE/vs 코드 내부의 메뉴 옵션에서 선택할 수 있습니다.
효과 테이블은 정기적 인 간격으로 SPIFFS의 JSON 파일에 지속되어 재부팅에 걸쳐 효과 상태 (실제로 전체 효과 목록)를 유지합니다. 이는 주로 NightDriverstrip에 대한 업데이트를 준비하는 데있어서, EFFECT 목록의 구성을 장치 웹 응용 프로그램을 사용하여 개별 효과의 구성을 변경할 수 있습니다. 이를 용이하게하기위한 API 엔드 포인트는 이미 사용할 수 있고 사용할 준비가되어 있습니다 (아래 장치 웹 UI 및 API 참조).
이를 통해 SerializeToJSON() 의 재정의와 해당 사막화 생성자는 기본적으로 LEDStripEffect 에 의해/to json에서 직렬화 된 특성보다 더 많은 시간을 지속하려면 (또는 원하는) 효과를 제공해야합니다.
프로젝트 전체에서 JSON 처리 및 (DE) 직렬화에 사용되는 라이브러리는 Arduinojson입니다. 무엇보다도 이것은 다음을 의미합니다.
Arduinojson의 협약에 따라 SerializeToJSON() 함수는 Arduinojson 함수 ( JsonObject::set() )가 false 반환하여 버퍼 메모리가 부족한 것을 나타내는 경우를 제외하고 는 true 반환 해야합니다 . SerializeToJSON() 함수 Returning false 전체 직렬화 버퍼의 증가 및 직렬화 프로세스의 재시작을 유발합니다.
개별 클래스 인스턴스의 (DE) 직렬화 작업에 필요한 메모리는 다음 중 하나를 작성하여 미리 예약해야합니다.
StaticJsonDocument< 버퍼 크기 >() . 이것은 작은 버퍼 크기 (1024 바이트보다 작은)에만 사용할 수 있습니다.AllocatedJsonDocument( 버퍼 크기 ) .실제로 필요한 메모리의 양은 (DE) 직렬화 된 속성의 숫자, 유형 및 내용에 따라 다르며 효과적으로 약간의 추측 게임입니다. 즉, 코드베이스 전체에서 볼 수있는 값도 교육을받은 추측을 의미합니다. 직렬화 된 속성이 마지막으로 생성 된 JSON에 마지막으로 나타나지 않으면 직렬화 프로세스가 버퍼 메모리가 부족하여 버퍼 메모리를 증가시켜야한다고 가정하는 것이 합리적입니다.
JSON (DE) 직렬화와 관련된 세부 사항을 더 잘 이해하려면 Arduinojson 문서의 "첫 번째 연락처"섹션에서 각 튜토리얼을 살펴볼 수 있습니다.
예를 들어 개발 중에 보드의 (JSON-PERISTED) 효과 목록은 효과에 추가 된 효과와 동기화 할 수 있습니다 .CPP (특히 LoadEffectFactories() 함수에서) 지저분하거나 성가 시게됩니다. 이 경우 네트워크를 통해 보드의 효과 목록을 기본값으로 재설정 할 수 있습니다. 이를 위해서는 보드를 Wi -Fi에 연결해야하고 웹 서버를 실행해야합니다.
http 양식 게시물을 http : // <device_ip>/다음 필드 세트로 재설정하여 재설정을 수행 할 수 있습니다. "일반"컬이있는 시스템에서 다음 명령은 다음을 수행해야합니다.
curl -d " effectsConfig=1&board=1 " -X POST http:// < device_IP > /reset이 재설정을 수행하는 기능이 향후 웹 UI 업데이트에서 추가 될 수 있습니다.
또한 지속 된 효과 목록을 "무시"할 수도 있고 시작시 표준 효과 목록을 항상로드 할 수도 있습니다. 이 작업을 수행하는 방법에 대한 문서는 앞서 언급 한 LoadEffectFactories() 기능의 상단을 향해 사용할 수 있습니다.
인터넷에서 데이터를 가져와야하는 효과를 개발하는 경우 g_ptrSystem->NetworkReader() Global Reference를 통해 사용할 수있는 NetworkReader 클래스에 네트워크 리더 기능을 등록 할 수 있습니다. PatternSubscribers 또는 PatternWeather 효과를 영감의 원천으로 사용할 수 있습니다. PatternStocks는 개인 서버에서 라이브 (15 분 지연) 주식 견적을 당깁니다.
이 프로젝트는 Platformio를 사용하여 구축 할 수 있습니다. Visual Studio Code 위에 구축 된 플랫폼 사용 가능한 플랫폼이 있습니다. 명령 줄 플랫폼 코어 도구가 포함되어 있습니다. IDE를 사용하지 않는 경우 스스로 설치할 수도 있습니다.
프론트 엔드 애플리케이션 (모든 플랫폼 빌드의 일부인)을 컴파일하려면 NPM이 포함 된 최근 버전의 NodeJS가 필요합니다. Nodejs 웹 사이트에서 다운로드 할 수 있습니다. NodeJ를 설치하는 지원 방법에 대한 지침도 제공됩니다. 읽고 따르십시오.
운영 체제/Distribution의 기본 패키지 관리자를 사용하여 Nodejs를 설치하면 필요한 것보다 훨씬 오래된 Nodejs 버전을 남길 수 있습니다.
응용 프로그램은 NPM 버전 8.13.2로 노드 버전 16.15.1 및 18.17.1에서 테스트되었습니다. 최신 버전도 원칙적으로 작동해야합니다.
Frontend 응용 프로그램 작업에 대한 자세한 내용은 사이트/readme.md를 참조하십시오.
IDE 또는 코어가 설치되면 Project/Repository 디렉토리를 입력하고 다음 명령을 발행하여 NightDriverstrip을 명령 쉘에서 구축 할 수 있습니다.
pio run -e demo
이것은 demo 구성을 구축합니다.
pio찾을 수없는 오류가 발생하면 경로에 추가해야 할 수도 있습니다.
사용 가능한 모든 구성을 구축하려면 다음 명령을 사용하십시오 (시간이 걸릴 수 있음).
pio run
효과로 사용할 수있는 파일 시스템을 빌드하고 업로드하려면 (현재는 없지만) Platformio를 사용하여 Spiffs 이미지를 보드의 플래시에 빌드하고 업로드해야합니다. 플랫폼 사용자 인터페이스를 사용하거나 pio 명령 줄 도구를 사용하여이를 수행 할 수 있습니다.
pio run --target buildfs --environment <project name>
pio run --target uploadfs --environment <project name>
이 저장소에는 프로젝트를 구축하는 동안 또는 후에 다양한 작업을 수행하기위한 여러 스크립이 포함되어 있습니다. tools 디렉토리에 포함되어 있습니다. 스크립트는 프로젝트의 기본 디렉토리에서 시작될 것으로 예상됩니다. 그래서 사용 :
tools/buddybuild.sh대신 :
cd tools
./buddybuild.sh소켓에 색상 데이터를 보내는 간단한 것을 작성하십시오. 형식은 매우 기본적입니다 : 어떤 채널, 그리기가 얼마나 많은 LED 수, 언제 그려야 할시기 및 색상 데이터 자체. 데이터 전에 올바른 헤더를 보내는 한 제로 타임 스탬프로 압축되지 않은 데이터를 보낼 수 있습니다. 제로 타임 스탬프가있는 데이터는 버퍼링없이 즉시 그려집니다.
| 바이트 | 기능 | |
|---|---|---|
| 0, 1 | 사령관 | ( WIFI_COMMAND_PIXELDATA64 인 3으로 설정하십시오.) |
| 2, 3 | channelid | (단일 채널의 경우 1로 설정하지만 0은 역사적 이유로도 작동합니다) |
| 4-7 | 길이 | (24 비트 PIXELS 수) |
| 8-15 | 초 | (0으로 설정) |
| 16-24 | 마이크로 | (0으로 설정) |
| 25+ | RGB | (24 비트 RGB 색상 데이터, 위의 길이에 지정된 PIXEL 당 하나) |
ENABLE_WIFI 및 inable_wifi INCOMING_WIFI_ENABLED 로 구축 된 경우 칩이 WiFi 연결 및 DHCP 주소를 얻을 수 있다면 포트 49152에서 소켓을 열고 위에서 설명한 패킷을 기다립니다.
초당 일련의 24 프레임 (또는 500 LED 미만의 경우 30)을 생성하고 타임 스탬프를 "지금"과 초당 1/2로 설정하십시오. Wi -Fi를 통해 칩에 보내면 각 패킷이 제공 한 타임 스탬프가 정해진 상태에서 1/2 초로 꾸준히 그려집니다.
전체 공개 : Amazon Associate로서 Plummerssoftwarellc는 자격을 갖춘 구매에서 수수료를받습니다. 구매 가격에 추가되지 않으며 비용이 전혀 증가하지 않습니다. 또한, 이러한 판매가 포함 된 Dave 's Garage Channel의 2021 년 이익은 UW Autism Center로갑니다.
복잡한 가이드 라인을 제작하는 대신 오픈 소스 협업이 프로젝트에 가져 오기를 희망합니다. 사람들은 중요한 기능을 추가하고 코드의 결함과 단점을 수정할 것입니다. 그들이 기능을 추가 할 때는 기존 코드에서 작업이 수행되는 방식과 일치하는 방식으로 기능을 수행합니다. 그들은 자신의 이미지로 모든 것을 재구성하고 다시 작성하려는 충동에 저항하고 대신 소스 코드 스래쉬 및 변화를 줄이면서 기능 개선을 극대화하기위한 노력을 기울였습니다.
일관되지 않은 이름 지정을 고려해 봅시다. 일부는 Camelcase이고 일부는 소스에 따라 Pszhungarian 및 On입니다. 나는 단일 표준 TBD로 모두 업데이트 된 것을 선호합니다. TBD가 결정될 때까지 나는 Win32 표준에 기대어 있습니다.
함수에서 작업 할 때는 기능 스타일로 작동합니다. 수업을 진행할 때 수업 스타일로 작업하십시오. 파일에서 작업 할 때 파일 스타일로 작업하십시오. 그것들이 일관되지 않으면 변경 사항을 최소화하는 작업을 수행하십시오. 문체 변화는 그룹에서 논의 후에 만 소개되어야하며, 일반적으로 전체 프로젝트에서 그 스타일 변화를 소유해야합니다.
다음으로 빌드를 제어하려면 #define S를 고려해 봅시다. 더 나은 일을하는 방법이 더 우아하고 우아한 방법이있을 수 있습니다. 전체 구성 플랫폼이있을 수 있습니다. 그러나 나는 그것을 간단하게 유지하는 것을 선호합니다. 그리고 나는 가장 간단한 것을 "경험이 풍부한 C ++ 프로그래머가 문제의 코드를 건설하기 전에 배워야 할 것"이라고 정의합니다. 나는 그것을 피할 수 있다면 새로운 수업 도서관을 배우고 싶지 않습니다!
수명의 코딩은 단순성 측면에서 오류를 가르쳤으므로 소스 코드를 명백히 축소하지 않는 한 Variadic 템플릿 구성을 도입하지 마십시오. 코드의 복잡성과 길이를 키우는 것은 의심해야합니다.
원하는 것을 추가하고/또는 LED 꿈을 실현해야합니다. 내 실수를 수정하십시오. 내 지식에 명백한 격차를 메 웁니다. 가장 적은 비트가 가장 깜빡이는 것은 내 투표를 얻습니다. 코드와 프로그램의 모든 바이트에 대해 너무 많은 멋진 깜박임 만 얻습니다. 이 반환은 Blinkenperbit에서 측정되며, 코드가 추가되는 깜박임 굉장함의 양은 소스 (및 이진)에 대한 영향으로 나눈 값입니다.
복제하려면 Mesmerizer 프로젝트를 구축하십시오. 그런 다음 pio/build_cache를 삭제하고 다시 빌드하여 두 번째 빌드에 시간을 내십시오.
ASUS 7995WX [96-Core, 192-Shread]-> [Davepl, 02/11/2024] 20.73 초
HP Z6 G5A, 7995WX, 128GB [96 코어, 192- 스레드]-> [Davepl 11/29/2023] 25.270 초
3970X, 128GB [32 코어, 64- 스레드] Wind
Mac M1 Ultra Studio [10 코어, 20- 스레드]-> [Davepl 11/29/2023] 48.368 초
스펙트럼 구성을 빌드 할 시간 ( pio run -e spectrum ). 모든 것이 설치되고 다운로드 된 후 깨끗한 빌드를 가정합니다.
AMD 3970 32 코어, 128GB, RAID SSD-> [Davepl 09/19/2021] 12.93 초 (WSL에서 실행)
AMD 5950X 16 코어, 64GB, SSD-> [Davepl 09/19/2021] 16.90 초
Apple MacBook Pro M1 Max, 8+2 코어, 64GB, 4TB SSD-> [Davepl 12/15/2021] 20.90 초
Apple MacBook Air M2, 16GB, 256GB SSD-> [vaaski 02/28/2023] 56.17 초
MacBook Pro 2020, 8 코어 2.4GHz I9, 64GB, 4TB SSD-> [Davepl 09/19/2021] 34.09 초
Mac Mini, 4 Perf Cores, 16GB-> [Davepl 09/19/2021] 39.06 초
Mac Pro, 6 코어, 3.5GHz, 64GB, 1TB SSD-> [Davepl 09/19/2021] 48.42 초
Xeon Silver, 20 코어, 2.1GHz, 16GB VM-> [Davepl 10/10/2022] 53.11 초
Raspberry Pi 4, 64 비트 Ubuntu LTS, 4 코어, 4GB-> [Davepl 09/23/2021] 6 분 25 초
Jetson Nano 2G, 4 Core Arm A57-> [Davepl 10/04/2021] 2 분 56 초