/
sound_display.ino
78 lines (66 loc) · 1.58 KB
/
sound_display.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
#include <Wire.h>
#define MAX_Y 8
#define MAX_X 8
#define MAX_VALUE 1023
#define MIN_VALUE 0
#include <Rainbowduino.h>
struct Color{
byte r;
byte g;
byte b;
};
typedef struct Color Color;
unsigned int currentX = 0;
void setup() {
Rb.init();
Serial.begin(9600); //For debug purposes
Wire.begin(8); // Join I2C with address #8
Wire.onReceive(receiveEvent); // register event
}
unsigned int integerValue=0;
char incomingByte;
void loop() {}
void draw(int signal){
if (currentX % MAX_X == 0) Rb.blankDisplay();
int cell;
if (signal > MAX_VALUE){
cell = MAX_Y - 1;
} else if (signal < MIN_VALUE){
cell = 0;
} else {
cell = signal / (MAX_VALUE / MAX_Y);
}
Serial.print("Signal: "); Serial.println(signal);
Serial.print("Cell: "); Serial.println(cell);
Serial.print("CurrentX: "); Serial.println(currentX);
Serial.println("---");
for (int i = 0; i <= cell; i++){
Color color = defineColor(i);
Rb.setPixelXY(currentX % MAX_X, i, color.r, color.g, color.b);
}
currentX++;
if (currentX == MAX_X) currentX = 0; //Prevent overflow
}
Color defineColor(int cell){
if (cell < 2) {
return {0x00, 0x255, 0x00};
} else if (cell >= 2 && cell < 5) {
return {0x50, 0x230, 0x00};
} else {
return {0x255, 0x00, 0x00};
}
}
void receiveEvent(int nbBits) {
if(nbBits == 2)
{
int receivedValue = Wire.read() << 8;
receivedValue |= Wire.read();
draw(receivedValue);
Serial.println(receivedValue);
}
else
{
Serial.print("Unexpected number of bytes received: ");
Serial.println(nbBits);
}
}