Hallo alle zusammen. Ich wollte auch probieren Lichter einfach per klatschen einzuschalten (Arduino). Da aber bei den vielen Tutorials die dazu gegebenen Codes bei mir nicht funktionieren wollten, habe ich mich an einen eigenen versucht. Letztendlich ist meiner Meinung nach nicht schlechtes raus gekommen : const int sounds =2; unsigned long starttime; unsigned int pasttime; int var; boolean statusi =false; void setup() { pinMode(sounds,INPUT); pinMode(5,OUTPUT); } void loop() { if ( digitalRead(sounds)==HIGH ){ starttime= millis(); var=1; } if (digitalRead(sounds)==LOW ){ pasttime=millis()-starttime; delay(1); if ( digitalRead(sounds)==HIGH&&var==1&&pasttime>=200 && pasttime<=300){ if (!statusi){ digitalWrite(5,HIGH); var=2; statusi=true; } else if (statusi){ statusi=false; Serial.println("LED OFF"); digitalWrite (5,LOW); } } else if (digitalRead(sounds)==HIGH&&var==1&&pasttime<200){ var=2; }}} Wenn ich bei diesem Code das obere delay(1) auskommentiere, dann funktioniert der sketch nur noch halb. Die if Abfrage funktioniert nicht mehr gut. Weshalb ich auf delay(1) komme: Davor habe ich dort eine Serielle ausgabe von pasttime eingesetzt. Als ich diese raus nahm, geschah wie schon oben beschrieben. Meine Frage ist also, wieso das Programm von diesem einen delay abhängig ist? LG heike.
heike schrieb: > if (digitalRead(sounds)==LOW ){ > pasttime=millis()-starttime; > delay(1); > > if ( digitalRead(sounds)==HIGH&&var==1&&pasttime>=200 && pasttime<=300){ Ich kann mir vorstellen, dass der Code ohne das delay zu schnell durchläuft. Also der Eingang nicht von low auf high wechseln kann. Du solltest noch was zu deinem Hardwareaufbau schreiben, um genaueres zu sagen.
heike schrieb: > Letztendlich ist meiner Meinung nach nicht schlechtes raus gekommen : > dann > funktioniert der sketch nur noch halb. > Die if Abfrage funktioniert nicht mehr gut. > Als ich diese raus nahm, geschah wie schon oben beschrieben. > Meine Frage ist also, wieso das Programm von diesem einen delay abhängig > ist? Mann oh Mann. Nimm noch mal einen Anlauf. Beschreibe exakt, was wann geht und wann nicht. Kommentare im Code helfen dem geneigten Helfer ungemein. "Halb" und "nicht mehr gut" testen die Phantasie des Lesers und dessen Glaskugel und führen zu den alseits "beliebten" Diskussionen im µC net. Auch falls der Fehler offensichtlich sein sollte, mag ich da gar nicht näher hinsehen.
Was mich an deinem Code verwirrt: Du liest den Eingang 2 digital ein. Was hast du denn für einen Sensor angeschlossen? Müsstest du nicht einen ADC nutzen? So würde ich das ohne Arduino mit einem ATtiny13 machen:
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | int main() |
4 | {
|
5 | DDRB = 0b00000001; |
6 | PORTB = 0b00011000; |
7 | ADMUX = 2; |
8 | ADCSRA = (1<<ADEN)+(1<<ADSC)+(1<<ADATE)+(1<<ADPS2); |
9 | _delay_ms(1000); |
10 | while (1) |
11 | {
|
12 | while ((ADCSRA & (1<<ADIF))==0); |
13 | if (ADC<1014) |
14 | {
|
15 | PORTB |= 0b00000001; |
16 | _delay_ms(1000); |
17 | }
|
18 | ADCSRA |= (1<<ADIF); |
19 | }
|
20 | }
|
PB1 = Leuchdiode mit Vorwiderstand PB3 und PB4 = Piezo-Schallwandler Weitere Bauteile: Batterie (3-5V) und ein 100nF Kondensator an VCC+GND.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.