Jay-D Screen Is Blinking The Input Test

Hello!

I recently finished soldering my Jay-D unit, and after double checking my soldered joints, I plugged the Jay-D into power (The adapter I used is 2.4 A) and the screen started blinking the input test screen every second. It is not responsive to inputs, except from the reset button on the Jay-D, which just turns off the screen, and then it goes back to doing the same thing. I tried using multiple different power sources (The wall, a power bank, etc) but to no avail.

Any help would be much appreciated

2 Likes

Hi, I’m in the same situation.
I tried powering from PSU and PC USB 2/3/C.
I tried restoring the firmware but it seems that the CircuitBlocks cannot see the Jay-D.

1 Like

Update: I could update the firmware, if you’re on win10 just go to this link select download tab and download the updated [CP210x Universal Windows Driver]
(https://www.silabs.com/documents/public/softwar/CP210x_Universal_Windows_Driver.zip)

Extract it to a folder, plug the Jay-D, go to Devices section in Control panel of Win10, select
PORTS(COM-LPT), right click on the Silicon Labs CP210x and update the driver (Source → Choose from PC).
Restart the PC and then you’ll get CircuitBlocks seen the Jay-D.

BUT I STILL GET THE BLINKING INPUT TEST AFTER RESTORE THE FIRMWARE.

1 Like

Hi, I wrote this code to test all the inputs, try it.

To Albert and the Circuit Mess staff:
Please chek my code if is correct, thanks.
(Encoder’s push buttons are logic inverted?).

I think we got a Nuvoton faulty board, no inputs working here…

#include <Arduino.h>
#include <CircuitOS.h>
#include <JayD.h>
#include <Loop/LoopManager.h>
#include <Input/InputJayD.h>

boolean pushENCL3;
boolean pushENCL2;
boolean pushENCL1;
boolean pushENCR1;
boolean pushENCmid;
boolean pushENCR2;
boolean pushENCR3;
boolean push1True;
boolean push2True;
int valENCmid;
int valuePotMrec;
int valENCleft1;
int valENCright1;
int valuePotRrec;
int valENCleft2;
int valENCright2;
int valuePotLrec;
int valENCleft3;
int valENCright3;

Display* display;
Sprite* sprite;

void button_BTN_L3_press(){
  pushENCL3 = true;
  valuePushENCL3();

}

void button_BTN_L2_press(){
  pushENCL2 = true;
  valuePushENCL2();

}

void button_BTN_L1_press(){
  pushENCL1 = true;
  valuePushENCL1();

}

void button_BTN_L3_release(){
  pushENCL3 = false;
  valuePushENCL3();

}

void button_BTN_L2_release(){
  pushENCL2 = false;
  valuePushENCL2();

}

void button_BTN_L1_release(){
  pushENCL1 = false;
  valuePushENCL1();

}

void button_BTN_R1_press(){
  pushENCR1 = true;
  valuePushENCR1();

}

void button_BTN_MID_press(){
  pushENCmid = true;
  valuePUSHencMID();

}

void button_BTN_R2_press(){
  pushENCR2 = true;
  valuePushENCR2();

}

void button_BTN_R3_press(){
  pushENCR3 = true;
  valuePushENCR3();

}

void button_BTN_MID_release(){
  pushENCmid = false;
  valuePUSHencMID();

}

void button_BTN_R1_release(){
  pushENCR1 = false;
  valuePushENCR1();

}

void button_BTN_R2_release(){
  pushENCR2 = false;
  valuePushENCR2();

}

void button_BTN_L_release(){
  push1True = false;
  valuePUSH1();

}

void button_BTN_R_release(){
  push2True = false;
  valuePUSH2();

}

void button_BTN_L_press(){
  push1True = true;
  valuePUSH1();

}

void button_BTN_R_press(){
  push2True = true;
  valuePUSH2();

}

void encoder_ENC_MID_moved(int8_t amount){
  valENCmid += amount;
  valueENCmid();

}

void potentiometer_POT_MID_moved(uint8_t value){
  valuePotMrec += value;
  valuePotM();

}

void encoder_ENC_L1_moved(int8_t amount){
  valENCright3 += amount;
  valueENCright3();

}

void potentiometer_POT_R_moved(uint8_t value){
  valuePotRrec += value;
  valuePotR();

}

void potentiometer_POT_L_moved(uint8_t value){
  valuePotLrec += value;
  valuePotL();

}

int valuePushENCL3() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_BLUE);
  if (true) {
    sprite->drawString("ON", 137, 56);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 56);
    display->commit();
  }
}

int valuePushENCL2() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_BLUE);
  if (true) {
    sprite->drawString("ON", 137, 45);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 45);
    display->commit();
  }
}

int valuePushENCL1() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_BLUE);
  if (true) {
    sprite->drawString("ON", 137, 34);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 34);
    display->commit();
  }
}

int valuePushENCR1() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_ORANGE);
  if (true) {
    sprite->drawString("ON", 137, 78);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 78);
    display->commit();
  }
}

int valuePushENCR2() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_ORANGE);
  if (true) {
    sprite->drawString("ON", 137, 89);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 89);
    display->commit();
  }
}

int valuePUSHencMID() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_RED);
  if (true) {
    sprite->drawString("ON", 137, 67);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 67);
    display->commit();
  }
}

int valuePushENCR3() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_ORANGE);
  if (true) {
    sprite->drawString("ON", 137, 101);
    display->commit();
  } else {
    sprite->drawString("OFF", 137, 101);
    display->commit();
  }
}

int valuePUSH1() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_LIGHTGREY);
  if (push1True) {
    sprite->drawString((String("Push L: ") + String("ON")), 10, 112);
    display->commit();
  } else {
    sprite->drawString((String("Push L: ") + String("OFF")), 10, 112);
    display->commit();
  }
}

int valuePUSH2() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_WHITE);
  if (push1True) {
    sprite->drawString((String("Push R: ") + String("ON")), 83, 112);
    display->commit();
  } else {
    sprite->drawString((String("Push R: ") + String("OFF")), 83, 112);
    display->commit();
  }
}

int valueENCmid() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_RED);
  sprite->drawString((String("Value ENC Mid: ") + String(valENCmid)), 10, 67);
  display->commit();
}

int valuePotM() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_GREEN);
  sprite->drawString((String("Value POT M: ") + String(valuePotMrec)), 10, 12);
  display->commit();
}

int valueENCleft1() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_BLUE);
  sprite->drawString((String("Value ENC L 1: ") + String(valENCleft1)), 10, 34);
  display->commit();
}

int valueENCright1() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_ORANGE);
  sprite->drawString((String("Value ENC R 1: ") + String(valENCright1)), 10, 78);
  display->commit();
}

int valuePotR() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_GREEN);
  sprite->drawString((String("Value POT R: ") + String(valuePotRrec)), 10, 23);
  display->commit();
}

int valueENCleft2() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_BLUE);
  sprite->drawString((String("Value ENC L 2: ") + String(valENCleft2)), 10, 45);
  display->commit();
}

int valueENCright2() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_ORANGE);
  sprite->drawString((String("Value ENC R 2: ") + String(valENCright2)), 10, 89);
  display->commit();
}

int valuePotL() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_GREEN);
  sprite->drawString((String("Value POT L: ") + String(valuePotLrec)), 10, 0);
  display->commit();
}

int valueENCleft3() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_BLUE);
  sprite->drawString((String("Value ENC L 3: ") + String(valENCleft3)), 10, 56);
  display->commit();
}

int valueENCright3() {
  sprite->setTextSize(1);
  sprite->setTextFont(2);
  sprite->setTextColor(TFT_ORANGE);
  sprite->drawString((String("Value ENC R 3: ") + String(valENCright3)), 10, 101);
  display->commit();
}


void setup() {
  Serial.begin(115200);
  Serial.println();
  JayD.begin();
  pinMode(PIN_BL, OUTPUT); digitalWrite(PIN_BL, LOW);
  display = &JayD.getDisplay();
  sprite = display->getBaseSprite();
  InputJayD::getInstance()->setBtnPressCallback(BTN_L3, button_BTN_L3_press);
  InputJayD::getInstance()->setBtnPressCallback(BTN_L2, button_BTN_L2_press);
  InputJayD::getInstance()->setBtnPressCallback(BTN_L1, button_BTN_L1_press);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_L3, button_BTN_L3_release);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_L2, button_BTN_L2_release);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_L1, button_BTN_L1_release);
  InputJayD::getInstance()->setBtnPressCallback(BTN_R1, button_BTN_R1_press);
  InputJayD::getInstance()->setBtnPressCallback(BTN_MID, button_BTN_MID_press);
  InputJayD::getInstance()->setBtnPressCallback(BTN_R2, button_BTN_R2_press);
  InputJayD::getInstance()->setBtnPressCallback(BTN_R3, button_BTN_R3_press);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_MID, button_BTN_MID_release);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_R1, button_BTN_R1_release);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_R2, button_BTN_R2_release);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_L, button_BTN_L_release);
  InputJayD::getInstance()->setBtnReleaseCallback(BTN_R, button_BTN_R_release);
  InputJayD::getInstance()->setBtnPressCallback(BTN_L, button_BTN_L_press);
  InputJayD::getInstance()->setBtnPressCallback(BTN_R, button_BTN_R_press);
  InputJayD::getInstance()->setEncoderMovedCallback(ENC_MID, encoder_ENC_MID_moved);
  InputJayD::getInstance()->setPotMovedCallback(POT_MID, potentiometer_POT_MID_moved);
  InputJayD::getInstance()->setEncoderMovedCallback(ENC_L1, encoder_ENC_L1_moved);
  InputJayD::getInstance()->setPotMovedCallback(POT_R, potentiometer_POT_R_moved);
  InputJayD::getInstance()->setPotMovedCallback(POT_L, potentiometer_POT_L_moved);

  pushENCL3 = false;
  pushENCL2 = false;
  pushENCL1 = false;
  pushENCR3 = false;
  pushENCR2 = false;
  pushENCR1 = false;
  pushENCmid = false;
  push1True = false;
  push2True = false;
  sprite->clear(TFT_BLACK);
  valuePotL();
  valuePotR();
  valuePotM();
  valueENCleft1();
  valuePushENCL1();
  valueENCleft2();
  valuePushENCL2();
  valueENCleft3();
  valuePushENCL3();
  valueENCmid();
  valuePUSHencMID();
  valueENCright1();
  valuePushENCR1();
  valueENCright2();
  valuePushENCR2();
  valueENCright3();
  valuePushENCR3();
  valuePUSH1();
  valuePUSH2();


}

void loop() {
  LoopManager::loop();


}

Processing: test.jpg…

1 Like

Having the same issue over here. I don’t code and neither does my son, yet. None of the dials are working it’s just blinking at us. What should we be doing here? Is there an issue with us being in North America and the voltage difference between here and Europe?

1 Like

Hi Kraken, voltage difference isn’t relevant since it powers up from USB C plug.
USB voltage is standard everywhere, 5 volt.

Did you install Cuircuit Blocks software? If not do it and try to restore the firmware into the JAY-D, there is the guide on how to do it here https://circuitmess.com/resources/guides/en/circuitblocks-jay-d/jay-d-coding-4-1

After installing the Circuit Blocks software, run it, plug the USB cable you got into the package, and follow the rostore guide. Let me know. Thanx

1 Like

Having the same issue here as well. Input Test screen is blinking on power up. Tried Feetrikki_Marcon’s suggestion to restore the firmware, which I completed successfully, but it did not fix the issue. Have also tried different USB cables and power sources.

Is anyone from the CircuitMess team reading this thread? Would love to hear your thoughts.

1 Like

Hi tuckshop, did you uploaded and tried my test code?

1 Like

Hi Feetrikki,

Couldn’t figure out how to run your code – I’m new at building electronics and I’m only just starting to figure out the world of Arduino and programming.

I do have some good news to share though. I tried restoring the firmware again earlier today and this time it worked! My Jay-D is functioning as expected. I think the team at CircuitMess may have updated the firmware as the CircuitBlocks software took a few minutes to update itself when I ran the software. Haven’t had much time to play around with the Jay-D yet but I’m very excited to have it working!

1 Like

Hi! :slight_smile:

Sorry for the late reply.

Unfortunately, the batch of Jay-Ds that was sent for you had a minor software issue.

We have detected that the semiconductor on the board needs a longer time to boot, which was unexpected, and this causes a problem while booting the device.

This is a minor software issue that we have solved by publishing a software update.

Hence, when you assemble your Jay-D, you will have to connect it to your PC and update the firmware using the CircuitBlocks.

Please, follow the build guide or FAQ, and you’ll find the instructions on how to do so in the Jay-D build guide.

Sincerely,
Monika from CircuitMess