Everything worked ok for version 1 of the installation the other day. Thanks loads for your help in getting there. Don't know if I ever said but these led's were for a sound reactive light installation in a club.

I now need to refine a few things so have a couple more questions if you'd be so kind

I ended up using a version of firmata to interface the arduino with the control software (vvvv) and the resolution of the pwm outputs with this is only 8 bit. Turns out this isn't at all enough to do smooth and subtle transitions in brightness at the lower brightness levels as there is a very visible step between each value. Any idea what the maximum resolution is when using pwm straight from the arduino board?

Something that would help in addition to this would be a way to electronically affect the current from the output with a sort of function curve which would mean that the spacing between steps in the lower end is smaller than the spacing at the higher end. This would give me more control over the lower brightness values which I found to be of most importance. Is there any (simple) way to acheive this?

Something that would help in addition to this would be a way to electronically affect the current from the output with a sort of function curve which would mean that the spacing between steps in the lower end is smaller than the spacing at the higher end. This would give me more control over the lower brightness values which I found to be of most importance. Is there any (simple) way to acheive this?

You might use something like a 6-bit (64 step) brightness correction table (array) to provide 64 brightness level values spanning the 256 level PWM duty cycle range. I've always called it a gamma correction table but that really isn't a correct description. Here's an example set of values you might try for the array;