Wie verschachtle ich Arrays?

OP #1956138
Lesenswert?

Hallo!

Ich habe folgende Frage:

In einem Hauptarray
1
const unsigned int tabelle[10]=
2
{           
3
  1,2,3,4,5,6,7,8,9,10
4
}

habe ich 10 Werte. Über 6 Taster werden die Tastendrücke (rauf oder 
runter) gezählt und pro Tastendruck soll der Taste a, b oder c der 
entsprechende Wert im Hauptarray zugewiesen und am jeweiligen Port 
ausgegeben werden.

Ich möchte aber nur ein einziges Hauptarray verwenden. Wie kann ich das 
am Besten lösen?

1
while (1)
2
{  
3
    if (!(PINC & (1<<PINC7)) && i<=9)    // if Button on PC7 = low
4
    {
5
      PORTA = tabelle[i];          // aufwärts zählen
6
      _delay_ms(10);
7
      i++;
8
    }
9
    if(!(PINC & (1<<PINC6)) && i>=0)    // if Button on PC6 = low
10
    {
11
      PORTA= tabelle[i];          // abwärts zählen
12
      _delay_ms(10);
13
      i--;
14
    }
15

16
    if (!(PINC & (1<<PINC5)) && i<=9)    // if Button on PC5 = low
17
    {
18
      PORTB = tabelle[i];          // aufwärts zählen
19
      _delay_ms(10);
20
      i++;
21
    }
22
    if(!(PINC & (1<<PINC4)) && i>=0)    // if Button on PC4 = low
23
    {
24
      PORTB= tabelle[i];          // abwärts zählen
25
      _delay_ms(10);
26
      i--;
27
    }
28

29
    if (!(PINC & (1<<PINC3)) && i<=9)    // if Button on PC3 = low
30
    {
31
      PORTD = tabelle[i];          // aufwärts zählen
32
      _delay_ms(10);
33
      i++;
34
    }
35
    if(!(PINC & (1<<PINC2)) && i>=0)    // if Button on PC2 = low
36
    {
37
      PORTD= tabelle[i];          // abwärts zählen
38
      _delay_ms(10);
39
      i--;
40
    }    
41
}
#1956157
Lesenswert?

Geri G. schrieb:

> Ich möchte aber nur ein einziges Hauptarray verwenden. Wie kann ich das
> am Besten lösen?

Indem du nicht für alle Tasten ein gemeinsames i benutzt, sondern für 
jede Taste eine seperate Variable benutzt, die eine Aussage darüber 
erlaubt, welcher Tabellenwert jetzt gerade für diese spezielle Taste 
zuständig ist.

(Und i, ist ein ganz schlechter Name für eine derart wichtige 
Information wie es der momentan gerade 'aktive' Tabelleneintrag für eine 
Taste darstellt)
Persönliche Seite #1956167
Lesenswert?

Nicht exakt das Gleiche beim _delay_ms(10); aber ich würde es so machen:

1
// Globale Variablen
2
int8_t ai, bi, ci; // signed!
3
const uint8_t tabelle[10]=  // uint8_t reicht
4
  {           
5
    1,2,3,4,5,6,7,8,9,10
6
  }
7

8
// Defines
9
#define MIN(a,b) ((a)<(b) ? (a) : (b))
10
#define MAX(a,b) ((a)>(b) ? (a) : (b))
11

12
  while (1)
13
  {  
14
    if (!(PINC & (1<<PINC7))) ai++;
15
    if (!(PINC & (1<<PINC6))) ai--;
16
    if (!(PINC & (1<<PINC5))) bi++;
17
    if (!(PINC & (1<<PINC4))) bi--;
18
    if (!(PINC & (1<<PINC3))) ci++;
19
    if (!(PINC & (1<<PINC2))) ci--;
20

21
    // Wertebereich begrenzen
22
    ai = MIN(9, MAX(ai, 0));
23
    bi = MIN(9, MAX(bi, 0));
24
    ci = MIN(9, MAX(ci, 0));
25

26
    // Ausgeben
27
    PORTA = tabelle[ai];
28
    PORTB = tabelle[bi];
29
    PORTD = tabelle[ci];
30

31
    // Kurz warten
32
    _delay_ms(10);
33
  }

ADD: Und den Artikel Entprellung lesen!

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