summaryrefslogtreecommitdiff
path: root/arduino/rgb/rgb.ino
blob: 7d61ceb8ba4c828e59a7b7cb1af13cf1b7d14e06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <SPI.h>
#include <Thread.h>

const int redPin = 2;
const int greenPin = 4;
const int bluePin = 3;

int red;
int green;
int blue;

void red_thread();
bool r_rev = false;

void green_thread();
bool g_rev = false;

void blue_thread();
bool b_rev = false;

Thread r_fade = Thread();
Thread g_fade = Thread();
Thread b_fade = Thread();

void setup()
{
	Serial.begin(9600);
	pinMode(redPin, OUTPUT);
	pinMode(greenPin, OUTPUT);
	pinMode(bluePin, OUTPUT);

	/* set all values to 0 */
	red = 0;
	green = 0;
	blue = 0;
	r_fade.enabled = false;
	r_fade.onRun(red_thread);
	r_fade.setInterval(10);

	g_fade.enabled = false;
        g_fade.onRun(green_thread);
        g_fade.setInterval(10);

	b_fade.enabled = false;
        b_fade.onRun(blue_thread);
        b_fade.setInterval(10);

}

void red_thread()
{
        if (red == 255)
                r_rev = true;
        if (red == 0)
                r_rev = false;
        if (!r_rev)
                red++;analogWrite(redPin, red);
        if (r_rev)
                red--;analogWrite(redPin, red);
}

void green_thread()
{
        if (green == 255)
                g_rev = true;
        if (green == 0)
                g_rev = false;
        if (!g_rev)
                green++;analogWrite(greenPin, green);
        if (g_rev)
                green--;analogWrite(greenPin, green);
}


void blue_thread()
{
        if (blue == 255)
                b_rev = true;
        if (blue == 0)
                b_rev = false;
        if (!b_rev)
                blue++;analogWrite(bluePin, blue);
        if (b_rev)
                blue--;analogWrite(bluePin, blue);
}


void loop()
{
	if (r_fade.shouldRun())
		r_fade.run();
	if (g_fade.shouldRun())
                g_fade.run();
	if (b_fade.shouldRun())
                b_fade.run();

	/* read serial data */
	while (Serial.available() > 1)
	{

		red = Serial.parseInt();
		green = Serial.parseInt();
		blue = Serial.parseInt();
		analogWrite(redPin, red);
		analogWrite(greenPin, green);
		analogWrite(bluePin, blue);
	}
}