Here's the code:
#include "rgb.h"
rgb_led led_array[4];
void setup()
{
randomSeed(analogRead(0));
led_array[0].initialise(3, 2, 4);
led_array[1].initialise(6, 5, 7);
led_array[2].initialise(9, 8, 10);
led_array[3].initialise(12, 11, 13);
}
void loop()
{
for (int i = 0; i < 4; i++)
{
led_array[i].update();
led_array[i].output();
}
delay(10);
}
This lot goes into a new tab in the Arduino project called rgb.h:
#ifndef RGB_LED
#define RGB_LED
#include <Arduino.h>
class rgb_led
{
byte pin[3];
byte value[3];
byte target[3];
public:
void update(void);
void output(void);
void initialise(byte, byte, byte);
};
#endif
And this lot goes into another tab called rgb.cpp:
#include "rgb.h"
void rgb_led::initialise(byte r, byte g, byte b)
{
pin[0] = r;
pin[1] = g;
pin[2] = b;
for (int i=0; i<3; i++)
{
pinMode(pin[i], OUTPUT);
value[i] = 0;
target[i] = random(256);
}
}
void rgb_led::update(void)
{
for (int i=0; i<3; i++)
{
if (value[i] < target[i])
{
value[i]++;
}
else if (value[i] > target[i])
{
value[i]--;
}
else
{
target[i] = random(256);
}
}
}
void rgb_led::output(void)
{
for (int i=0; i<3; i++)
{
analogWrite(pin[i], value[i]);
}
}
No comments:
Post a Comment