Forum: Mikrocontroller und Digitale Elektronik Fehler Suche ?


von Michael H. (h_m)


Lesenswert?

Guten Tag,

könnte mir Bitte mal jemand den nachfolgenden Code Compilieren ich habe 
Atmel Studio 7 und dich bekomme eine Fehlermeldung das ein Zeichen 
abgeht, aber es geht keines ab. Ich weiß nicht mehr was ich machen soll.
1
/*
2
 * speed_button_1.c
3
 * Controller: ATmega88 @ 16MHz
4
 */
5
#include <avr/io.h>
6
 
7
int main(void)
8
{
9
    DDRB = 0xFF;                    // Richtungsregister PORTB auf Ausgang
10
    DDRD &= ~(1<<PD2);                // Richtungsregister PORTD PinD2 auf Eingang
11
     
12
    uint8_t tastenzustand = 0;      // Flag für Tastenzustand definieren
13
    uint32_t x=0;                   // Datentyp für x = unsigned long (Wertebereich 0 bis 4 294 967 295)
14
     
15
    while(1)
16
    {
17
        if (!(PIND & (1<<PD2)))       // wenn PinD2 = low (gedrückt)
18
        {
19
            PORTB |= (1<<PB0);        // LED1 ON
20
            x++;                    // Zählvariable x um 1 erhöhen
21
            tastenzustand = 1;      // Flag für "Taster wurde gedrückt" setzen
22
        }
23
         
24
        else if ((PIND & (1<<PD2)) && (tastenzustand == 1))       // wenn PinD2 = high und Taster losgelassen
25
        {
26
            PORTB &= ~(1<<PB0);       // LED1 OFF
27
            tastenzustand = 0;      // Flag für den Tastenzustand zurücksetzen
28
             
29
            if ((x > 5000) && (x <= 40000))       // wenn x > 5000 (Tasterprellen abwarten) und <= 40000
30
            {
31
                PORTB |= (1<<PB7);    // LED4 ON (Anzeige für Superschnell!)
32
                x=0;                // Zählvariable x zurücksetzen
33
            }
34
             
35
            else if ((x > 40000) && (x <= 60000)) // wenn x > 40000 und <= 60000
36
            {
37
                PORTB |= (1<<PB2);                    // LED3 ON (Anzeige für Schnell!)
38
                x=0;                                // Zählvariable x zurücksetzen
39
            }
40
             
41
            else if ((x > 60000) && (x <= 80000)) // wenn x > 60000 und <= 80000
42
            {
43
                PORTB |= (1<<PB1);                    // LED2 ON (Anzeige für Langsam!)
44
                x=0;                                // Zählvariable x zurücksetzen
45
            }
46
             
47
            else (x > 300000)    // wenn x > 300000 (Langer Tastendruck -> Neues Spiel)
48
            {
49
                x=0;            // Zählvariable x zurücksetzen
50
                PORTB &= ~((1<<PB7)|(1<<PB2)|(1<<PB1));       // Bit 1,2 und 7 löschen (LED 2,3 und 4 OFF)
51
            }
52
        }
53
    }
54
}

von HildeK (Gast)


Lesenswert?

Michael H. schrieb:
1
> else (x > 300000)    // wenn x > 300000 (Langer Tastendruck > -> Neues Spiel)

entweder
1
else if (x>300000)
2
{
3
 ...
4
}
oder einfach
1
else
2
{
3
  ...
4
}

von Random .. (thorstendb) Benutzerseite


Lesenswert?

*grins+
Wald und Bäume und so :-)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> ich bekomme eine Fehlermeldung das ein Zeichen
> abgeht, aber es geht keines ab

Alter, was geht ab?
Die Fehlermeldung würde ich gerne mal sehen.

von MaWin (Gast)


Lesenswert?

Stefan F. schrieb:
> Fehlermeldung

compilierst du mit -KluScheiAll Option

von sid (Gast)


Lesenswert?

warum nur das dauernde x=0?
1
if (x > 5000)
2
{
3
  x=0;
4
  if( x <= 40000)
5
    PORTB |= (1<<PB7);
6
  else if(x> 40000 && x <= 60000)
7
    PORTB |= (1<<PB2);
8
  else if (x > 60000 && x <= 80000)
9
    PORTB |= (1<<PB1);
10
  else if(x > 300000)
11
    PORTB &= ~((1<<PB7)|(1<<PB2)|(1<<PB1));
12
}
geht doch auch

von Einer K. (Gast)


Lesenswert?

sid schrieb:
> x=0;
>   if( x <= 40000)
> ...
> }geht doch auch

Iss klar ...
Dann kannste das if auch entsorgen.

von sid (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Dann kannste das if auch entsorgen.
sorry klar.. ans Ende natürlich...
1
if (x > 5000)
2
{
3
  if( x <= 40000)
4
    PORTB |= (1<<PB7);
5
  else if(x> 40000 && x <= 60000)
6
    PORTB |= (1<<PB2);
7
  else if (x > 60000 && x <= 80000)
8
    PORTB |= (1<<PB1);
9
  else if(x > 300000)
10
    PORTB &= ~((1<<PB7)|(1<<PB2)|(1<<PB1));
11
12
  x=0;
13
}

ist halt spät ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.