-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSensor.cpp
107 lines (86 loc) · 2.33 KB
/
Sensor.cpp
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
#include "Arduino.h"
#include "Sensor.h"
Lichtsensor::Lichtsensor() {
_pin_sen = -1;
helligkeit = 0;
}
Lichtsensor::Lichtsensor(int pin_sen) {
_pin_sen = pin_sen;
}
int Lichtsensor::getWert() {
return analogRead(_pin_sen);
}
void Lichtsensor::update() {
helligkeit = getWert();
}
/* Der Helligkeitswert hat eine Auflösung von 10bit (Wert von 0-1023)
Der I2C-Bus kann aber nur jeweils 1 byte (= 8 bit) senden.
Also müssen die 10 bit in 8 bit und 2 bit aufgeteil werden und getrennt gesendet werden.
Ansonsten hätte man statt einem Wert von 0-1023 nur einen Wert von 0-255.
Deshalb werden die sogenannten high und low bytes separat gesendet.
*/
// helligkeit_low berechnet das Low-Byte
byte Lichtsensor::helligkeit_low() {
return (helligkeit & 0xff );
}
// helligkeit_high berechnet das High-Byte
byte Lichtsensor::helligkeit_high() {
return ((helligkeit >> 8) & 0xff );
}
Farbsensor::Farbsensor() {
_pin_R = -1;
_pin_G = -1;
_pin_B = -1;
}
Farbsensor::Farbsensor(int pin_sen, int pin_R, int pin_G, int pin_B) : Lichtsensor(pin_sen) {
_pin_sen = pin_sen;
_pin_R = pin_R;
_pin_G = pin_G;
_pin_B = pin_B;
pinMode(_pin_sen, INPUT);
pinMode(_pin_R, OUTPUT);
pinMode(_pin_G, OUTPUT);
pinMode(_pin_B, OUTPUT);
setLED(WEISS);
}
void Farbsensor::update() {
setLED(ROT);
delay(ZEIT);
int _wert_R = 1023 - getWert();
setLED(GRUEN);
delay(ZEIT);
int _wert_G = 1023 - getWert();
setLED(BLAU);
delay(ZEIT);
int _wert_B = 1023 - getWert();
setLED(WEISS);
delay(ZEIT);
helligkeit = 1023 - getWert();
rot_prozent = (byte) _wert_R * 100L / ( _wert_R + _wert_G + _wert_B);
blau_prozent = (byte) _wert_G * 100L / ( _wert_R + _wert_G + _wert_B);
gruen_prozent = (byte) _wert_B * 100L / ( _wert_R + _wert_G + _wert_B);
}
void Farbsensor::setLED(int farbe) {
switch (farbe) {
case WEISS:
digitalWrite(_pin_R, HIGH);
digitalWrite(_pin_G, HIGH);
digitalWrite(_pin_B, HIGH);
break;
case ROT:
digitalWrite(_pin_R, HIGH);
digitalWrite(_pin_G, LOW);
digitalWrite(_pin_B, LOW);
break;
case GRUEN:
digitalWrite(_pin_R, LOW);
digitalWrite(_pin_G, HIGH);
digitalWrite(_pin_B, LOW);
break;
case BLAU:
digitalWrite(_pin_R, LOW);
digitalWrite(_pin_G, LOW);
digitalWrite(_pin_B, HIGH);
break;
}
}