Seite 1 von 1

LED via Display schalten beim RF100

Verfasst: Mo 3. Jul 2017, 22:04
von Danny
Hallo allerseits,

wie der Titel schon sagt, habe ich bei meinem RF100 die LED per Controller schaltbar gemacht. Das ganze war mit einer kleinen Umbauarbeit verbunden und ein bischen umschreiben der Firmware.

Realisiert habe ich das ganze mit einem Relaismodul von Groove dass es bei Conrad für 3,99€ gibt. Die Bestellnummer ist 1425554.

Benötigt wird neben dem Relais noch ein Stück Kabel.

Am Board habe ich den Steckplatz D11 verwendet. Hier habe ich am mitgelieferten Kabel vom Relais an einer Seite den Stecker abgeschitten und die Kabelenden direkt am Board verlötet. Es wird die rote, schwarze und gelbe Leitung benötigt. Die Reihenfolge kann am Bild entnommen werden. Eine Pinleiste einzulöten wäre zwar proffessioneller und schöner gewesen, hatte aber keine da.
An das Relais wird nun die LED angeschlossen. Dazu einfach das schwarze Kabel vom Step-down aus dem Stecker der Spannungsversorgung entnehmen und am Terminal des Ralais anschliessen. Vom Relais mit dem zusätzlichen Kabel wieder zurück an die Spannungsversorgung.
Das Relais habe ich mit einer Schraube vom Step-down an einem der Gewinde verschraubt. Platz habe ich geschaffen, indem ich den Step-down versetz habe. Für die original Inbusschraube muss allerdings die Bohrung am Relaismodul vergrößert werden.
DSC_0004.JPG
DSC_0005.JPG
Der Drucker kann nun wieder zusammengebaut werden denn jetzt folgt die Software.

Da das Relais ein "Normaly open" ist, muss der Pin 11 am Bord also auf High gesetzt werden damit die LED schon beim anschalten vom Drucker an geht. Um die LED per Controler zu schalten muss ebenfalls ein Menü geschrieben werden.
Ich beschreibe hier die Änderungen des Marlin 1.0.3 Sourcecode der auch zum Download bei Conrad bereitgestellt ist.

ES FEHLEN JEDOCH HINTERHER "LOAD FILAMENT", "UNLOAD FILAMENT" UND "LEVEL BED". Diese müssen selbst geschrieben werden da dieser "offizielle RF100 Sourcecode" lediglich die Marlin 1.0.3 Grundsoftware ist in der halt die nötigsten Daten des RF100 eingepflegt wurden.

1. in der Conditionals.h in Zeile 465 muss:

#define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT))

2. In der Configuration_adv.h ab Zeile 260 muss:

#define CASE_LIGHT_ENABLE
#ifdef CASE_LIGHT_ENABLE
#define CASE_LIGHT_PIN 11

#define MENU_ITEM_CASE_LIGHT
#endif

3. In der Marlin_main.cpp ab Zeile 530 muss:

void setup_caselight() {
#if HAS_CASELIGHT
pinMode(CASE_LIGHT_PIN, OUTPUT);
#ifdef CASE_LIGHT_ENABLE
WRITE(CASE_LIGHT_PIN, HIGH);
#endif
#endif
}

4. In der pins_RAMPS_13.h in Zeile 103 muss:

#define CASE_LIGHT_PIN 11

5. In der language.h ab Zeile 235 muss:

#define MSG_LIGHT "Light"
#define MSG_LIGHT_ON "Light on"
#define MSG_LIGHT_OFF "Light off"

6. In der language.de.h ab Zeile 127 muss:

#define MSG_LIGHT "Beleuchtung"
#define MSG_LIGHT_ON "Licht an"
#define MSG_LIGHT_OFF "Licht aus"

7. In der language.en.h ab Zeile 429 muss:

#ifndef MSG_LIGHT
#define MSG_LIGHT "Light"
#endif
#ifndef MSG_LIGHT_ON
#define MSG_LIGHT_ON "Light on"
#endif
#ifndef MSG_LIGHT_OFF
#define MSG_LIGHT_OFF "Light off"
#endif

8. In der Ultralcd.cpp muss in Zeile 70:

static void lcd_control_light_menu();

Ab Zeile 954 muss:

#ifdef MENU_ITEM_CASE_LIGHT
MENU_ITEM(submenu, MSG_LIGHT, lcd_control_light_menu);
#endif

Ab Zeile 1215 muss:

/**
*
* "Control" > "Caselight" submenu
*
*/

static void lcd_control_light_menu() {
START_MENU();
MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
MENU_ITEM(gcode, MSG_LIGHT_OFF, PSTR("M42 P11 S0"));
MENU_ITEM(gcode, MSG_LIGHT_OFF, PSTR(M42 P11 S255"));
END_MENU();
}

Das wars. Nun kann man mit dem Controller die LED ausschalten was ja gerade bei längerem Druck Sinn macht. Man hätte auch einen Schalter am Gehäuse anbringen können aber ich wollte den umständlichen Weg :lol:
Die Zeilennummern könnten ggf. zu Eurer genutzten Firmware variieren. Verlasst Euch da bitte also nicht allzu sehr auf meine Anleitung.

Eigentlich wollte ich den Menüpunkt so machen, dass beim anwählen von "Beleuchtung" am Display erscheint: "Licht: aus" und wenn man da drauf klickt, die LED eben aus geht und dann am Display sich die Zeile ändert in: "Licht: an".
Also quasi so ein Wechseltext mit Funktion aber ich habs nach Stundenlangem probieren nicht hinbekommen. :(

Ich habe bewusst die Firmware so geschrieben, dass die Funktion bzw. das Menü zentral via Configuration_adv deaktivierbar ist. Das kann aber jeder für sich entscheiden.

Für Anregungen, Kritik oder Tipps zu meinem eigentlichen Menüwunsch bin ich offen. :danke:

Re: LED via Display schalten beim RF100

Verfasst: Mo 3. Jul 2017, 22:29
von Nibbels
:)

Beim RF1000 und so ist es so, dass man MSG_LIGHT_OFF definiert, aber mit Platzhaltern drin.

Code: Alles auswählen

#define MSG_LIGHT_OFF "Light off"
#define MSG_LIGHT_ON "Light on"
Könnte man also demnach als

Code: Alles auswählen

#define MSG_LIGHT_ON "Light %ls"
definieren.

Diese Texte schickt die Firmware meist durch die Funktion parse()
Diese enthält dann eine Suche nach %, dann dem ersten Buchstaben (switch, case) und in diesem jeweiligen Case dem zweiten Buchstaben per if oder switch, case.
%ls hätte ich in der RFx000-Firmware dann in dieser parse-Funktion definiert.
Dort drin beim Unterbuchstaben-case l und dem subunterbuchstaben-case s steht dann sowas wie

Code: Alles auswählen

if(light-on) addString(PSTR("on"))
else addString(PSTR("off")) 
Ich habe mir Marlin noch nie angeschaut, aber unter Umständen gibt es dort ein leicht ähnliches Konstrukt.

LG

Re: LED via Display schalten beim RF100

Verfasst: Mo 3. Jul 2017, 22:37
von Danny
Danke für den Tipp. Muss ich mal rumsuchen ob ich da sowas ähnliches finde. Bzw. eher googlen denn das meiste was ich da rumgeschrieben habe war im Grunde nur Copy and Paste.... Trotzdem konnte ich dabei ein kleinwenig lernen. :)

Irgendwas hab ich noch im Hinterkopf mit:

#if (lcd_clicked, true);

oder so ähnlich. Vielleicht kann man das darüber irgendwie definieren/realisieren.

Re: LED via Display schalten beim RF100

Verfasst: Sa 15. Jul 2017, 10:37
von Danny
Mühsam ernährt sich das Eichhörnchen....

Sorry für den Offtopic aber nachdem ich hier das Problem mit den wechselnden Menüeinträgen angesprochen habe und hier auch schon darauf geantwortet wurde, poste ich die Lösung einfach hier.

Ich wollte ja einen Menüeintrag "Beleuchtung Aus", wenn die LED an ist und mit einem Klick auf diesen Eintrag sollte die LED abschalten und den Eintrag wechseln in "Beleuchtung Ein".

Die Lösung war nach etlichen Stunden sehr einfach:

#ifdef MENU_ITEM_CASE_LIGHT
if (digitalRead(CASE_LIGHT_PIN) == HIGH)
MENU_ITEM(gcode, MSG_LIGHT_OFF, PSTR("M42 P11 S0"));
else
MENU_ITEM(gcode, MSG_LIGHT_ON, PSTR("M42 P11 S255"));
#endif

Das war alles. Ich hatte ja vorher via static void für die LED ein extra Menü unter dem Punkt Einstellungen. Also:

Einstellungen -> Beleuchtung -> Licht Aus
Einstellungen -> Beleuchtung -> Licht An

Das habe ich nun vereinfacht indem man nun die LED in den Einstellungen selbst schaltet.
Also:

Einstellungen -> Beleuchtung Aus (Mit einem klick schaltet die LED ab und es erscheint Beleuchtung An)

Re: LED via Display schalten beim RF100

Verfasst: Di 26. Jan 2021, 22:18
von secondskinstyle
Kannst du die Hex vielleicht hier online stellen