Wert auf 2 Sekunden hochzählen ?

Hallo ich habe eine Lichtschranke und möchte die High impulse hochzählen lassen und wenn diese abweichen soll ein Motor nachgeregelt werden.
Jedoch bräuchte ich erstmal ein Programm welches mit die Impulse hochzählt...

Anschluss liegt auf A0...
Wäre super wenn jemand sich die Zeit nimmt!
Grüße

Bezieht sich diese Frage nicht auf das selbe Projekt wie hier:

http://arduino.cc/forum/index.php/topic,94401.0.html

Das ist richtig.
Bin mittlerweile ich verzweifelt ...
Sitze mittlerweile schon ewig dran.
Nun dachte ich fang nochmal von vorne an und dazu muss ich ja die Umdrehung in 1 oder 2 sekunden messen.
Dann wollte ich ne schleife laufen lassen die guckt ob der wert auch der Sollwert ist wenn nicht nachregeln (rauf/runter)
Bin echt für jeden Tipp dankbar....

Ich kann bisher den Motoransteuern und erhalte ein High-Signal am 13. Pin (LED)...

Es ist einfacher die Zeit zwischen 2 Impulsen (oder je nach verwendeter Lochscheibe die Länge des Impulses) zu messen zB mit pulseIn(). Dieser wert Wird mit dem Sollwert verglichen (subtrachiert) und dementsprechend der Motor angesteuert.
Grüße Uwe

So nun gehts ein bischen anders...
Also ich zähle die impulse hoch und will nen stop und refresh nach 1000ms ...

das habe ich bisher ...

int val;
int stat=LOW;
int sens=457;
int highcount=0;
int previousMillis = 0;

int interval = 1000;   

void setup()
{
  Serial.begin(9600);
  pinMode(13,OUTPUT);
pinMode(A0,INPUT);
   
}

void loop()
{
previousMillis = millis();



  val=analogRead(0);
  if(val<sens)
    {
     stat=LOW;
     digitalWrite (13,LOW);
    }
    else
   {
    stat=HIGH;
    digitalWrite (13,HIGH);
    highcount = highcount+1;
   Serial.println (highcount);
   
    }
     
}

und hänge fest ...

Ich glaube Du solltest etwas Zeit in das Studium der Grundlagen investieren.
Du hast mehrere Gedankenfehler im Code.

  • Wieso nimmst Du einen analogen Eingang statt eines digitalen?
  • wenn Du previousMillis = millis(); bei jedem Durchlauf von loop() machst, wirst Du nie auf 1 Sekunde kommen.

Ich bin immernoch der Meinung, daß mein Lösungsansatz der bessere ist.

Grüße Uwe

Das Problem bei diesem Code ist, das Du nie weisst ob das gemessene "HIGH" Signal schon ein neuer Impuls ist, oder noch der alte, den Du bereits gezählt hast. Ich würde immer auf einen Wechsel von LOW nach HIGH testen, um sicher zu sein, das es ein neuer Impuls ist, den ich zähle. Bei jedem erkannten Flankenwechsel von LOW zu HIGH wird dann der aktuelle Wert von millis() gespeichert (long last = millis()). Wenn der nächste Flankenwechsel erkannt wird, kann man den gespeicherten Wert mit dem aktuellen vergleichen. Die Differenz aus beiden Werten ist dann die vergangene Zeit zwischen 2 Impulsen (millis() - last).
Mario.