Frage für nebenbei

Gast #4887576
Lesenswert?
• ▲
▼
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.
Gast #4887586
Lesenswert?
• ▲
▼
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.
Gast #4887592
Lesenswert?
• ▲
▼
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.
Gast #4887663
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:

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.