All your code should work with non-blocking timing to avoid the freezing of the microcontroller als long as a delay() is "executed"
Your code needs to check if the measured weight is settling on a fixed value or still changing.
If you do repeat to measure and the measured value deviates from the value measured before the settling is still "on the go"
If the measured values stay inside a small range for at least half a second the scale has settled.
repeated measuring and blinking at the same time is best done with non-blocking timing.
Attention !
Non-blocking timing works completely different from delay().
As long as you try to see a delay-similar thing it will be hard to understand how non-blocking timing works because it works so different.
Basically you have two ways to learn it:
way1: trying to be fast by not taking time to read carefully and then wasting time with trying this trying that and finally needing more time to work because you change to way 2 after having no success with trying to be fast
or
immitiately do it
way2: by carefully reading and taking time to understand before starting to code
here is a tutorial how it works
best regards Stefan