Anfänger sucht hilfe mit einer 7 Segment Anzeige & Countdown

Hallo, ich habe folgendes Problem, ich habe mit einem Arduino Uno und einem cd4511 eine led 7 Segment-Anzeige angesteuert. Dies soll als Countdown fungieren mit einem 3min und dann 1 minutigen countdown.
Also genau heist das daß die 7 Segmentanzeige erst von 3min runter zählt und dannach von 1min runter, danach sollte es wieder bei 3 anfangen usw. Mein Code zur Zeit sieht folgender weise so aus:

// Pin matching from 4511 to Aduino
const int LedA = 5;
const int LedB = 2;
const int LedC = 3;
const int LedD = 4;

int count = 3;
int count1 = 1;

void setup()
{
// Configure the pins connected to the 4511 as outputs
pinMode(LedA, OUTPUT);
pinMode(LedB, OUTPUT);
pinMode(LedC, OUTPUT);
pinMode(LedD, OUTPUT);
}

void loop(){
min3();
min1();
}

void min3(){
Display(count); // Displays the current count value

count = count - 1;

delay(60000);
}
void min1(){
Display(count1); // Displays the current count value

count1 = count1 - 1;

delay(60000);
}

// This function outputs the supplied value to the display.
void Display(int n)
{
// Start with a range check - remember we can only display
// from 0 to 9! :slight_smile:

if ( n > 9 )
{
n = 9;
}

if ( n < 0 )
{
n = 0;
}

// The rest from here is basic decimal to binary conversion

if ( n / 8 == 1 )
{
digitalWrite(LedD, HIGH);
}
else
{
digitalWrite(LedD, LOW);
}

n = n % 8;

if ( n / 4 == 1 )
{
digitalWrite(LedC, HIGH);
}
else
{
digitalWrite(LedC, LOW);
}

n = n % 4;

if ( n / 2 == 1 )
{
digitalWrite(LedB, HIGH);
}
else
{
digitalWrite(LedB, LOW);
}
n = n % 2;

if ( n == 1 )
{
digitalWrite(LedA, HIGH);
}
else
{
digitalWrite(LedA, LOW);
}
}

Ich weis es fehlt noch was, aber ich hänge irgendwie fest, vielleicht kann mir irgendeiner weiterhelfen.

Was ist denn konkret Dein Problem?

Hallo,

ich würde das irgendwie mit for-Schleifen machen.

void (min3){
 for (count = 3; count == 0; count--){
    Display(count);
    if (count > 0){
       delay(60000);
    }
    else return;
 }
}

Ich hab jetzt nicht genau durchgedacht, ob das Script wirklich 3 Minuten runterzählt, aber Versuch macht kluch.
Überleg dir auch, ob du die Variablen count und count1 wirklich global deklarieren musst oder ob es innerhalb der Funktion reicht.

mfG,
f.

Danke, ich werde es gleich mal ausprobieren!

Hallo nachtaktiv68,

bei meinem jetzigen Sketch wird in abwechslung void min3 und void min1 angezeigt, leider nicht hinter einander sonder erst die Zahl 3 dann die Zahl 1 dann die Zahl 2 dann die Zahl 0 dann die Zahl 1 usw..

Es sollte so laufen 3, 2, 1 dannach nochmals 1 und dann wieder von vorn!

Hallo fatzgenfatz,

ich habe das Sketch verändert, leider bleibt die 7 Segmentanzeige auf 0.
Das Sketch sieht jetzt so aus:

// Pin matching from 4511 to Aduino
const int LedA = 5;
const int LedB = 2;
const int LedC = 3;
const int LedD = 4;

int count = 3;

void setup()
{
// Configure the pins connected to the 4511 as outputs
pinMode(LedA, OUTPUT);
pinMode(LedB, OUTPUT);
pinMode(LedC, OUTPUT);
pinMode(LedD, OUTPUT);
}

void loop(){
min3();
min1();
}

void min3(){
for (count = 3; count == 0; count--){
Display(count);
if (count > 0){
delay(60000);
}
else return;
}
}
void min1(){
for (count = 1; count == 0; count--){
Display(count);
if (count > 0){
delay(60000);
}
else return;
}
}

// This function outputs the supplied value to the display.
void Display(int n)
{
// Start with a range check - remember we can only display
// from 0 to 9! :slight_smile:

if ( n > 9 )
{
n = 9;
}

if ( n < 0 )
{
n = 0;
}

// The rest from here is basic decimal to binary conversion

if ( n / 8 == 1 )
{
digitalWrite(LedD, HIGH);
}
else
{
digitalWrite(LedD, LOW);
}

n = n % 8;

if ( n / 4 == 1 )
{
digitalWrite(LedC, HIGH);
}
else
{
digitalWrite(LedC, LOW);
}

n = n % 4;

if ( n / 2 == 1 )
{
digitalWrite(LedB, HIGH);
}
else
{
digitalWrite(LedB, LOW);
}
n = n % 2;

if ( n == 1 )
{
digitalWrite(LedA, HIGH);
}
else
{
digitalWrite(LedA, LOW);
}
}

Hey fatzgenfatz,

es geht jetzt, ich habe den code etwas verändert:

 for (count = 3; count > 0; count--){

So, jetzt die nächste Hürde. Wie kann ich die zweite zeit auf ein zweites 7 Segment Display anzeigen lassen. Das heißt die erste Anzeige geht von 3 zu 1 danach paussiert diese Anzeige oder geht aus, daraufhin geht die zweite Anzeige an und zählt runter von 1 bis 0. Danach geht alles wieder von vorne los.

Zum Beispiel mit einem zusätzlichen CD4511. Oder aber du steigst sanft in das Thema Multiplexing ein. :wink: Dann läuft alles über einen CD4511, welche Anzeige jeweils leuchten soll legen 2 Transistoren fest.