Hat jemand eine Ahnung, wozu dieses Programm sein soll?
#include <EEPROM.h> //EEPROM Speicher einbeziehen
const int LED_PIN=7; //Pin 7 für LED
const int R_PIN=A0;
const int G_PIN=A1;
const int B_PIN=A2;
const int DATEN_PIN=8;
const int TAKT_PIN=10;
const int SPEICHERN_PIN=9;
const int TASTER_PIN=2;
const int LED_RT=0x10;
const int LED_GE=0x08;
const int LED_GN=0x04;
const int LED_BL=0x02;
const int LED_WS=0x01;
const int R_REF_ADR=0;
const int G_REF_ADR=2;
const int B_REF_ADR=4;
const int WS_GRENZE=10;
const int MAX_GRENZE=40;
const int MIN_GRENZE=0;
int Leds=0;
int R_Spg;
int G_Spg;
int B_Spg;
int R_Ref;
int G_Ref;
int B_Ref;
int R_Map1, R_Map2;
int G_Map1, G_Map2;
int B_Map1, B_Map2;
int Max_Wert;
int Min_Wert;
int RG_Dif;
int RB_Dif;
int GB_Dif;
bool Taster;
void setup() {
pinMode(LED_PIN,OUTPUT); //Pin 7 als Ausgang setzen
pinMode(DATEN_PIN,OUTPUT);
pinMode(TAKT_PIN,OUTPUT);
pinMode(SPEICHERN_PIN,OUTPUT);
pinMode(TASTER_PIN,INPUT_PULLUP);
digitalWrite(DATEN_PIN,LOW); //Pin 8 wird bei Einschalten auf Low gesetzt (Pulldown)
digitalWrite(TAKT_PIN,LOW);
digitalWrite(SPEICHERN_PIN,HIGH);
zeigeLeds(0);
digitalWrite(LED_PIN,LOW);
delay(500);
Serial.begin(9600);
Serial.println("Fruehjahr 2020");
}
void loop() {
eingabe();
verarbeitung();
ausgabe();
}
void eingabe(void) {
R_Spg=0; G_Spg=0; B_Spg=0;
for (int i=0; i<5; i++) {
R_Spg=R_Spg+analogRead(R_PIN);
G_Spg=G_Spg+analogRead(G_PIN);
B_Spg=B_Spg+analogRead(B_PIN);
delay(1);
}
R_Spg=R_Spg/5;
G_Spg=G_Spg/5;
B_Spg=B_Spg/5;
Taster=digitalRead(TASTER_PIN);
}
void verarbeitung(void) {
readRef();
R_Map1=map(R_Spg,0,R_Ref,0,100);
G_Map1=map(G_Spg,0,G_Ref,0,100);
B_Map1=map(B_Spg,0,B_Ref,0,100);
Max_Wert=max(R_Map1,max(G_Map1,B_Map1));
Min_Wert=min(R_Map1,min(G_Map1,B_Map1));
if (Min_Wert==Max_Wert) Min_Wert--;
R_Map2=map(R_Map1,Min_Wert,Max_Wert,0,100);
G_Map2=map(G_Map1,Min_Wert,Max_Wert,0,100);
B_Map2=map(B_Map1,Min_Wert,Max_Wert,0,100);
Leds=0;
if (Max_Wert>=MAX_GRENZE) {
if (Max_Wert-Min_Wert<=WS_GRENZE) {
Leds=LED_WS;
} else if (R_Map2==100) {
if (G_Map2==0) Leds=LED_RT; else Leds=LED_GE;
} else if (G_Map2==100) {
Leds=LED_GN;
} else if (B_Map2==100) {
Leds=LED_BL;
}
}
}
void ausgabe(void) {
static int Zeile=0;
zeigeLeds(Leds);
if(Taster==LOW) writeRef();
delay(200);
}
void zeigeLeds(int Leds) {
digitalWrite(SPEICHERN_PIN,LOW);
delay(1);
for (int i=0; i<5; i++) {
digitalWrite(DATEN_PIN,bitRead(Leds,i));
delay(1);
digitalWrite(TAKT_PIN,HIGH);
delay(1);
digitalWrite(TAKT_PIN,LOW);
delay(1);
}
digitalWrite(DATEN_PIN,LOW);
delay(1);
digitalWrite(SPEICHERN_PIN,HIGH);
}
void readRef(void) {
EEPROM.get(R_REF_ADR,R_Ref);
EEPROM.get(G_REF_ADR,G_Ref);
EEPROM.get(B_REF_ADR,B_Ref);
}
void writeRef(void) {
EEPROM.put(R_REF_ADR,R_Spg);
EEPROM.put(G_REF_ADR,G_Spg);
EEPROM.put(B_REF_ADR,B_Spg);
}