Jo, die CUIs sind halt butterweich ![]()
Ich habe deinen Gray-Sketch für den ProMicro modifiziert und noch die Blitzfunktion abhängig von der Drehrichtung integriert, aber noch keine Abhängigkeit von der Anzahl der Impulse in Relation zu einem festgelegten Zeitraum. Das muss ich erst durchdenken.
Das Ganze läuft wirklich sehr flüssig mit den optischen Encodern, insofern erstmal vielen Dank! Allerdings blitzt bei schneller Drehung auch ab und zu mal die LED der jeweils anderen Drehrichtung auf. Vielleicht "verschluckt" er bei zu schneller Drehung den Vergleich zwischen aktuellem und vorherigem Zählwert?
Viele Grüße
Chris
/*
Doc Arduino - german Arduino Forum
IDE 1.8.5
Arduino Mega2560
05.11.2017
mit Klassen-Vererbung http://forum.arduino.cc/index.php?topic=444899
Board Pinouts >>> http://www.pighixxx.com/test/pinoutspg/boards/
*/
#include <GrayEncoder_v2.h>
GrayEncoder_v2 Encoder1 (&PIND, 0, 1); // Pin 2,3 > Port.D "Bit 0","Bit 1"
int Encoder1_Direction;
int Encoder1_CurrentCounter;
int Encoder1_PreviousCounter;
const byte LED_Pin1 = 7;
const byte LED_Pin2 = 8;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(LED_Pin1, OUTPUT);
pinMode(LED_Pin2, OUTPUT);
}
void loop() {
update_Encoder();
if ( Encoder1.getDirection() > 0 && Encoder1_CurrentCounter > Encoder1_PreviousCounter) {
Encoder1_PreviousCounter = Encoder1_CurrentCounter;
digitalWrite(LED_Pin1, HIGH);
delay(20);
digitalWrite(LED_Pin1, LOW);
}
else {
if ( Encoder1.getDirection() < 0 && Encoder1_CurrentCounter < Encoder1_PreviousCounter ) {
Encoder1_PreviousCounter = Encoder1_CurrentCounter;
digitalWrite(LED_Pin2, HIGH);
delay(20);
digitalWrite(LED_Pin2, LOW);
}
}
serieller_Monitor();
}
void update_Encoder()
{
Encoder1.encode();
Encoder1_Direction = Encoder1.getDirection();
Encoder1_CurrentCounter = Encoder1.getCounter();
}
void serieller_Monitor()
{
static unsigned int intervall = 250;
static unsigned long prevMillis = 0;
if (millis()-prevMillis<intervall) return; // Zeit noch nicht erreicht, Funktion abbrechen
prevMillis+=intervall;
Serial.print(Encoder1_Direction); Serial.print('\t');
Serial.print(Encoder1_CurrentCounter); Serial.print('\t');
Serial.print(Encoder1_PreviousCounter);
Serial.println();
}