Металл2024 Реклама
Метобр2024 Реклама

RGB LED STAT

killrill
Идет загрузка
Загрузка
16.02.2018
761
6
Вопросы и ответы
Всем Здравия! Попался мне на глаза видосик о 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
Ответы на вопросы
Кремень КБ Реклама
Кремень КМ Реклама