Analoger Tacho goes "Digital", Hilfe bei Fehlersuche im Sketch

Hallo zusammen!
Zunächst erzähl ich mal was ich vor habe:
Ich möchte mich von der Tachowelle in meinem Moped verabschieden.
Dazu habe ich statt der Tachowelle einen Schirttmotor an den Tacho geflanscht. Der Schrittmotor wird mit einem A4988 Treiber angesteuert (Step+Direction Signal, wobei Direction brauche ich ja nicht) und dieser erhält seine Step-Signale von einem Digispark, sprich Tiny85. Motor drehen lassen mit nem einfachen Sketch funktioniert auch soweit alles. Der Digispark soll mit einem Reedschalter von nem Fahrradtacho die Geschwindigkeit am Rad messen und dann berechnen wie schnell der Tachoantrieb (also der Schrittmotor) gedreht werden muss, damit die KM/h-Anzeige korrekt ist. Im Prinzip eigentlich ein Frequenzwandler das Ganze, mit nem Faktor von 1:62,5. Eingangsfrequenz vom Rad - Ausgangsfrequenz sind Step Pulse für den Schrittmotortreiber.
Die maximale Eingangsfrequenz wird 12Hz nicht überschreiten und die maximale benötigte Ausgangsfrequenz liegt bei 750Hz. Also nichts besonders schnelles.
Ich bin übrigens absoluter Neuling in Sachen C und der IDE Programmierung.

Ich hoffe mir kann jemand helfen.

//Programm fuer Tacho, -ohne Interrupt-
int tachoPin = 0;  // Pin zur Tachoansteuerung via Schrittmotortreiber->Step Pulse
int signalPin = 1; // Pin zur Geschwindigkeitsmessung via Reedschalter(Radimpuls)
unsigned long alteZeit=0, //Speicher für letzte Schaltzeit Signaleingang(Radimpuls)
              olleZeit=0, //Speicher für letzte Schaltzeit für Step Pulse des Tachos
              pulsWeite=0, // berechnete nötige Pulsweite der Step Pulse für Tacho
              entprellZeit=50000; //Entprellzeit 50ms um Reedschlater zu Entprellen

void setup() {
  pinMode (tachoPin, OUTPUT); //Pin für Step Pulse für Tacho
  pinMode (signalPin, INPUT); //Pin für Geschwindigkeitsmessung (ein Puls pro Radumdrehung)
  
}

void loop() {
  
  if(micros()<100){              //wenn micros überläuft werden die Speicher für
    olleZeit = 0, alteZeit = 0;  //die letzten Schaltzeiten genullt
  }

  if(micros()-alteZeit > 3000000){ //wenn länger als 3s kein Radimpuls kommt
    pulsWeite = 10000000;          //soll Tacho stehen (v<2kmh ingorieren)
  }
  
  if(digitalRead(signalPin)==HIGH && micros()-alteZeit > entprellZeit){ //Wenn ein Radimpuls kommt (und der Impuls nicht durch Prellen verursacht ist)

  pulsWeite=((micros()-alteZeit)*10)/625;                              //wird an dieser Stelle mit der aktuellen Geschwindigkeit
                                                                      //die neue nötige Pulsweite für das Ausgangssignal
                                                                      //berechnet um die Geschw entrechend anzuzeigen

  alteZeit=micros();                 //die aktuelle Zeit wird gespeichert um später wieder die Dauer zwischen den Impulsen berechnen zu können
  }
  if (micros()-olleZeit<10){                //zu Beginn des Intervalls "pulsWeite" wir der Step Puls ausgelöst (<10us)
     digitalWrite(tachoPin, HIGH);
  }
  else if (micros()-olleZeit>pulsWeite){    //wenn der Interval "pulsWeite" verstrichen ist wird der Speicher für den letzten Step Puls aktualisiert
    olleZeit=micros();
  }

  else{
     digitalWrite(tachoPin, LOW);           //nach den ersten 10us während des Intervalls "pulsWeite" wird auf LOW geschaltet
                                            //somit gibt es alle "pulsWeite"us einen 10us Highpuls, danach wird auf LOW geschaltet bis "pulsWeite"us
  }                                         //vergangen sind und somit wieder ein 10us Highpuls kommt
}

Ich wollte übrigens gerne ohne Interrupt arbeiten, weil mir das am Tiny85 zu kompliziert zu initialisieren und zu benutzen ist. Mein Sketch nutzt ja keine Delays, oder sonstige schleifen die das Programm blockieren, sodass ich keinen Signalpuls verpassen sollte.

ElSimsone: Zunächst erzähl ich mal was ich vor habe: ... Ich hoffe mir kann jemand helfen.

Schön und gut. Aber was ist Deine Frage? Bzw. wobei benötigst Du Hilfe?

Fragt sich

Gregor

wobei benötigst Du Hilfe?

Naja der Code funktioniert nicht-es tut sich nichts. Also der Tacho zuckt nicht mal wenn am Rad Impulse auf den Reedschalter kommen. Und da ich den Code schon selber mehrfach durchgenagen bin, hoffe ich, dass jemand von euch weiß woran es liegt oder einen Fehler im Sketch findet.

Du solltest mal einige serielle Ausgaben auf den seriellen Monitor einbauen und damit deinen Sketch testen. Das ist sicher für dich einfacher als für uns, da wir die entsprechende Hardware nicht haben.

ElSimsone: Naja der Code funktioniert nicht-es tut sich nichts. Also der Tacho zuckt nicht mal wenn am Rad Impulse auf den Reedschalter kommen. Und da ich den Code schon selber mehrfach durchgenagen bin, hoffe ich, dass jemand von euch weiß woran es liegt oder einen Fehler im Sketch findet.

Oh, na dann ...

... nur ein allgemeiner Tipp: Mach Deinen Code „hübscher“. Zeilenlänge max. 80 Zeichen, sinnvoll einrücken (Strg-T ist ein guter Anfang), Klammerung einheitlich.

Wenn ein Code übersichtlicher ist, ist die Fehlersuche schon halb erledigt.

Gruß

Gregor

OK, schon mal vielen Dank für eure Tips! Wegen seriellem Display werde ich mich mal schlau machen.