RGB LED STAT
Всем Здравия! Попался мне на глаза видосик о rgb подсветке статусов работы 3д принтера, и я сказал себе хочу!
Источник, со сборкой трех транзисторов проблем у любого 3д печатника проблем думаю не возникнет, так же как и с подключением.
Далее код[IMG]. и тут как обычно началось. На версии марлина 1.0.2 все собралось без танцев с бубном(почти) не работал статус нагрева стола и зеленый цвет по окончании работы загорался только на относительно высоких деталях(точно не замерял на глаз более 30мм). Вылечилось принудительным зажиганием зеленого по позиции Х0(в слайсере после печати в скрипте команда хоме Х). Но хотелось русского языка и 1.1.8. тут код ни в какую не хотел собираться я не совсем программист, точнее совсем НЕ[IMG]. после моих криворуких правок код собрался и заработал(опять же частично) статус стола так же молчит. впрочем замолчал и зеленый совсем...
Быть может кому-то будет интересно подскажу куда чего подключать(хотя там 3 провода все очень просто). А вот может кто более осведомленный допилит код буду очень признателен.
код: marlin_main.cpp
#ifdef TEMP_STAT_LEDS
//Edit 01/11/2016 Marquis Johnson
static uint32_t stat_update = 0;
//Virtual Variables
int STAT_LED_RED = 4; //пока тут не указал напрочь не светился ни один канал хоть и в pins.h указаны пины диодов
int STAT_LED_GREEN = 6;
int STAT_LED_BLUE = 5;
int t = 2;
int Rval = 1;
int Gval = 1;
int Bval = 1;
int LEDmax = 180;
int ExtTemp;
int BedTemp;
int ExtTarg;
int BedTarg;
//Static Colors
void off(){Rval = 0;Gval = 0;Bval = 0;}
void white(){Rval = LEDmax;Gval = LEDmax;Bval = LEDmax;}
void red(){Rval = LEDmax;Gval = 0;Bval = 0;}
void green(){Rval = 0;Gval = LEDmax;Bval = 0;}
void blue(){Rval = 0;Gval = 0;Bval = LEDmax;}
void yellow(){Rval = LEDmax;Gval = LEDmax;Bval = 0;}
void cyan(){Rval = 0;Gval = LEDmax;Bval = LEDmax;}
void magenta(){Rval = LEDmax;Gval = 0;Bval = LEDmax;}
//Handle Led Stauts
void handle_status_leds(){
if(millis() > stat_update) {
stat_update += 50; // Update every 0.05s
for (int8_t cur_extruder = 0; cur_extruder < EXTRUDERS; ++cur_extruder) {
ExtTemp = thermalManager.degHotend(cur_extruder); // тут видимо сменилось имя переменной тоже отказывалось собираться
ExtTarg = thermalManager.degTargetHotend(cur_extruder);
BedTemp = thermalManager.degTargetBed();
BedTarg = thermalManager.degBed();
}
//Fade Leds On when starting up
if(Rval+Gval+Bval == 3){
//length of delay
for(int r = 0; r
for(int r = LEDmax; r>0; r--){Rval = r;analogWrite(STAT_LED_RED, Rval);delay(t);}
for(int g = 0; g
for(int g = LEDmax; g>0; g--){Gval = g;analogWrite(STAT_LED_GREEN, Gval);delay(t);}
for(int b = 0; b
for(int b = LEDmax; b>0; b--){Bval = b;analogWrite(STAT_LED_BLUE, Bval);delay(t);}
for(int w = 0; w
}
if(current_position[X_AXIS] == 0){green();} // должно (но не обязано) загораться зеленым при перемещении Х в 0
const float temp = thermalManager.degBed();
if((BedTarg == 71)||(BedTarg == 1)){off();} //тут статус индикации нагрева стола не работает напрочь
if(BedTarg == 100){yellow();}
if(ExtTarg == 0){white();}
if((ExtTarg != 0)
&&(BedTarg != 1)
&&(BedTarg != 69)
&&(BedTarg != 71)
&&(BedTarg != 100)){
if((ExtTarg >= ExtTemp-TEMP_HYSTERESIS)
&&(ExtTarg <= ExtTemp+TEMP_HYSTERESIS)){white();}
else if((BedTarg == 5)&&(BedTemp <= 50)){green();}
else{
int MidTemp = (((EXTRUDE_MINTEMP)-40)/2);
if(ExtTemp < 40){blue();}
if(ExtTemp > EXTRUDE_MINTEMP){red();}
if((ExtTemp > 40)&&(ExtTemp < MidTemp)){
Rval = map(ExtTemp,40,MidTemp,0,LEDmax);
Gval = 0;
Bval = LEDmax;
}
if((ExtTemp > MidTemp)&&(ExtTemp < EXTRUDE_MINTEMP)){
Rval = LEDmax;
Gval = 0;
Bval = map(ExtTemp,MidTemp,EXTRUDE_MINTEMP,LEDmax,0);
}
}
}
//Write to LEDs
analogWrite(STAT_LED_RED, Rval);
analogWrite(STAT_LED_GREEN, Gval);
analogWrite(STAT_LED_BLUE, Bval);
}
}
#endif
Источник, со сборкой трех транзисторов проблем у любого 3д печатника проблем думаю не возникнет, так же как и с подключением.
Далее код[IMG]. и тут как обычно началось. На версии марлина 1.0.2 все собралось без танцев с бубном(почти) не работал статус нагрева стола и зеленый цвет по окончании работы загорался только на относительно высоких деталях(точно не замерял на глаз более 30мм). Вылечилось принудительным зажиганием зеленого по позиции Х0(в слайсере после печати в скрипте команда хоме Х). Но хотелось русского языка и 1.1.8. тут код ни в какую не хотел собираться я не совсем программист, точнее совсем НЕ[IMG]. после моих криворуких правок код собрался и заработал(опять же частично) статус стола так же молчит. впрочем замолчал и зеленый совсем...
Быть может кому-то будет интересно подскажу куда чего подключать(хотя там 3 провода все очень просто). А вот может кто более осведомленный допилит код буду очень признателен.
код: marlin_main.cpp
#ifdef TEMP_STAT_LEDS
//Edit 01/11/2016 Marquis Johnson
static uint32_t stat_update = 0;
//Virtual Variables
int STAT_LED_RED = 4; //пока тут не указал напрочь не светился ни один канал хоть и в pins.h указаны пины диодов
int STAT_LED_GREEN = 6;
int STAT_LED_BLUE = 5;
int t = 2;
int Rval = 1;
int Gval = 1;
int Bval = 1;
int LEDmax = 180;
int ExtTemp;
int BedTemp;
int ExtTarg;
int BedTarg;
//Static Colors
void off(){Rval = 0;Gval = 0;Bval = 0;}
void white(){Rval = LEDmax;Gval = LEDmax;Bval = LEDmax;}
void red(){Rval = LEDmax;Gval = 0;Bval = 0;}
void green(){Rval = 0;Gval = LEDmax;Bval = 0;}
void blue(){Rval = 0;Gval = 0;Bval = LEDmax;}
void yellow(){Rval = LEDmax;Gval = LEDmax;Bval = 0;}
void cyan(){Rval = 0;Gval = LEDmax;Bval = LEDmax;}
void magenta(){Rval = LEDmax;Gval = 0;Bval = LEDmax;}
//Handle Led Stauts
void handle_status_leds(){
if(millis() > stat_update) {
stat_update += 50; // Update every 0.05s
for (int8_t cur_extruder = 0; cur_extruder < EXTRUDERS; ++cur_extruder) {
ExtTemp = thermalManager.degHotend(cur_extruder); // тут видимо сменилось имя переменной тоже отказывалось собираться
ExtTarg = thermalManager.degTargetHotend(cur_extruder);
BedTemp = thermalManager.degTargetBed();
BedTarg = thermalManager.degBed();
}
//Fade Leds On when starting up
if(Rval+Gval+Bval == 3){
//length of delay
for(int r = 0; r
for(int r = LEDmax; r>0; r--){Rval = r;analogWrite(STAT_LED_RED, Rval);delay(t);}
for(int g = 0; g
for(int g = LEDmax; g>0; g--){Gval = g;analogWrite(STAT_LED_GREEN, Gval);delay(t);}
for(int b = 0; b
for(int b = LEDmax; b>0; b--){Bval = b;analogWrite(STAT_LED_BLUE, Bval);delay(t);}
for(int w = 0; w
}
if(current_position[X_AXIS] == 0){green();} // должно (но не обязано) загораться зеленым при перемещении Х в 0
const float temp = thermalManager.degBed();
if((BedTarg == 71)||(BedTarg == 1)){off();} //тут статус индикации нагрева стола не работает напрочь
if(BedTarg == 100){yellow();}
if(ExtTarg == 0){white();}
if((ExtTarg != 0)
&&(BedTarg != 1)
&&(BedTarg != 69)
&&(BedTarg != 71)
&&(BedTarg != 100)){
if((ExtTarg >= ExtTemp-TEMP_HYSTERESIS)
&&(ExtTarg <= ExtTemp+TEMP_HYSTERESIS)){white();}
else if((BedTarg == 5)&&(BedTemp <= 50)){green();}
else{
int MidTemp = (((EXTRUDE_MINTEMP)-40)/2);
if(ExtTemp < 40){blue();}
if(ExtTemp > EXTRUDE_MINTEMP){red();}
if((ExtTemp > 40)&&(ExtTemp < MidTemp)){
Rval = map(ExtTemp,40,MidTemp,0,LEDmax);
Gval = 0;
Bval = LEDmax;
}
if((ExtTemp > MidTemp)&&(ExtTemp < EXTRUDE_MINTEMP)){
Rval = LEDmax;
Gval = 0;
Bval = map(ExtTemp,MidTemp,EXTRUDE_MINTEMP,LEDmax,0);
}
}
}
//Write to LEDs
analogWrite(STAT_LED_RED, Rval);
analogWrite(STAT_LED_GREEN, Gval);
analogWrite(STAT_LED_BLUE, Bval);
}
}
#endif
Популярные вопросы
У кого покупать пластик на вб или озоне?
Купил у "пластикофф" за 750р хороший за свои деньги но низкого качестваВзял две катушки чёрного и белого цвета у "НИТ" подороже за 811р, разачоравался...
Дребезжание при печати нового Elego CC2C
Доброго времени суток форумчане! Я новичок в вашем деле. Купил сей аппарат и столкнулся из коробки с такой проблемой, при печати дребезжит принтер, за...
Зачем используют слово '3D' при описании аддитивных технологий?
Несколько раз уже я обращался к уважаемому сообществу с вопросом на тему - почему так говорят '3D печать', '3D принтеры' и прочие интерпретации, типа...

Комментарии и вопросы
Тут, в основном, вопросы об эл...
А что бы не танцевать с бубном...
Авито - https://www.avito.ru/m...
Купил сыну электронный дартс и...
Всем привет! Необходимо изгото...
При 6 в начинает работать ( ку...
чорт дернул меня нажать синхро...