Open ellelili2025 opened 3 years ago
Dear Li,
I found that the function of showing text on the LED matrix on micro:bit doesn't work. I tried to fix it by using the blocks in Microbit_Uart extension instead of Microbit_Led extension. But I didn't find the reason why the blocks in picture 1 do not work.
May I ask whether it is ok to use the blocks in Microbit_Uart extension (picture 2) to realize the function of scrolling text on the LED matrix? It can achieve the expected result in the document.
picture 1:
picture 2:
Thank you!
Best regards, Ying
@xyyshh I would like to at least get a full understanding of why writeLEDText doesn't work. I will take a look and let you know.
@ellelili2025 Hi Li. I find a way to make writeLEDText work by editing the source code. I changed two parts of the file "Microbit_Led.java" at appinventor-extensions/appinventor/components/src/com/bbc/microbit/profile/.
Initial code:
private final BluetoothLE.BLEResponseHandler<String> lEDTextHandler = new BluetoothLE.BLEResponseHandler<String>() { @Override public void onWrite(String serviceUuid, String characteristicUuid, List<String> values) { WroteLEDText(values.get(0)); } };
Revised code:
private final BluetoothLE.BLEResponseHandler<Integer> lEDTextHandler = new BluetoothLE.BLEResponseHandler<Integer>() { @Override public void onWrite(String serviceUuid, String characteristicUuid, List<Integer> values) { WroteLEDText(values); } };
Initial code:
public void WriteLEDText(final String LED_Text_Value) { if (bleConnection != null) { bleConnection.ExWriteStringValuesWithResponse(LED_SERVICE_UUID, LED_TEXT_CHARACTERISTIC_UUID, false, LED_Text_Value, lEDTextHandler); } else { reportNullConnection("WriteLEDText"); } }
Revised code:
public void WriteLEDText(final String LED_Text_Value) { if (bleConnection != null) { bleConnection.ExWriteByteValuesWithResponse(LED_SERVICE_UUID, LED_TEXT_CHARACTERISTIC_UUID, false, LED_Text_Value, lEDTextHandler); } else { reportNullConnection("WriteLEDText"); } }
I think the main bug is that the BLE extension cannot directly send strings to microbit. Instead, it can send characters by sending bytes. That is also how the microbit Uart extension works. I tried to find why function "ExWriteStringValuesWithResponse()" in BLE extension doesn't work but I still have no idea about it.
I generated an .aix file from the revised code and tested it in app inventor. It works well to scroll text on micro:bit with no need to change the app inventor code and the tutorial. The initial code, revised code, .aix file are also attached: codeand.aix.zip
I'm not sure whether my changes to the code are proper, while it works well. Could you please take a look at my code? Thank you very much.
Regards, Ying
@ellelili2025 Hi Li. I've tested the LED extension on microbit V1. For the writeLEDText function, the V1 also doesn't work with the original extension, while it works well with modified version. The other functions works well. Thanks.
Please make sure the attached micro bit LED project work with latest micro bit V2. MicrobitLED.aia.zip
Instructions: http://iot.appinventor.mit.edu/assets/howtos/MIT_App_Inventor_Microbit_LED.pdf