Pages: [1]   Go Down
Author Topic: Alternative zu bounce.h bei analogen Eingänge  (Read 582 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe bei meinem Projekt die bounce.h eingesetzt und funktioniert gut. Diese möchte aber einen PIN als Definition.
Ich möchte aber jetzt einen Analogwert abfragen der bei einem definierten Wert und wenn dieser Wert mindestens 200 ms bleibt ein High liefert.
Jemand eine Idee?
Danke,
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21881
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Für Analogwerte ist normalerweise keine Entprellung nötig.
Wenn Du sowas brauchst mußt Du es Dir selbst schreiben.
grüße Uwe
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Um grobe Messfehler ein wenig auszugleichen, kann man einfach mehrmals messen und einen Mittelwert bilden.

Code:
int data =0;
for (int i=0; i<8;i++) {
    data = data + analogRead(A0);
}
data = data / 8;
Mario.
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5251
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Diese Routine macht das, was Du nachfragst. Wenn Du uns etwas mehr Information lieferst, können wir Dir vielleicht eine bessere Alternative aufzeigen.

Code:
#define THRESHOLD 400
#define WAITTIME 200

uint32_t startMillis = 0;

void loop() {
  if (analogRead(A0) > THRESHOLD) {
    if (startMillis && millis() - startMillis > WAITTIME) {
      // do action
    } else if (! startMillis) {
      startMillis = millis();
    }
  } else {
    startMillis = 0;
  }
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank. so wie von pylon wollte ich es haben. Hab mir jetzt noch ein Zähler eingebaut der immer dann hochzählt wenn der Wert kleiner 400 wird. Jetzt möchte ich das ganze mit 10 Fotodioden auswerten, ich denke da muss ich mich wohl mal mit dem schreiben einer eigenen Libary befassen oder gibt es noch eine andere Alternative ohne viel Codezeilen.

Mein Code falls jemand mal braucht.
Code:
int sensorPin = A0;  
int sensorValue=0;
int THRESHOLD=400;
int WAITTIME=500;
int State=0;
long startMillis = 0;
int count=0;
int countset=0;

void setup() {
Serial.begin(9600);
  }

  
  void loop() {
  sensorValue = analogRead(sensorPin);    
  
  Serial.print("Sensorwert: ");
  Serial.println(sensorValue);
  
   if (analogRead(A0) < THRESHOLD) {
    if (startMillis && millis() - startMillis > WAITTIME) {
    Status();  
    } else if (! startMillis) {
      startMillis = millis();
    }
  } else {
    startMillis = 0;
    State=0;
    Serial.print("State:");
    Serial.println(State);  
    Serial.println(count);
}
if (count > 10)
{count=1;}

if ((State==1)&&(countset==0))
{
count++;
countset=1;
}

if (State==0)
{countset=0;}
}

void Status()
{State=1;
 
      Serial.print("State:");
      Serial.println(State);
      Serial.println(count);
}
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst Du Auswertung in eine Funktion packen, der Du den jeweiligen Pin übergibst. Rückgabe ist dann das entsprechende Ergebnis. Intern verwendest Du ein Array um die zum entsprechenden Pin gespeicherten millis() Werte zu verwalten.
Allerdings wirst Du bei 10 Fotodioden um einen Multipexer (CMOS4051) nicht herum kommen, denn Dein Arduino hat nur 6 analoge Eingänge, außer Du hast einen Mega, der hat 16 analoge Eingänge.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hab ein Mega für das Projekt. Mit dem array und Funktion hab ich mir auch schon fast so gedacht. Ich werd mich mal in arrays mehr ein arbeiten. Danke.
Logged

Pages: [1]   Go Up
Jump to: