-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRGB_LED.ino
148 lines (120 loc) · 2.26 KB
/
RGB_LED.ino
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
* RGB_LED.ino
*
* Created on: 12 aout 2017
* Author: Clement ABADIE
*/
#include "RGB_LED.h"
void setup_RGB_LED()
{
pinMode(RGB_LED_PIN_R, OUTPUT);
pinMode(RGB_LED_PIN_G, OUTPUT);
pinMode(RGB_LED_PIN_B, OUTPUT);
}
void RGB_LED_raw_set(int R, int G, int B)
{
analogWrite(RGB_LED_PIN_R,255-R);
analogWrite(RGB_LED_PIN_G,255-G);
analogWrite(RGB_LED_PIN_B,255-B);
}
void RGB_LED_set(int R, int G, int B)
{
RGB_LED_raw_set(255*R/100,255*G/100,255*B/100);
}
void RGB_LED_set_red()
{
RGB_LED_raw_set(255,0,0);
}
void RGB_LED_set_blue()
{
RGB_LED_raw_set(0,0,255);
}
void RGB_LED_set_green()
{
RGB_LED_raw_set(0,255,0);
}
void RGB_LED_set_yellow()
{
RGB_LED_raw_set(255,204,0);
}
void RGB_LED_set_purple()
{
RGB_LED_raw_set(255,0,255);
}
void RGB_LED_set_cyan()
{
RGB_LED_raw_set(0,255,255);
}
void RGB_LED_set_black()
{
RGB_LED_raw_set(0,0,0);
}
void RGB_LED_set_white()
{
RGB_LED_raw_set(255,255,255);
}
void RGB_LED_set_orange()
{
RGB_LED_raw_set(255,102,0);
}
void RGB_LED_display_value(float VALUE, int MIN, int MAX, LED_COLOR_t MIN_COLOR, LED_COLOR_t MAX_COLOR){
// Scaling
int VALUE_255 = ( (int) VALUE - MIN ) * 255 / MAX;
// Reverse logic
int MIN_value = VALUE_255;
int MAX_value = 255 - VALUE_255;
analogWrite(MIN_COLOR,MIN_value);
analogWrite(MAX_COLOR,MAX_value);
}
void RGB_LED_display_value_RGB(float VALUE, float MIN, float MAX){
// Scaling
// Reverse logic
int VALUE_255 = 0;
int R = 0;
int G = 0;
int B = 0;
float MED = (MAX + MIN) / 2;
if(VALUE == MED)
{
R = 0;
G = 255;
B = 0;
}
else if(VALUE>MAX)
{
R = 255;
G = 0;
B = 0;
}
else if(VALUE<MIN)
{
R = 0;
G = 0;
B = 255;
}
else if(VALUE>MED)
{
VALUE_255 = ( VALUE - MED ) * 255 / (MAX - MED);
R = VALUE_255;
G = 255 - VALUE_255;
B = 0;
}
else if(VALUE<MED)
{
VALUE_255 = ( VALUE - MIN ) * 255 / (MED - MIN);
R = 0;
G = VALUE_255;
B = 255 - VALUE_255;
}
#ifdef DEBUG
Serial.print("R : ");
Serial.print(R);
Serial.print(" G : ");
Serial.print(G);
Serial.print(" B : ");
Serial.print(B);
Serial.print(" VALUE_255 : ");
Serial.println(VALUE_255);
#endif
RGB_LED_raw_set(R,G,B);
}