I have used both a scope and a Saleae Logic to try to get things working. What I am finding is that the timing of code executing doesn't seem to be consistent and as a result the baud rate can end up varying enough that the highs and lows are detected properly either leading to incorrect values/letters or framing errors.
Here's the project: https://makecode.com/_Ak7FePYy7cwL
Here's my Makecode function. Notice I have removed loops in an effort to try to figure out if I can address the timing issue. The code is implemented using MSB for data transfer.
Code: Select all
function sendSerialText2() {
messageToSend = "Goodbye My Friend!"
numChars = messageToSend.length
currChar = 0
for (let index7 = 0; index7 <= numChars - 1; index7++) {
currChar = messageToSend.charCodeAt(index7)
pins.A6.digitalWrite(false)
control.waitMicros(94)
if (currChar & 128) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 64) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 32) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 16) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 8) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 4) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 2) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
if (currChar & 1) {
pins.A6.digitalWrite(true)
} else {
pins.A6.digitalWrite(false)
}
control.waitMicros(94)
pins.A6.digitalWrite(true)
control.waitMicros(94)
}
}