Vanilla Marlin Firmware configured for Ender 3 + BLTouch

This is the 1.1.9 version of vanilla Marlin Firmware pre-configured for Creality Ender 3 printers with the original or generic BL Touch sensors. The standard configuration file from Marlin distribution was carefully reviewed to include the latest Ender 3 specific settings from the official Creality firmware. If you don't have a BLTouch sensor please use this version of Marlin that supports Mesh Bed Leveling.

I made avaliable the 2.x versions of Marlin for the same board and printer but I recommend using the 1.1.9.x because it is much more stable and has more features. The 2.x versions of Marlin are too big for the board memory and several features had to be removed in order to fit the firmware.

There are three installation options available, the traditional with Arduino IDE, the new method using Visual Studio Code + PlatformIO and the third one that is uploading the compiled firmware directly to the board. I recommend the PlatformIO option for most of the users, once the software is downloaded, the firmware can be upgraded in less than 5 minutes.

This firmware was made for 8-bit boards and will not work on 32-bit boards.

Features

  • Official Marlin firmware + bugfix with all hardware settings from Creality latest official firmware (April 2020).
  • BLTouch original/generic up to 3.x. enabled by default (BLTouch 3.x might need the 5V logic enabled from the LCD menu).
  • No need to remove any capacitors from the board.
  • Installs from the original Arduino IDE (smaller download and frequent updates from Arduino team).
  • Source code was modified to prevent releasing the BLTouch sensor during "beep" events triggered by LCD menus.
  • Thermal runway protection enabled.
  • Does not reset the bed level settings after the G28 (Home) command.
  • Custom menu with maintenance mode, emergency mode and full auto bed leveling sequence (warmup, wait, home, level and then save settings).
  • Ultra-precise bilinerar bed leveling algorithm with 25 probing points and slow probing (takes around 5 minutes to complete, 10 including the bed heating).
  • Run and toggle the bed level and BLTouch tools from LCD menus.
  • BLTouch voltage/logic settings from the LCD menu.
  • Slim menus enabled.
  • Baby steps enabled and configured for the "Magic Numbers".
  • Emergency parser enabled.
  • All changes from the original Marlin config file were marked with the comment  "//Customized DBP"

Requirements

  • 8-bit boards only! This will not work with 32-bit boards.
  • BLTouch installed on pin 27
  • Z stop switch removed (it can block the Z axis movement)
  • IMPORTANT! BLTouch tip height must be adjusted according to the official instruction manuals. There are different BLTouch sensors and the YouTube videos tips are most of the times wrong
  • Bootloader installed in your board
  • Arduino IDE for installation option 1
  • Visual Studio Code for installation option 2
  • AVRDude for installation option 3 in Linux or MacOS (AVRDude for Windows is included in the package)

Note about the bed leveling strategy

There are two ways to perform the automatic bed leveling, the first is before every print and the second is only when necessary. Based on my experience with the Ender 3, it's better to do an extremely precise (slower) bed leveling when necessary than a simpler one before every print. This firmware configuration reflects this choice.

If you want to do quick/imprecise bed leveling before every print you will need to reconfigure the firmware.

Instructions using Arduino IDE (option 1)

  1. Install the Arduino IDE
  2. Quit any software that could try to access the printer from the USB port (Cura, Serial Monitor, OctoPrint, etc...).
  3. Run the Arduino IDE and configure to download the Sanguino board. Add the following URL to the board manager (File->Preferences->Additional boards manager):
    https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json

     

  4. Install the following libraries/boards in the Arduino IDE:
    • U8Glib
    • Sanguino
  5. With all requirements in place unpack this entire Marlin distribution to a folder and open the "Marlin.ino" file from the Arduino IDE.
  6. Look for the configuration.h file and change the following lines to the relative coordinates of your BLTouch mount to the Nozzle. The actual settings are for this mount. If you don't have the measurements now you can configure it later with the M851 GCode (see instructions below).
    #define X_PROBE_OFFSET_FROM_EXTRUDER -42
    #define Y_PROBE_OFFSET_FROM_EXTRUDER -5
    #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 

  7. Disable the endstop interrupts feature by commenting (//) the following line in configuration.h. This feature needs to be disabled only if you are using Arduino IDE, with PlatformIO this problem does not exist.

    //#define ENDSTOP_INTERRUPTS_FEATURE
    

     

  8. Compile and upload the firmware. Make sure you are using the following settings.
    • Board configuration: ATMega 1284P 16Mhz
    • Programmer configuration: AVRISP MKII
    • COM Port: Depends of your computer. Usually only one is available for selection.
  9. Follow the post-installation instructions below.

Instructions using Visual Studio Code + PlatformIO (option 2)

  1. Download and install Visual Studio Code.
  2. From Visual Studio Code extension menu, install the PlatformIO IDE extension.
  3. With all requirements running, unpack the entire Marlin source code downloaded from the link below to a folder.
  4. From Visual Studio Code select File->Open folder and select the folder where the platformio.ini file is located. Attention! Use the "open folder" command, not the"open file".
  5. Look for the configuration.h inside the "Marlin" sub-folder and edit the following configuration to the relative coordinates of your BLTouch mount to the Nozzle. This does not need to be too precise, the only purpose is avoiding the probe to test outside the bed. The default settings X = -42mm, Y= -5mm and Z=0 are for this mount:
    #define X_PROBE_OFFSET_FROM_EXTRUDER -42
    #define Y_PROBE_OFFSET_FROM_EXTRUDER -5
    #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 
  6. Save the file and then select Terminal->Run Task->Build . It will take a few minutes for the system to download all dependencies and compile the code.
  7. If the code compiled properly you will see something like this in the terminal: "=== 1 succeeded in 00:00:30.050 ===".
  8. Connect your printer to the computer using the USB cable.
  9. Go to the Visual Code menu Terminal->Run Task->Upload .
  10. If everything goes well another message like this "=== 1 succeeded in 00:00:55.010 ===" will be printed.

Installing the pre-compiled HEX (option 3)

The pre-compiled firmware is also available here. You can simply burn the compiled HEX file directly to your Ender3 board without installing the Arduino IDE or Visual Studio Code.

To upload the pre-compiled firmware you will need the AVRDUDE 6.3 tool. For your convenience I included the Windows version of this tool in the zip file that contains the HEX firmware but the tool is also shipped with the Arduino IDE. The upload command in Windows PowerShell should look like this:

./avrdude -p atmega1284p -c arduino -P COM3 -b 115200 -v -U flash:w:firmware.hex:i

The serial port is something between COM1 and COM8, depending on where the USB driver is pointing to, and firmware.hex is the file you are uploading. If you are using other operating system like Linux the port address will be somehting like this /dev/ttyUSB0.

After initializing the board with the new firmware don't forget to reconfigure the probe offsets running the following command from any serial terminal. Replace the default offset values in the command (-42, -5, 0) with the ones for your probe mount.

M851 X-42 Y-5 Z0
M500

Finally, follow the post-installation instructions below.

Post-installation configuration

  1. Manually pre-level the bed! This is important because the BLTouch has limited max/min detection ranges and the print quality can be affected if the Z-Axis moves too much.
     
    1. Cool down the bed and the nozzle. Heating should have little to no effect on this specific procedure.
    2. Disable stepper motors using the LCD menu command.
    3. Place a credit card on one the bed, the thickness of the card will be used as a reference distance.
    4. Turn the Z axis with your hand until the nozzle hits the credit card.
    5. Move hot end to several positions of the bed, starting from the 4 corners. For each position, adjust the bed level knobs to keep the nozzle at the credit card thickness distance from the nozzle. This is what you would do in manual calibration but instead of using a paper you will use the card for convenience. The card thickness does not matter because the BLTouch probe will redefine the Z reference.
       
  2. Heat the bed to the printing temperature and run the bed level command from the LCD (Prepare -> Bed Leveling -> Level bed)  or using the G29 gcode or using the Heat and Level command from the custom menu (recommended). Note that the Heat and Level command waits 2 minutes after the bed is hot to allow the mounted surfaces to expand/contract properly.
  3. Save the settings using the LCD menu or the M500 gcode (if you used the Heat and Level custom command, they will be automatically saved).
  4. Add the following gcode to the startup code of you slicer, right after the line of the G28 command to load the bed level configuration from the memory before every print:
    M420 S1

     
  5. After enabling the bed level, print something large and flat to adjust the Z offset. The nozzle will always be far from the bed until you adjust the offset to a negative value (LCD -> Prepare -> Bed Leveling -> Z Offset). Don't forget to save the settings after the print to keep the offset in the memory, you can use the LCD or the M500 GCode for this.

Troubleshooting tips

  • No serial COM port appears when connecting to the board: Download the FTDI Drivers
  • Bed level failing:
    • 1st - make sure you manually leveled the bed, the probing tends to fail if any part of the bed is >2mm lower or higher than the home level.
    • 2nd - make sure you have the M420 S1 command AFTER the G28 line in your print initialization GCode.
    • 3rd - make sure your probe was installed properly, there are maximum and minimum height clearences between the BLTouch tip and the nozzle tip and that changes for each version of BLTouch.
    • 4th - check the wiring! Sometimes the wires are inverted in the default connector setup.
    • 5th - if you are using BLTouch 3.x see the next topic.
  • BLTouch 3.x failing to probe: Be aware that this is rare contition, the vast majority of the users run BLTouch 3.x without problems. I suspect this is related with the hardware (probe/board components, etc) and there is little we can do from the firmware side:
    • 1st - Enable the 5V logic in the LCD menu (LCD -> Control-> BLTouch). BLTouch versions 1.x and 2.x don't have voltage modulation do not require this setting.
    • 2nd - If the previous does not work, enable SW mode (LCD -> Control-> BLTouch).
    • 3rd - Enable and adjust the delay setting in configuration_adv.h (requires recompiling the source). This is trial an error but try values from 300 to 700 increasing/decreasing by 100.
    • 4th - If the BLTouch is version 3.0 (not 3.1, 3.x...) enable BLTOUCH_FORCE_MODE_SET setting in the configuration_adv.h.
    • 5th - If none of the above work you either have a faulty probe or a problem with the capacitor in the board.
#define BLTOUCH_DELAY 500
  • Error "..._PIN is not interrupt-capable..." in Arduino IDE: This is an Arduino IDE bug, disable the feature in the configuration.h file according to the example below to fix (put "//"). If you are using PlaformIO you should leave this option enabled.
//#define ENDSTOP_INTERRUPTS_FEATURE
  • Disable serial port clients before flashing: If the COM ports are used by any other app, the flashing process will fail. Shutdown Cura, OctoPrint, any other slicer and any other Serial Monitor program like the Arduino IDE before compiling/flahsing the new ROM.
  • Correct fuse settings: If you are using other software than AVRDUDE (PROGISP, for example) to upload the firmware make sure you are using the correct fuse settings. Apparently the Creality tutorial has the wrong settings and the board fails to boot afterwards.
  • Reset the EEPROM: Sometimes the EEPROM memory is not reset during the Marlin reflash and this can cause problems. To reset manually use the following G-Codes from any Serial Terminal: M502 followed by M500.
  • Blank screen after flashing: You did not flashed the firmware properly. Please use AVRDude according to the instructions above and if this does not work you might have to reflash the bootloader.
  • Serial Port Monitor for Windows: This small program allows you to send/receive GCode to the printer. If the characters look strange you are probably using the wrong baud rate (start with 115200bps).
  • avrdude: stk500_getsync() attempt 1 of 10: not in sync: Wrong baud rate for the serial port or serial port already in use (OctoPrint, Cura, etc..). Try configuring the upload rate to 115200bps. If you are using PlatformIO to upload, make sure you are using the correct baud rate for your environment in the platformio.ini file.
  • Reconfigure the BLTouch probe offsets: Use the following command replacing the -42, -5 and 0mm coordinates with the offsets of your actual mount:
    M851 X-42 Y-5 Z0
    M500

If you have problems compiling the firmware...

I can compile the firmware for you. Please see here for more details.

Other Marlin downloads for Ender 3

Files
Version
1.1.9.1+ Bugfix + BLTouch for Ender 3 (Aug 3rd, 2020)
Platforms
Arduino IDE or PlatformIO
File size
4.2 MB
Checksum
File 1 SHA256: 1DCD5D998C999C80D72A4153BDF27D3A2682FA5F6E869029EEB282FEE2842739
File 2 SHA256: C69961C0E223D1189FFBC2258DD30D49557BE986C5505011ABBFD479CCE61169
File 3 SHA256: D3CEFC5D5EB7C6536EFDBCED861201DA5E59272FFB0193549E2B469740452F44
Screenshots

Post Categories

Comments

Submitted by jonas silva on Sun, 05/31/2020 Permalink

hello I'm new to 3D printing I would like to know if you can increase the speed of 25 points because it takes too long.

Att ; jonas

Thank you.

ola daniel muito obrigado , mais eu nao sei muito de programção voce poderia me dizer onde achar no Arduino Ide ? por favor des de ja muito obrigado .

Att: jonas 

hello daniel thank you so much, but i don't know much about programming could you tell me where to find the arduino ide? please thank you very much.

Att: jonas

Existe uma aba no Arduino IDE para este arquivo configuration.h. Lá dentro procure as linhas comentadas "//Customized DBP" em uma delas vai encontrar o tamanho do grid e em outra as velocidades.

Submitted by Jonathan on Sun, 05/31/2020 Permalink

Dear Daniel,

first of all, thanks for your post. Was really useful. I could manage to let my v3.1 bl touch working on my ender 3 (motherboard v 1.1.4).

However I continue to have an issue and honestly, after checking in a lot of forum, couldn't find a solution.

I used your slow probing and bilinear leveling. The whole process seems to work and I can see that my zmotor is compensating, but the compensation is wrong.

In particular the nozzle is crashing in the bed at the front while it is too high at the back (it almost seems an inverted compensation).

I tried with different firmware (TH3D, Marlin 1.1.6 which comes from the creality kit, etc) but I could not manage to solve the problem.

For now I had to remove the sensor and install back the zstopper. Do you think there is something mechanically wrong? Or maybe is a faulted sensor? I got the creality kit, so original BLtouch.

Thanks in advance for your help! 

I had the same issue with my Ender 3 Pro. It pushes the nozzle on the bed very bad and the magnet was also ruined. I had also an issue with the screen. When I restart the machine, screen light goes on but there is nothing on it. So I needed to install the original Creality 1.1.6 firmware again. Even though I like this 1.1.9 version.

Creality software PROGISP requires fuses to be set properly otherwise the firmware does not work as expected.

I recommend using the AVRDude tool to burn the hex files as indicated in the tutorial because it prevents you from bricking your printer. AVRDude is the official firmware uploader used in ArduinoIDE and PlatformIO.

I tried AVRDude but couldn't make it. And then tried Arduino IDE, first it couldn't comply there were some errors that I couldn't solve but then I could make it. Now it works as usual. However, the hex file for with TMC2208 driver was homing smooth. This one is better than the original Creality 1.1.6 but worst than your 1.1.9 TMC2208 hex. Where can I change it to TMC2208? My board is 1.1.4 by the way, produced in 2020.

Also is there a way to speed up the leveling process? For example, increase the speeds of the motors and maybe 50 mm lifting instead of 100 mm?

See comments below for instructions on how to enable TMC2208.

The actual settings for the probing speed and the probing height can be increased in configuration.h. The actual values are based in hundreds of trials and represent the highest speed and lowest times you can get before the lag caused by the capacitor and the slow processor starts corrupting the data. For most of the users the leveling process time is not a problem because it's rarely executed but I understand this could be an issue if you change from glass to plastic printing surfaces too often.

 

Are you sure your probe got the correct measurements from the bed? Use M503 GCode to see what was recorded during the probing and look for anything strange. There are several causes for the wrong readings, from a lose connector to operating in the wrong voltage logic (should be 5V) and finally the famous capacitors in the creality board.

The firmware bed leveling algorithm is fine and works well with all versions of BLTouch.

Hi Daniel,

thanks for the fast reply.

I tried to probe and the M503 command, I got this as output, but nothing seems wrong

Bilinear Leveling Grid:

      0      1      2      3      4

 0 +0.035 +0.059 +0.098 +0.127 +0.169

 1 -0.020 +0.013 +0.112 +0.119 +0.149

 2 +0.043 +0.111 +0.188 +0.188 +0.220

 3 +0.190 +0.214 +0.254 +0.236 +0.290

 4 +0.205 +0.248 +0.297 +0.286 +0.351

a part from the one negative values....

 

 

The positive and negative numbers refer to the homing height (Z=0). If the probe is working properly you should get very similar results when running 2, 3 or 4 times the automatic leveling process.

Hi Daniel,

I tried the probing multiple times and it is quiet consistent (at least the variation is inside the accuracy of the sensor).

I set the voltage to 5V, printed a bed leveling test model and did not have the issue. The result is not so homogeneous, but I am happy with it. I want to try with the glass bed (I am still using the magnetic bed of creality).

For now, really thanks for your support and your code, after a week of curses, the sensor is working ;)  

 

 

Submitted by Tony on Thu, 05/28/2020 Permalink

I had a number of problems getting a BLTouch v3 working with my Ender 3 (1.1.3 board) but your instructions and file worked great.  Thanks so much!

Submitted by Kayvee on Tue, 05/26/2020 Permalink

I successfully flashed my ender 3 pro following your guide. Thanks so much. During the post-installation steps, the bltouch probe begins auto bed leveling from edge of the bed on the front. Is that normal or I did something wrong. 

Submitted by Dennis K. on Thu, 05/21/2020 Permalink

I think that is now the 3rd brew of Marlin 1.1.9.x i use that supposedly supports the BLtouch on a vanilla Ender 3. Two were TH3D and now yours. They seem to have all the same issue on my machines.

Everything seems to run okay. It detects the Z height via the probe, so the probe is clearly working. But either if i run G28 from the gcode of the print or from the printer (with M420 S1 in the Gcode of the print, naturally) makes virtually no difference.

Because once i start my first calibration test print (a 1 layer thick 220x220mm X across the entire surface) it shows that it absolutely not follows any height map generated by the BLtouch probing. In one corner it almost drives the nozzle into the print bed and in another corner it does not adhere at all, while the center is almost afloat. And this is all after careful manual leveling, mind you.

I know my bed is warped and i know that my other printer's bed will get warped eventually. But it has no warping that exceeds 1 or 2 mm anywhere.



I asked in Facebook and in Discord groups and no one seems to know what plagues my printers. Both are Ender 3 Pros and except for the BLtouch and aluminum extruder assemblies are as stock as they come. No one was able to help me to resolve it yet.



Maybe you have an idea.

Thanks in advance.

I did this and back checked if it is saved properly to eprom after M500 with M503. It's all there and i can also feel the Z axis working. Yet the result on the printbed speaks an entirely different language.



There are places where i have flat broad extrusions and then i have narrow thin extrusions with no adhesion at all.

Here is a picture so you get an idea on what kind of desaster i go through right now: https://i.gyazo.com/c8e3d14dc61561b64fa24d0388bf5dd5.jpg

Right now, the printer is unusuable. Not even rafts work on this kind of bed. The really sad part is: this is my 2nd Ender3 Pro. The other is't fully adapting to the print surface either, but at least the bed is not as fucked as this one.



I guess i have to get a PEI flexsteel plate now afterall. Unless you know anything i could try.

Hi,

This does not seem to be related with the firmware. Under/over extrusions can happen with clogged nozzles, unstable temperatures, bowden tube too far from the nozzle, slipping extruder gears, bad quality filament with variable diameter, printing too fast or improper e-steps calibration. In my personal experience the filament is the number one responsible for layer adhesion problems.

Thanks for all your effort so far.

I did checked all that of course too. I even tried doing initial layers really slow. It was a partial success.

The filament might be the culprit. It could be a bad batch. I get my filament from a local manufacturer. It's not exactly the cheapest, but certainly not as expensive as other brands. It did never fail me until beginning of the year when i got my last batch of filament. However, i did got myself some flex steel sheets. That solved most problems. But i still have to print with rafts and cannot print directly onto the bed. I ordered some prusament and we will see how  that improves the situation.

Submitted by Patrick on Wed, 05/20/2020 Permalink

Hi there,

 

I'm new at this and I tried to compile the file using Arduino IDE but I got the following error:

#error "Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.".

I'm probably doing something wrong that is very simple, but I can't find the problem.

Can you help me with this problem?

 

Thank you advance for your answer.

With kind regards Patrick

Hi again,

 

I'm really sorry to bother you again.

I flashed the firmware, and followed the post installation configuration, but when I try to print something the following happens.

When the bed and nozzle reach the right temerature the nozzle goes to the home position,  looks like it starts leveling again and then stops the print and resets the printer.

I flashed the firmware twice now and used different gcode files and it keeps happening.

I couldn't find any documentation about this problem so hope you can help me.

Thank you in advance for your help.

 

With kind regards Patrick.

Hi Daniel,

Just some extra information regarding the problem I mentioned. 

When fully heated and just before it's supposed to print I get the following line in Pronterface:  Writing to file: bin

start.

After that the printer turns of and restarts.  

I found that when I use the G29 command instead of the M420 S1 command that the problem doesn't  occur.

The only problem then is that it takes 10 minutes to probe everytime I start a print (I know it isn't the biggest problem but stil :D)

As I said I'm a noob at this and I hope you can help me.

Thank you in advance,

With kind regards,

Patrick

 

Submitted by Peter on Thu, 05/07/2020 Permalink

Hi,

I am using the BLTouch v3.1 kit from Creality, on my Ender3 (v1.1.3 board).

I also someone who paid for the compiled hex from the youtuber, which didn't work.

I've managed to flash the Marlin Hex, that you precompiled...thank you

When I power on, the BLTouch probe deploys twice, then stays retracted, and the LED remains RED.

I cannot control the probe from the menu.

Would you know why this might happen?

I installed the hardware as per Creality's instructions that came with the kit, Z cable swapped, GND/VCC/SIG cable colours are correct.

 

Many thanks.

From the menu Control>BLTouch:

I have tried:

Set BLTouch to 5V, CMD: 5V-Mode, CMD: Self Test, CMD: Deploy, CMD: Stow

Nothing in the menu appears to do anything to my BLTouch.

When I Auto-Home, X, Y are fine...but Z will keep going down until the nozzle would crash.  The probe never deploys.

I removed C7, but that also didn't make any difference.

Thanks again

Hi Daniel,

Thank you for making all this firmware available.

Since my coding knowledge is at a beginner level, I appreciate it that you have put this together.

I trace all the cables and pcb, and all where OK.

After trying over and over, I tried your v2.0 compile hex file.  In the process of plugging in again, I noticed the BLUE led lit for the first time, and the probe responded to the commands from the LCD screen.

I jiggled some wires, sure enough the BLUE led would go OUT, and come back ON.

It turns out, that I have a loose Dupont connection...that's all it was the entire time.  I tightened it, and re-flashed v1.1.9.1 to get the full set of features.

Many thanks,

Peter

Submitted by Giuseppe on Tue, 05/05/2020 Permalink

After the loss of power, the extruder does not return to the correct position to continue printing

(Ender 3 Pro)

The power loss recovery function is active but it was not improved since Marlin 1.18 and continues with the same limitations. It always assumes that the print was interrupted between G-Codes but if you are exectuing a long distance command it will miss the position of the extruder and will resume from the next G-Code.

Submitted by lepi on Tue, 05/05/2020 Permalink

Hello, thank you for your work, the firmware works well on my ender 3 pro, I used your .HEX as well as the source code.

But a question still remains unanswered in Marlin and I can't find a solution.

I am trying to modify the setting value of the 'z-offset' so that it is more precise in the menu or during the babystep.

Currently the modification value is 0.04 by 0.04 and I would like to modify this value by 0.005

How can I be more precise in marlin to change this value to 0.005?

regards

Submitted by KL on Mon, 05/04/2020 Permalink

I found your very helpful web site - perfect info's - thx

I want upgrade my Ender 3 to the V1.1.5 board + BLTouch 3.1 and want use your firmware files. Is it possible four you to share your source code files for the Compiled HEX/ELF for standard boards and Compiled HEX/ELF for boards with TMC2208 drivers? So i can compare some settings.

Submitted by John on Sat, 05/02/2020 Permalink

Hi. I uploaded the 1.1.9.1 and it seems to work fine. The only issue is that the buzzer won't stop. How do I fix this?

Check your wiring! When you install the BLTouch probe you replace the buzzer connection wiring on pin 27 with the probe signal cable. The buzzer will stop working because the power cable is disconnected. If the buzzer is still working you didn't followed the installation instructions properly, incorrect wiring can damage your board permanently.

Submitted by Derek on Sat, 05/02/2020 Permalink

Thanks so much for this! I tried using Teaching Tech's video on the BLTouch for my Ender 3 Pro, but his provided hex file was extremely buggy and my BLTouch 3.1 would constantly error out, even when using the 5V mode, and sometimes would just "finish" the print after levelling.

Flashed this firmware and it's been working great (haven't printed yet, but my BLTouch toesn't flash red every other time I try to level my bed).

Just a small ask... Can you enable EMERGENCY_PARSER on the advanced config file? I tried using the emergency stop function you added to the menu, but it is less of an emergency stop and more of an "eh i'll get to it when I feel like it". The emergency parser will make M112 process immediately regardless of the command queue. I enabled it and it doesn't seem to add much memory to the build.

Second, is it normal that the mesh points don't line up centered on my build plate? I noticed that it seems the points on the left respect the distance from the edge that is typically set up (10mm). However it seems that the points on the right of the bed are much farther in from the edge of the bed, and I don't understand why this would be the case, and I can't seem to find any settings for this. My probe offsets are fairly close. Its just that the probe mesh doesn't extend to cover the right. The right edge is almost 40mm inward from the edge... All the other edges are fine.

I know that when it is probing the edge, the nozzle is right at the right edge of the bed. Is this just because the software limit for the X position is limited to the bed space (235 mm) so the software is only allowed to probe as far as the nozzle X limit can go, leaving this extra space? Am i crazy, or this normal and everyone else has the same mesh pattern? 

Hi,

I updated the code to enable the emergency parser. Fortunately it fits the memory.

The mesh is indeed close the the left corner, that's because Marlin was programmed to never let the nozzle move outside the bed.

Submitted by WonSuk Jang on Fri, 05/01/2020 Permalink

hello, thanks for the nice article. it was very easy to follow. I sucessfully uploaded the firmware and finished the configuration. As I was about to auto-level, I found a tiny problem. The 25 points auto leveling starts from near the edge of the printing plate. I am using the original ender 3 plate, and I use 3 clips to attach the plate to the printer. During the auto leveling, the bl touch is going towards those clips, resulting in wrong leveling information for 3 points where the clips are attached. My bl touch is attached -40mm, -9mm from the nozzle. (X-40, Y-9). Is there any settings to change the point of leveling a little bit inside towards the plate so the leveling process will not be affected by these attaching clips? Thanks in advance.