New Logo Splash Screen

I’m messing around with the idea of changing the splash screen to something a little more unique for arduboy.

This is the sketch that I came up with that gets the idea across. Right now it’s not very efficient, I haven’t bothered to optimize the code at all so that is something that would have to be done for sure.

Mostly I just wanted to put it out there to get some feedback.

Description:
Using size 1 font the word ARDUBOY is written out letter by letter with a cursor advancing with it and a different note played at each letter to create a chime. The cursor blinks a few times before the logo disappears. The RGB led cycles throughout on a lower setting as to not be too bright.

Thoughts? Critiques? Alternative suggestions?

6 Likes

I like it. Will it be mute if the sound has been turned off?

1 Like

I like it too. I would like the music to sound more happy though, it is kinda neutral

Since Arduboy is kind of a mini gameboy i’m fine with the curent spashscreen (because nostalgia i guess ?).
But if you want to experiment other stuff like this one, it’s all good : sometimes it’s nice to get some fresh air (even for geeks like us, yes).

EDIT : Forgot to say that even if i like the little sounds an option to turn them off is needed because you can’t always play with sounds.

2 Likes

I love it! What might be a fun addition is to use four of the reserved bytes of SRAM to allow the users to change the notes, like how you can change the town tune in Animal Crossing!

It’s a rising arpegio in a major scale! That’s supposed to be happy!

I’m totally open if someone comes up with a better 7 note progression, thats actually one of the main reasons I put this up was to see if anyone with more music skills than me can come up with something.

Yeah the plan would be to read the value of the software eeprom value for sound is flagged

It is, and it isn’t. Actually I’ve always wanted to have something much different from the gameboy to give it our own identity. If we ever do video ads, this would really help us.

Ah, so expose the variable so that when you call the function it could be changed? Sure, that’s an interesting idea! I had also thought to maybe just make it pick random notes to sound kind of like 70’s mainframe computer beep-boop.

Please if someone can make a better sounding notes, I’d love to hear it!!

Back in February 2016, I forked and modified the original Arduboy library to animate the ARDUBOY logo using the display’s hardware horizontal scroll capability. As I recall, the response was basically “We want the logo to scroll down from the top like a Game Boy”. It appears that @bateske doesn’t share that opinion or has changed it.

Since I’m letting the hardware do the scrolling, it takes very little code.

Anyway, if anyone wishes to see my results, the following sketch will do the same as my experimental changes did. It calls begin(), so the current logo sequence displays once. Then, the loop displays the new logo followed by just printing “Hello world!” repeatedly. I haven’t added in any sounds or control of the RGB LED but it would be possible to do so (well, RGB LED control at least).

// Arduboy horizontal scroll boot logo experiment

#include <Arduboy2.h>
#include <ab_logo.c>

Arduboy2 arduboy;

void setup() {
  arduboy.begin();
  arduboy.clear();
  arduboy.display();
  arduboy.delayShort(1000);
}


void loop() {
  arduboy.clear();
  newBootLogo();
  
  arduboy.clear();
  arduboy.print("Hello world!");
  arduboy.display();
  
  arduboy.delayShort(2000);
}

const uint8_t HorizScrollCmd[] PROGMEM = {
  0x2E, // disable scroll

  0x27, // left horizontal scroll
  0x00, // dummy
  0x02, // start page
  0x07, // speed
  0x05, // end page
  0x00, // dummy
  0xFF, // dummy

  0x2F  // enable scroll
};

void newBootLogo() {
  const unsigned char *logo = arduboy_logo;
  uint16_t mem_position = 20 + 128 * 3;
  uint8_t c = 0;
 
  while (c < 88 * 2) {
    arduboy.sBuffer[mem_position++] = pgm_read_byte(logo);
    logo++;
    c++;
    if (c == 88) {
      mem_position += 128 - 88;
    }
  }
  arduboy.display();

  arduboy.delayShort(800);

  arduboy.LCDCommandMode();
  for (uint8_t i = 0; i < sizeof(HorizScrollCmd); i++) {
    arduboy.SPItransfer(pgm_read_byte(HorizScrollCmd + i));
  }
  arduboy.LCDDataMode();

  // This delay is currently tweaked so the logo scrolls twice back
  //  to center. I'm not sure how precise this will be, due to
  //  slightly differing internal clock speeds between displays.
  arduboy.delayShort(3650);

  arduboy.sendLCDCommand(0x2E); // disable scroll

  arduboy.delayShort(500);
}

Just having some fun, I know it’s not very likely to have something that does much less code space than what is in the library right now. Mostly just putting it out there and anyone who isn’t scraping for bytes is free to use it.

I’m working on updating it to try and make it smaller so it can be used with less of a footprint!

1 Like

I for one think that it’s certainly more interesting than the logo just scrolling down.

I had a go at trying to cut the byte usage down.
I know the digitalWrite stuff is affecting the lights, but I don’t know if the analogWrites are too. (I cut those out to see how much it slims it down.)

(To be honest I’m not a fan of the LEDs anyway, they’re quite bright and hurt my eyes when they flash too much. Can’t begin imagine what it would do to someone with photosensative epilepsy.)

I agree, I should have put higher value resistors there but it was intended to be bright as possible to be used as attention getting when on display. Mistakes were made.

What method did you used? @MLXXXp had a good suggestion of just drawing a full bitmap and progressively reveal it by over drawing a black rectangle over it. Although one thing he mentioned that I’m not sure anyone is using is the ability to push your own logo to the method used on default boot up to allow use of the optimized code. Rebuilding a logo like this would kind of prevent that from being viable, but I think there has been enough positive feedback from this logo to try and keep working on it a bit more.

Just as kind of a disclaimer, we don’t recommend Arduboy for people who might be sensitive to flashing lights.

2 Likes

That’s fair.
I would have said perhaps have separate dislay models, but obviously this was all kickstarter funded at first so I doubt you had the time or funds.

I just went for the simple ‘stick it in a loop and shove the logo string in progmem’ approach. I also altered the existing loop at the bottom to run 8 times and toggle bool variable to alternate between erasing and drawing the box character. Combining that with cutting out the LEDs (i.e. all the digitalRead and digitalWrite calls dropped it from 9412/1276 to 8720/1256.

I was going to try to shrink the end loop down by just drawing the box character and then drawing over it with a black rectangle but hadn’t got round to it. (I’ve been a bit distracted today.)

I uploaded my edit to Github. I only really did it as a bit of an experiment to see how much using loops would shrink it by. (I was going to include the flickering LEDs, but because of the mix between the digitalWrite and analogWrite calls, it would have been a bit tricky so I just cut them out for simplicity.)

Without testing I think the bitmap/rectangle approach might work better depending on how much memory the bitmap uses.

To be honest I haven’t seen anyone use the custom logo capabilities yet (I don’t know if that’s due to lack of interest or lack of awareness), so I’m not sure whether or not it’s something people are that worried about.

Good to know. To be honest though, I don’t consider myself to be particularly light-sensitive. I’m tempted to run a poll to find out if anyone else notices it or if it’s just me (which by all rights it probably might be).

No, its bad, I know from anecdotal evidence (almost) everyone hates the LED.

The rgb glow factor is pretty critical, it’s just an implementation mistake. As others have mentioned elsewhere, the better thing to do would be have it integrated into the plastics of the case so that it uses the ribs as a light pipe. This kind of happens naturally already but the direct beam overwhelms any ambient effects you get.

2 Likes

I’m glad it’s not just me.

I know there’s already a feature request list longer than my arm so I don’t suggest it lightly, but maybe it’s something worth looking to correct for the Arduboy 2.0.


Just in case it wasn’t obvious (I suspect it probably wasn’t), when I said:

The left side of the slash is “program storage space”, the right is “dynamic memory”, matching the order the IDE reports it as. I use that as shorthand for when I’m discussing program size.

Looks cool. But is it nearly as cool if it’s silent?

1 Like