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;
}
Du brauchst ein C Buch.
WEnn von einem if oder einem else mehrere Anweisungen abhängen, dann
muss man die Anweisungen in { } einschliessen und so einen Block bauen.
Grundlagen C - zweite Unterrichtseinheit.
Kannst Du mal an einen beispiel mir das zeigen?
Gast
#1490285
Außerdem wird die LED die ganze Nacht leuchten...
Stimmt habe ich vertauscht gerade gemerkt.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
und rücke deinen Code korrekt ein! Falsch eingerückter Code verursacht Augenkrebs :-)
Ja danke aber wenn ich das in der if funktion mache statt in der Else kommt die fehlermeldung : error: 'else' without a previous 'if'
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Gast
#1490315
if( !( PIND & ( 1 << PD2 ) ) DA GEHEN 3 KLAMMERN AUF, ABER NUR 2 ZU!!!
Danke. Die Klammer ist beim editieren hier im Forum verschwunden. Sollte aber klar sein, wo sie sein muss.
Danke für die Hilfe ein bißchen nachdenken hat wirklich geholfen!!!
Hier meine Lösung
if (!(PIND&0x04))
{PORTB = 0xFF;
long_delay(1000);
}
Einrückungen! eine konsistente und einigermassen schöne Formatierung verhindert schon mal 20% der gängigsten Fehler.
Und nutze die Makros für die Ports:
1 | |
2 | |
3 | |
4 | |
Ja ich werde es in Zukunft versuchen.
Also so weit so gut.Aber wie funktioniert das jetzt das ich die Leuchte nur einmal anschalte.Weil jetzt bleibt sie ja noch zur zeit an?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.