But the BL stays off.
Looks like you fixed the small coding error in the constructor. (blLevel misspelled - that will be fixed in next release)
That should have turned on the backlight when begin() is called.
Is it not possible, regardless of the SW work-around, that there is no connection between the BL and the pins to the Arduino (e.g. due to blown transistor)? I can detect no continuity between terminal K and any of the pins that connect the shield to the Arduino.
If your shield is the same design as the other ones we have seen, then you won't see any continuity between the LCD K pin and any Arduino pin because it isn't wired up that way.
The K pin is wired to the collector of an NPN transistor and D10 is wired to the base.
The issue is there there is no series resistor between D10 and the base of the transistor.
See the schematic in the 1st post.
The datasheet from the product link you provided:
https://www.jaycar.com.au/medias/sys_master/images/9133746290718/XC4454-dataSheetMain.pdfdoes not mention using D10.
However the LCDKeypadCheck test would seem to indicate otherwise.
It sets D10 to HIGH and then reads the pin. If the shield has an issue, D10 will not be HIGH because of a short through the
transistor and the D10 signal is being yanked back low even though the AVR is trying to drive the pin high.
Reading a LOW instead of a HIGH is what causes the LCDksypadCheck sketch to report a bad BL circuit.
This is because something is yanking the D10 pin down and that shouldn't be happening.
This can damage the AVR.
The output of bad BL circuit on the LCD means the sketch has determined there is a short on D10 and concluded that
the BL circuit is bad, not that any of damage has necessarily occurred.
Does the backlight blink when the diag test is run when the shield is plugged directly into the Arduino?
If it reports a bad BL circuit but the backlight does not blink you have some other kind of actual h/w issue - beyond just the shield backlight circuit design issue.
It isn't clear how you have wired things up or if there were any temporary miswirings.
It is possible that something done has damaged something.
It is possible that the transistor has been blown by shorting K to ground.
While shorting K to ground will light the backlight, it also puts a hard ground to the transistor collector
since the K signal of the LCD is connected directly to the collector of the transistor.
D10 is connected directly to the base.
If you shorted K to ground while D10 was high,
then the transistor would be 100% on due to the short from D10 into the base through the transistor to the emitter.
With K grounded which also grounds the collector you now have an infinite current load flowing through collector to the emitter.
This might blow the transistor or perhaps even a trace on the PCB.
Unfortunately, that transistor is in a location under the LCD so you can't get to it without removing the LCD.
Now if you have measured the current when K is grounded and you are sure it is 30ma or less,
and you don't intend to ever plug the shield into the Arduino, you could
cheat and wire D10 directly to the K pin of the LCD instead of grounding K.
That would give you backlight control and allow PWM dimming.
These days for a text LCD display, especially one that isn't going to be on a shield plugged into an Arduino,
I'd use an I2C backpack. It only uses the 2 i2c pins.
You can get them off ebay for about $1 USD shipped to your door.
--- bill