Thanks for the replies.
The model is not very large, with overall dimensions of roughly a foot long by 3-4 inches wide and about 8 inches tall. The Nautilus' interior has a rather small viewable area at around 3" x 3" x 4".
I have several 50 resistor packs in a wide range of values, more than enough blue and green LEDs from a starter Arduino kit that I'm using for the water, and as far as the effect of walking around the ship with a candle/lantern, I plan on using some of the MANY small LEDs I've harvested from broken LCD displays. (The harvested LEDs are mainly to satisfy George's desire to re-purpose anything he can keep out of a land fill)
I'm also using breadboards for the prototyping and will eventually upload the completed sketch to one of the Nano boards I bought.
The physical assembly (including soldering) is much more familiar to me than the coding part. I have assembled a variety of electronics kits over the past few years, but nothing needing programming until now.
After a HUGE 'Thank You' to johnwasser, here is the code I have so far, modified, by trial and error, to serve as the underwater look:
const int CHANNELS = 6;
const int LED_PINS[CHANNELS] = {3, 5, 6, 9, 10, 11};
// Note: There is no speed penalty to use multiply or divide in compile-time constants since the
// math is done by the compiler, not the microprocessor.
// Note: To avoid overflow warnings, constants that, multiplied together, won't fit in a signed integer
// had to be marked "unsigned"
const unsigned int MIN_BRIGHTNESS[CHANNELS] = {3*256, 5*256, 10*256, 15*256, 10*256, 5*257};
const unsigned int MAX_BRIGHTNESS[CHANNELS] = {205U*256U, 103U*256U, 180U*256U, 210U*256U, 200U*256U, 240U*256U};
unsigned int CurrentBrightness[CHANNELS] = {175U*256U, 60*256, 120*256, 100*256, 75*256, 200U*256U};
int FadeAmount[CHANNELS] = {19, 20, 22, 25, 23, 21}; // Slow the fades down by a factor of 85
// the setup routine runs once when you press reset:
void setup() {
for (int i = 0; i < CHANNELS; i++) {
pinMode(LED_PINS[i], OUTPUT);
}
}
// the loop routine runs over and over again forever:
void loop() {
for (int i = 0; i < CHANNELS; i++) {
analogWrite(LED_PINS[i], CurrentBrightness[i]>>8);
CurrentBrightness[i] += FadeAmount[i];
// reverse the direction of the fading at the ends of the fade:
if (CurrentBrightness[i] <= MIN_BRIGHTNESS[i] ||
CurrentBrightness[i] >= MAX_BRIGHTNESS[i]) {
FadeAmount[i] = -FadeAmount[i];
}
}
// wait for one milliseconds to see the dimming effect
delay(1); // Speed the fades up by a factor of 90
}