Steigende Flanke mit Funktion klappt nicht

OP #2364401
Lesenswert?

Hallo...
Ich versuche vergebens eine steigende Flanke von einer Arrayvariable zu 
generieren.
Diese Arrayvariable ist ca. 1s auf True und soll in einem anderen Array, 
welches als Rückgabearray fungieret, als steigende Flanek für ein Zyklus 
das bit auf true setzen welches ich dann in der main weiter verarbeiten 
kann.

Leider funktioniert das nicht, kann mir einer Helfen? Im Moment ist es 
so das die   usart_write_str("--array4--"); wesentlich öffters kommt als 
1mal. (Ich breche nach >100mal ab....)

Vielen Dank wenn mir einer helfen kann ...

So hatte ich mir das gedacht:
1
bool Eingang[64] = {false};
2
bool arraytest[40] = {false};;
1
void R_TRIG_Taster(bool bit,int bitnr, bool array[])
2
{
3

4
    if(!array[bitnr] && bit)   //Taster wird gedrueckt (steigende Flanke)
5
    {
6
    array[bitnr] = true;
7

8
    }
9
    else if (array[bitnr]  && bit)   //Taster wird gehalten
10
    {
11
     array[bitnr] = false;  
12
     
13
    }
14
    else  */ //Taster wird losgelassen (fallende Flanke)
15
    {
16
    array[bitnr] = false;  
17
    }
18
 
19
    return array;
20

21
}


so in der main-Schleife aufgerufen:
1
R_TRIG_Taster(Eingang[4],4, arraytest);
2

3

4
if (arraytest[4])
5
{
6
  usart_write_str("--array4--");
7
}
#2364430
Lesenswert?

1
void R_TRIG_Taster(bool bit,int bitnr, bool array[])
2
{
3
  if( array[bitnr] != bit)  // Es gibt einen Unterschied, als muss es eine Flanke 
4
  {                         // gegeben haben
5
    if( bit )               //   war es 0->1  ?
6
      array[bitnr] = true;  //     Ja:  steigende Flanke
7
    else                    //   nein: es war 1->0, fallende Flanke
8
      array[bitnr] = false;
9
  }
10
  else                      // es gibt keine Veränderung, Taster ist gedrückt
11
                            // oder losgelassen
12
    array[bitnr] = false;   
13
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren