BASIC4MCU | 질문게시판 | 아두이노 프로 미니에 네오픽셀 700개 구동시 너무 길어서 업로드 에러
페이지 정보
작성자 손문일 작성일2022-05-06 00:30 조회2,026회 댓글4건본문
선생님 안녕하세요.
예전에 인사 드렸었던 손문일입니다. 그동안 잘 지내셨는지요.
그때 제작하던 작업은 거의 완성되가는데 작품의 크기를 늘리니 문제가 생겼습니다.
아두이노 프로 미니에 네오픽셀 700개의 LED를 연결해서 사용하려고 합니다.
근데 아두이노는 프로 미니를 써서 그런지 614개 정도 까지만 동작이 됩니다.
아두이노 네오픽셀 코드에서 핀 갯수를 700정도로 하면 업로드 완료는 뜨는데 리셋 되면서 재구동이 안되고 다시 614개로 줄이면 리셋 되면서 다시 구동됩니다.
그래서 아두이노 프로 미니의 작은 메모리 문제인듯해서 안쓰는 코드 지우고 정리했더니 최대가 한 615개 정도까지는 동작이 되는데 아직 80개 정도가 구동이 안되네요.
혹시나 해서 코드 거의 다 지우고 불만 들어오는 간단한 코드를 짜면 700개까지는 구동이 되네요.
제 생각에는 아두이노 프로미니의 메모리가 모잘라서 그러는듯해서 sram영역을 확보하기 위한 코드를 찾아보았으나 제가 짜려는데 잘 안되네요...
그런 메모리 확보 방법이 있는 홈페이지인데 https://juahnpop.tistory.com/120
코드를 짜도 계속 에러가 뜨네요.
아래는 코드입니다.
#include <Adafruit_NeoPixel.h> #define PIN 11 Adafruit_NeoPixel strip = Adafruit_NeoPixel(614, PIN, NEO_GRB + NEO_KHZ800); unsigned int neo_cnt = 0, fade = 0; void setup() { strip.begin(); strip.show(); strip.setBrightness(250); } void loop() { if (neo_cnt <= 255) { fade = neo_cnt; for (int z = 194; z <= 614; z++)strip.setPixelColor(z, strip.Color(fade/4, fade/8, fade/2, 0)); for (int z = 103; z <= 193; z++)strip.setPixelColor(z, strip.Color(fade/2, fade/4, 0, 0)); for (int z = 0; z <= 102; z++)strip.setPixelColor(z, strip.Color(fade/4, fade/4, fade, 0)); } else if (neo_cnt <= 1510) { fade = neo_cnt - 255; for (int z = 1194; z <= 614; z++)strip.setPixelColor(z, strip.Color(64, 32, 128, 0)); for (int z = 103; z <= 193; z++)strip.setPixelColor(z, strip.Color(128, 64, 0, 0)); for (int z = 0; z <= 102; z++)strip.setPixelColor(z, strip.Color(64, 64, 255, 0)); } else if (neo_cnt <= 1765) { fade = neo_cnt - 1510; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(64-fade/8, 32, 128, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(127+fade/2, 64-fade/8, fade/2, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(64+fade/4, 64+fade/4, 255, 0)); } else if (neo_cnt <= 2765) { for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(32, 32, 128, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(255 , 32, 128, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(128, 128, 254, 0)); } else if (neo_cnt <= 3020) { fade = neo_cnt - 2765; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(32-fade/8, 32-fade/8, 128, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(255-fade/2, 32, 128, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(128-fade/4, 128-fade/4, 255-fade/2, 0)); } else if (neo_cnt <= 4020) { fade = neo_cnt - 3765; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(0, 0, 128, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(128, 32, 128, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(64, 64, 128, 0)); } else if (neo_cnt <= 4275) { fade = neo_cnt - 4020; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(fade/8, fade/5, 128-fade/4, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(128-fade/4, 32+fade/6.5, 127+fade/2, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(64-fade/8, 64+fade/8, 128-fade/4, 0)); } else if (neo_cnt <= 5275) { fade = neo_cnt - 5020; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(32, 52, 64, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(64, 72, 255, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(32, 96, 64, 0)); } else if (neo_cnt <= 5530) { fade = neo_cnt - 5275; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(33+fade/1.15, 53, 64-fade/8, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(64-fade/4, 72.25, 255-fade/2, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(32+fade/4, 96-fade/8, 64-fade/4, 0)); } else if (neo_cnt <= 6530) { fade = neo_cnt - 6275; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(255, 53, 32, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(0, 72.25, 128, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(96, 64, 0, 0)); } else if (neo_cnt<=6785) { fade = neo_cnt - 6530; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(255, 53+fade/2, 32-fade/8, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(0, 72.25+fade/3.5, 128-fade/4, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(96+fade/2, 64, 0, 0)); } else if (neo_cnt<=7785) { fade = neo_cnt - 7530; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(255, 181, 0, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(0, 144, 64, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(224, 64, 0, 0)); } else { //(neo_cnt<=8040) fade = neo_cnt - 7785; for (int z = 182; z <= 540; z++)strip.setPixelColor(z, strip.Color(255-fade/1.33, 181-fade/1.711, fade/2, 0)); for (int z = 96; z <= 181; z++)strip.setPixelColor(z, strip.Color(fade/2, 144-fade/3.2, 64-fade/4, 0)); for (int z = 0; z <= 95; z++)strip.setPixelColor(z, strip.Color(224-fade/1.59, 64, fade, 0)); } if (++neo_cnt > 8040) { neo_cnt = 256; } strip.show(); }
공간 및 가격 때문에 아두이노 프로 미니를 샀는데 혹시 프로 미니에서 메모리 용량만 하드웨어적으로 늘려서 쓸 수 있는 방법은 없는지 궁금합니다.
긴글 읽어 주셔서 감사합니다.
위 표는 프로 미니 자원표입니다.
댓글 4
조회수 2,026master님의 댓글
master 작성일
아두이노 프로미니의 메모리가 모잘라서 그러는듯해서 <-- 제 생각도 그렇습니다.
mcu 내부의 메모리 용량을 늘릴 수 있는 방법은 없습니다.
https://ko.aliexpress.com/item/1005002721621360.html?_randl_currency=KRW&_randl_shipto=KR&src=google&src=google&albch=shopping&acnt=631-313-3945&slnk=&plac=&mtctp=&albbt=Google_7_shopping&albagn=888888&isSmbActive=false&isSmbAutoCall=false&needSmbHouyi=false&albcp=16989964027&albag=141543658291&trgt=296904914040&crea=ko1005002721621360&netw=u&device=c&albpg=296904914040&albpd=ko1005002721621360&gclid=CjwKCAjw682TBhATEiwA9crl30tUYk3hUG-67iroHn7nQpvZG_dLXgKCpP_w46dBhQCxgnvBL53cshoCvjAQAvD_BwE&gclsrc=aw.ds&aff_fcid=04f51237ad92447aafcac3862c787835-1651798107143-02492-UneMJZVf&aff_fsk=UneMJZVf&aff_platform=aaf&sk=UneMJZVf&aff_trace_key=04f51237ad92447aafcac3862c787835-1651798107143-02492-UneMJZVf&terminal_id=423a1ed9aeb34830aa746aa61f7e7d8c&afSmartRedirect=y
stm32 기반의 아두이노는 메모리가 충분한지 체크해보세요
손문일님의 댓글
손문일 작성일
역시 선생님 짱이십니다. 감사합니다.
문득 문득 선생님과 나눈 추억이 생가납니다.
코로나 조심하시고 건강하세요.
작품 완성되면 연락드리겠습니다. 감사합니다.
손문일님의 댓글
손문일 작성일
선생님 안녕하세요. 저번에 제가 알려주신 STM32F103C8T6 보드는 구입했는데 이 보드는 pwm이 안되는지요?
아두이노로 설정까지 다해서 업로드 해도 신호를 주는 핀이 신호를 주지 못하는듯합니다. 그래서 계속 찾아 봤더니 stm32 보드는 pwm 및 DMA 설정을 해줘야한다고 해서 CUBE IDE 설치하고 설정까지 했는데 그 다음에 업로드하려 했더니 ST 전용 업로더가 필요한것 같기도 해서 이렇게 하는게 맞는지 여쭤봅니다.
최대한 간단하게 아두이노 스케치로 하고 픈데 다른 방법은 없는지 여쭤봅니다. 항상 감사드리고 건강하세요.
master님의 댓글
master 작성일
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=damtaja&logNo=220956875482
웹검색하니 이런 글이 보입니다.