Now the Arduino can send connections to the Jumperless over UART

First of all, Guy Dupont is an absolute rockstar. The same day he got his Jumperless, he started writing a CircuitPython library to have a microcontroller send a list of connections to the Jumperless over the UART lines. I’m sure he’ll publish that somewhere when it’s ready.

Inspired, I decided the least I could do was to add better support for that in Jumperless’s firmware to make it as quick as possible. At this point, you can send a new connection list every ~200mS, faster than that it kinda trips up.

What’s going on here is the Arduino is scanning through each row and reading the voltage with a digitalRead(), it has the pullups enabled so if nothing’s connected, it’ll read HIGH. If it reads LOW, it pauses for a couple seconds.

What it’s sending over Serial is just "f 80-[whatever row], 116-70, 117-71, "

Here’s what all those numbers #define out to:

So here’s the breakdown of what that string means:
f //to tell the Jumperless to accept a preformatted node file
80- //that’s D10 on the Nano (chosen arbitrarily)
[1-60], // these are the breadboard rows it’s scanning through
116-70, 117-71, // this connects the UART Rx and Tx on the RP2040 to D0 and D1 (Tx and Rx) on the Nano. This is so it remains connected and ready to send the next row.

You’ll need to load the latest firmware from here to do this.

And here’s the Arduino code if you want to try this yourself. You’ll need to short the 2 resistors as shown in the release page if you want to program the Arduino from the Jumperless, but to just go the other direction, you don’t (5V → 3.3V parts).

void setup() {

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(10, INPUT_PULLUP);
  delay(3500);
  Serial.begin(115200);
  delay(500);
}

int count = 1;

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(160);
  digitalWrite(LED_BUILTIN, LOW);
  delay(10);

  if (digitalRead(10) == 0) {
    delay(3000);
  }

  Serial.write("f 80-");
  Serial.print(count);
  Serial.write(",116-70,117-71,");  //these 2 connections reconnect the UART lines so it's ready to send the next connection


  count++;
  if (count > 60) {
    count = 1;
  }
}

Let me know how all this works for you and if you run into any issues.

Speak of the devil…

https://x.com/gvy_dvpont/status/1736495560079647007