Moin zusammen,
ich plane die Umsetzung eines Tachos, bzw. eines Inkrementalgeber mit Hilfe von zwei Sensoren, damit ich zusätzlich die Drehrichtung ermitteln kann. Ich habe es soweit auch umgesetzt bekommen, allerdings würde ich meine Logik gerne auf Interrupts umstellen, bekomm's aber nicht gebacken. Hier mein aktueller Aufbau:
void setup()
{
Serial.begin(9600);
pinMode(interruptPin_first, INPUT);
pinMode(interruptPin_second, INPUT);
//attachInterrupt(digitalPinToInterrupt(interruptPin_first), isr_1, RISING);
//attachInterrupt(digitalPinToInterrupt(interruptPin_second), isr_2, RISING);
}
void loop()
{
state_first = digitalRead(interruptPin_first);
state_second = digitalRead(interruptPin_second);
if (!state_first && !state_second) {
initial_state = true;
}
while (initial_state) {
state_first = digitalRead(interruptPin_first);
state_second = digitalRead(interruptPin_second);
while (state_first && initial_state) {
if (digitalRead(interruptPin_second)) {
turning_amount++;
initial_state = false;
}
}
while (state_second && initial_state) {
if (digitalRead(interruptPin_first)) {
turning_amount--;
initial_state = false;
}
}
}
}
Es funktioniert soweit, allerdings schätze ich nicht bei etwas höheren Geschwindigkeiten, hab aber kein Signalgeber um das zu prüfen, realisiere ich vielleicht mit einem anderen Arduino, wenn's mir spanisch vorkommt.
Nun hab ich auf dem Breadboard die 5V vom Arduino in meine TCRT5000 Boards mit IR Sensor gesteckt, GND von den Boards zurück in den Arduino und den D0 Ausgang (TTL Switch Signal Output) in die Pins 2 und 3 des Arduino mit 10KOhm Widerstand vor.
Wenn ich nun versuchen möchte das mit Interrupts zu inkrementieren kommentiere ich das attachedInterrupts ein und schreibe bspw. die Funktion:
void isr_1 () { turning_amount++; }
inkrementiert er mir nicht nur einen, sondern mehrere. Liegt das daran, dass man Signal zu unsauber ist? Habe ich den Befehl falsch verstanden?! Sollte ich einen Kondensator vorschalten?!
Liebe Grüße,
BooWseR