Arduino’s broken Random()

If you are using your Arduino’s PRNG (Pseudo-Random Number Generator) for anything more serious than flashing random lights for your Christmas decorations, there’s a chance you might run into some unexpected issues, as the random() function in Arduino seems to be somewhat broken.

Why? Let me explain.

Background

Most basic random number generators in programming libraries and platforms are based on what is called a “Linear Congruential Generator” (LCG), and I have discussed them before here in my blog. As with any PRNG, the output of the algorithm ends up being a sequence of numbers “seemingly” selected at random, starting from a “seed”.

Given the basic structure of an LCG, after you have drawn X numbers from the generator, you’ll start getting the same sequence again. This is called the “period” of the LCG, and is one of the things you should know about the PRNG you are using (again, if you are serious about your random numbers, or you need a controlled, predictable and stable behavior).

Arguably, you should always know the weakness and strengths of the PRNG you are going to use, before even using it, as to avoid any potential pitfall and/or limitation (and that’s why it’s normally not a good idea to use the default implementation of a random generator in any language; For the most of it you don’t know what you are getting).

Read More

BT Audio Module with Aux Input

I have a very simple “audio/video” setup in my room. My main computer display doubles as my “TV” for playing videogames and watching movies. Technically speaking is just a 22″ HDTV with a bunch of input options, which I have connected to all of my devices, mostly through an HDMI hub, so I use the same screen for my computer, and my various consoles and audio/video devices.

Now, I’m not an audiophile, but as you normally get to expect, its integrated speakers are kinda too terrible to actually listen to anything through them for more than 10 seconds, so I have a couple of entry-level PC speakers connected to the TV audio output, which give relatively decent sound, or at least, better than with the monitor alone. Now, as all my gaming consoles and A/V devices go to the same TV, this is a pretty centralized setup, which is great for most of what I do, and has worked really well for years, but stops being great when I want to listen to something not physically connected to my system, like my phone, laptop, tablet, or whatever. So I thought of adding a bluetooth receiver somewhere in between.

After an online search I ended up buying this nice little module, which is essentially a BT 4.0 receiver that works with 5V. By default it will redirect whatever it receives through its physical “AUX IN” port to the output connector, but when a device connects to it over BT, it will ignore the physical input and play the audio it receives wirelessly instead.

The BT Audio module. As seen on most popular auction/e-commerce sites.

Read More