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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.