Delay in if else funktion

OP #1490274
Hallo ich möchte eine Schaltung bauen die jeden Tag bei nacht für 3min 
eine L-Diode einschaltet.Ich mache das mit einer Photodiode.Es klappt 
auch schon aber ich kriege die delay funktion nicht eingefügt sodas die 
leuchtdiode 3min anbleibt.Ich bin totaler Anfänger und wäre für hilfe 
sehr dankbar!

Hier ist mein code mit der delay funktion an der falschen stelle im Code

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 3686400UL
#endif
#include <util/delay.h>



void long_delay(uint16_t ms) {
    for(; ms>0; ms--) _delay_ms(1);
}

int main( void )
{
    DDRB = ( 1 << PB0 );        // Ausgang
   DDRD = ( 0 <<  PD2 );        //Eingang

    while( 1 ) {                // Endlosschleife
        if (!(PIND&0x04))

      PORTB = 0xFF;

    else
      PORTB = 0x00;
        long_delay(1000);       // Eine Sekunde warten...
    }

    return 0;
}
1
#ifndef F_CPU
2
#define F_CPU 3686400UL
3
#endif
4

5
#include <avr/io.h>
6
#include <util/delay.h>
7

8
void long_delay(uint16_t ms)
9
{
10
  for(; ms>0; ms--)
11
    _delay_ms(1);
12
}
13

14
int main( void )
15
{
16
  DDRB  =  ( 1 << PB0 );        // Ausgang
17
  DDRD &= ~( 1 << PD2 );        //Eingang
18

19
  while( 1 )
20
  {
21
    if( !( PIND & ( 1 << PD2 ) )
22
      PORTB |= ( 1 << PB0 );
23

24
    else
25
    {
26
      PORTB &= ~( 1 << PB0 );
27
      long_delay(1000);       // Eine Sekunde warten...
28
    }
29
  }
30

31
  return 0;
32
}

und rücke deinen Code korrekt ein! Falsch eingerückter Code verursacht 
Augenkrebs :-)
Kauf dir ein C-Buch

Oder denk alternativ ein wenig nach. (*)

Wenn du das delay vom else Zweig in den if Zweig holst, dann hast du 
jetzt im if Zweig 2 Anweisungen, die vom if abhängen. Also wirst du dort 
eine { } Klammerung brauchen.


(*) Edit: Das nehme ich zurück. Du sollst nicht alternativ nachdenken. 
Du sollst auf jeden Fall nachdenken UND dir ein C-Buch kaufen.
1
  while( 1 )
2
  {
3
    if( !( PIND & ( 1 << PD2 ) )
4
    {
5
      PORTB |= ( 1 << PB0 );
6
      long_delay(1000);       // Eine Sekunde warten...
7
    }
8
    else
9
    {
10
      PORTB &= ~( 1 << PB0 );
11
    }
12
  }

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.