mir fiel jetzt erst auf das du ja fast den unveränderten Code nochmal gepostet hast. Semilokonfehler nicht beseitigt.
Ganz schön frech! Pins doppelt belegt, pinModes falsch und andere Dinger. Da fehlen eindeutig Grundlagen.
Irgendwas mitten in switch case ist bedeutungslos. Es werden nur die case und default abgearbeitet.
Ich habe dir jetzt mal einen Code als Grundlage zusammengestellt. Neue Pinbelegung beachten.
Anschauen, verstehen lernen, erweitern. Was noch passieren soll wenn counter > Sollwert weiß ich nicht.
const byte CD4511_1_A = 2;
const byte CD4511_1_B = 3;
const byte CD4511_1_C = 4;
const byte CD4511_1_D = 5;
const byte CD4511_2_A = A0;
const byte CD4511_2_B = A1;
const byte CD4511_2_C = A2;
const byte CD4511_2_D = A3;
const byte Lichtschranke = A4;
const byte Reset = 6;
const byte Taster1 = 7; // +
const byte Taster2 = 8; // -
const byte Led_rot = 10;
const byte Led_gruen = 11;
int counter = 0 ;
int Sollwert = 9;
unsigned long last_millis;
bool state_LS = true;
void setup() {
Serial.begin(9600);
pinMode(CD4511_1_D, OUTPUT);
pinMode(CD4511_1_C, OUTPUT);
pinMode(CD4511_1_B, OUTPUT);
pinMode(CD4511_1_A, OUTPUT);
pinMode(CD4511_2_D, OUTPUT);
pinMode(CD4511_2_C, OUTPUT);
pinMode(CD4511_2_B, OUTPUT);
pinMode(CD4511_2_A, OUTPUT);
pinMode(Reset, INPUT_PULLUP); // Taster nur an Pin und Masse anklemmen
pinMode(Taster1, INPUT_PULLUP); // Taster nur an Pin und Masse anklemmen
pinMode(Taster2, INPUT_PULLUP); // Taster nur an Pin und Masse anklemmen
pinMode(Lichtschranke, INPUT); // überflüssig, aber meinetwegen, stört nicht
pinMode(Led_rot, OUTPUT);
pinMode(Led_gruen, OUTPUT);
digitalWrite(Led_rot, HIGH);
}
void loop()
{
int val = analogRead(Lichtschranke);
if ( val >= 500) {
state_LS = false;
}
else {
state_LS = true;
}
if (state_LS == false) {
if (millis() - last_millis > 200) { // Ersatz für delay(200)
last_millis = millis();
Serial.println(counter);
counter++;
}
}
if (digitalRead(Reset) == LOW) {
counter = 0;
}
if (counter >= Sollwert) {
digitalWrite(Led_gruen, HIGH);
digitalWrite(Led_rot, LOW);
}
Aktualisiere_Display(counter % 10);
} // Ende loop
// ------ eigene Funktionen ------ //
void Aktualisiere_Display (int Zahl) // 7 Segmentanzeige
{
switch (Zahl)
{
case 0: Serial.println("0.0.0.0");
break;
case 1: Serial.println("0.0.0.1");
break;
case 2: Serial.println("0.0.1.0");
break;
case 3: Serial.println("0.0.1.1");
break;
case 4: Serial.println("0.1.0.0");
break;
case 5: Serial.println("0.1.0.1");
break;
case 6: Serial.println("0.1.1.0");
break;
case 7: Serial.println("0.1.1.1");
break;
case 8: Serial.println("1.0.0.0");
break;
case 9: Serial.println("1.0.0.1");
break;
default: Serial.println("Zahl außer Wertebereich!");
break;
}
}
// Eigene Funktionen ende //
Ausser ein paar rudimentären Formatierungen (Einrückungen) hast Du in der Tat nichts verbessert - im Gegenteil. Alle Hinweise auf Fehler im Code hast Du bisher ignoriert und stattdessen noch neue eingebaut. So kann das nichts werden.
Und trenne ( und kommentiere! ) deutlich, was Pinzuordnungen sind ( die auch mit const definieren ) und was normale Variable sind.
int CD4511_2_D = 7; //<- Pinzuordnung
int Sollwert = 10; // Variable mit Initiierungswert
int Led_rot = 10; //<- Pinzuordnung
In dem Chaos tut man sich schwer dir zu helfen. Wie schon gesagt: Grundlagen lernen, ordentlich formatieren, strukturieren und kommentieren.