Щиток приборов с NeoPixel оптимизация.
- Войдите на сайт для отправки комментариев
Пт, 29/12/2017 - 18:45
Хочу увеличить количество светодиодов для подсветки всего салона а также сделать такойже как тахометр https://www.youtube.com/watch?v=i_6H_sUqn7w спидометр.
Можно ли как-то оптимизировать скетчь или библиотеку чтобы уменьшить размер.
#include <Adafruit_NeoPixel.h> byte Hall2 = 4; byte Hall1 = 5; #define PIN 2 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800); unsigned long lastflash; int RPM; byte state; int taho; void setup() { pinMode(Hall1, INPUT); pinMode(Hall2, OUTPUT); // Serial.begin(9600); //открыть порт attachInterrupt(1,sens,FALLING); pixels.begin(); } void sens() { RPM=60/((float)(millis()-lastflash)/2000); lastflash=millis(); } void loop() { state = digitalRead(Hall1); digitalWrite(Hall2, state); //float filter_RPM=filter(RPM); if ((millis()-lastflash)>500){ RPM=0; } taho = RPM; //Serial.println(taho); if (taho == 0) { pixels.setPixelColor(0, pixels.Color(15,0,1)); pixels.setPixelColor(1, pixels.Color(0,0,0)); pixels.setPixelColor(17, pixels.Color(0,0,100)); pixels.setPixelColor(18, pixels.Color(0,0,100)); pixels.setPixelColor(19, pixels.Color(0,0,100)); pixels.setPixelColor(20, pixels.Color(0,0,100)); pixels.setPixelColor(21, pixels.Color(0,0,100)); pixels.setPixelColor(22, pixels.Color(0,0,100)); pixels.setPixelColor(23, pixels.Color(0,0,100)); } if (taho >= 500) { pixels.setPixelColor(0, pixels.Color(15,0,1)); pixels.setPixelColor(1, pixels.Color(15,0,1)); } else if (taho < 500) { pixels.setPixelColor(1, pixels.Color(0,0,0)); } if (taho >= 750) { pixels.setPixelColor(0, pixels.Color(0,20,0)); pixels.setPixelColor(1, pixels.Color(0,20,0)); pixels.setPixelColor(2, pixels.Color(0,0,255)); } else if (taho < 750 && taho < 1000) { pixels.setPixelColor(2, pixels.Color(1,1,20)); } if (taho >= 1000) { pixels.setPixelColor(2, pixels.Color(0,25,0)); } if (taho >= 1500) { pixels.setPixelColor(3, pixels.Color(0,25,0)); } else if (taho < 1500) { pixels.setPixelColor(3, pixels.Color(1,1,20)); } if (taho >= 2000) { pixels.setPixelColor(4, pixels.Color(0,25,0)); } else if (taho < 2000) { pixels.setPixelColor(4, pixels.Color(1,1,20)); } if (taho >= 2500) { pixels.setPixelColor(5, pixels.Color(0,25,0)); } else if (taho < 2500) { pixels.setPixelColor(5, pixels.Color(1,1,20)); } if (taho >= 3000) { pixels.setPixelColor(6, pixels.Color(0,25,0)); } else if (taho < 3000) { pixels.setPixelColor(6, pixels.Color(1,1,20)); } if (taho >= 3500) { pixels.setPixelColor(7, pixels.Color(0,25,0)); } else if (taho < 3500) { pixels.setPixelColor(7, pixels.Color(1,1,20)); } if (taho >= 4000) { pixels.setPixelColor(8, pixels.Color(0,25,0)); } else if (taho < 4000) { pixels.setPixelColor(8, pixels.Color(1,1,20)); } if (taho >= 4500) { pixels.setPixelColor(9, pixels.Color(0,25,0)); } else if (taho < 4500) { pixels.setPixelColor(9, pixels.Color(1,1,20)); } if (taho >= 5000) { pixels.setPixelColor(10, pixels.Color(0,25,0)); } else if (taho < 5000) { pixels.setPixelColor(10, pixels.Color(1,1,20)); } if (taho >= 5500) { pixels.setPixelColor(11, pixels.Color(0,25,0)); } else if (taho < 5500) { pixels.setPixelColor(11, pixels.Color(1,1,20)); } if (taho >= 6000) { pixels.setPixelColor(12, pixels.Color(50,0,0)); } else if (taho < 6000) { pixels.setPixelColor(12, pixels.Color(1,1,20)); } if (taho >= 6500) { pixels.setPixelColor(13, pixels.Color(50,0,0)); } else if (taho < 6500) { pixels.setPixelColor(13, pixels.Color(1,1,20)); } if (taho >= 7000) { pixels.setPixelColor(14, pixels.Color(50,0,0)); } else if (taho < 7000) { pixels.setPixelColor(14, pixels.Color(1,1,20)); } if (taho >= 7500) { pixels.setPixelColor(15, pixels.Color(50,0,0)); } else if (taho < 7500) { pixels.setPixelColor(15, pixels.Color(1,1,20)); } if (taho >= 8000) { pixels.setPixelColor(16, pixels.Color(50,0,0)); pixels.setPixelColor(17, pixels.Color(0,0,100)); pixels.setPixelColor(18, pixels.Color(0,0,100)); pixels.setPixelColor(19, pixels.Color(0,0,100)); pixels.setPixelColor(20, pixels.Color(0,0,100)); pixels.setPixelColor(21, pixels.Color(0,0,100)); pixels.setPixelColor(22, pixels.Color(0,0,100)); pixels.setPixelColor(23, pixels.Color(0,0,100)); } else if (taho < 8000) { pixels.setPixelColor(16, pixels.Color(1,1,20)); } pixels.show(); } /* Скетч использует 4604 байт (14%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 53 байт (2%) динамической памяти, оставляя 1995 байт для локальных переменных. Максимум: 2048 байт. */
Можно.
Можно ли как-то оптимизировать скетчь или библиотеку чтобы уменьшить размер
попробуйте использовать функцию map для определения какие неопиксели нужно включать,
к примеру, на тахометре мы получаем значения от 1 до 8000, пикселей допустим у нас от 1 до 50,
значит пишем
Подробнее о функции map
Можно круче придумать с радугой и всякими фишками, всё ограничено вашей фантазией) Даже порядок пикселей изменить или сделать спидометр как в "Назад будущее" и подсветку капота как у "Рыцаря дорог" и всё влезет на 8 кб, я почему то уверен)
библиотеку adafruit не надо оптимизировать, она и так dats cool
попробуйте использовать функцию map для определения какие неопиксели нужно включать,
спасибо за подсказку я как-то не задумывался о map или соnstrain можно прилично на ифах сэкономить
Если позволите, то...
Если позволите, то...
Я не совсем это имел в виду ?: но за одно просветился спасибо
Подставьте вместо 0x00FF00 какой-нибудь colors[i], а этот массив заранее заполните хоть rainbow эффектом, хоть предустановленными цветами, которые на шиме не мерцают, хоть посекторно зеленый/желтый/красный. Тогда всё будет по новогоднему.