hi botty,
Code:
#include <AFMotor.h>

// Motor
AF_DCMotor motor(4);
// Die Anzahl der Flankenwechsel
volatile unsigned long ticks = 0;
// passender Encode Pin für den Motor
static const uint8_t enc_pin = 18;

/*
 * Die Interrupt Routine die beim Flankenwechsel aufgerufen wird
 */
void motor_isr(void){
  ticks++;
}

/*
 * Serial und den Pin initialisieren, die Interrupt Routine 
 * zuordnen.
 */
void setup() {
  Serial.begin(9600);
  pinMode(enc_pin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(enc_pin), motor_isr, CHANGE);

  Serial.println("setup fertig");
}

void loop() {
  unsigned long start_zeit, regel_zeit, aktions_zeit;
  /*
   * Ticks beschreiben, dabei wollen wir nicht von einem 
   * Interrupt unterbrochen werden
   */
  noInterrupts();
  ticks = 0;
  interrupts();

  motor.setSpeed(130);
  motor.run(FORWARD);

  Serial.println("ticks initialisiert und Motor laeuft");

  /*
   * Fuer 10 sec "Regeln" und eine andere Aktion parallel
   * dazu ausführen.
   */
  start_zeit = regel_zeit = aktions_zeit = millis();
  while(start_zeit + 10000 > millis() ) {
    /*
     * Motor "regeln" alle 0,5sec
     */
    static const unsigned long rdiff = 500;
    if(regel_zeit + rdiff <= millis()) {
      regel_zeit = rdiff + millis(); // nächstes Intervall setzen.
      Serial.print(millis());
      Serial.print(": Regeln ");

      /*
       * Wir lesen unseren Zaehler und wollen nicht
       * von Interrupts gestört werden
       */
      noInterrupts();
      unsigned long tmp = ticks;
      interrupts();
      
      Serial.println(tmp);
    }

    /*
     * Die andere Aktion die Parallel zum "Regeln" ausgeführt wird
     * und nur unterbrochen wird, wenn ein Interrupt auftritt.
     */
     static const unsigned long adiff = 333;
     if(aktions_zeit + adiff <= millis()) {
      aktions_zeit = adiff + millis(); // Nächste Intervall setzen

      // Hier irgendetwas anderes machen
      Serial.print(millis());
      Serial.println(": andere Aktion");
     }
  }

  Serial.println("Motor stop");
  
  motor.setSpeed(0);
  motor.run(RELEASE);
  
  delay(2000);
}
im zusammenhang mit diesem sketch versuche ich die ausgabezeiten meiner serial.print befehle zu verkürzen, ähnlich diesem hier (das ist doch der hintergrund, oder?):
Code:
   // Ticks und Strecke ausgeben
    static const int wtime = 250;
    if(log_time + wtime <= millis() ) 
    {
      out_s = "";
      out_s += millis() + ": ";

      for(uint8_t idx = M_VL; idx < M_MAX; idx++) 
      {
        out_s += idx + " ";
        out_s += motoren[idx].ticks + " ";  // Hier koennte jetzt ein Interrupt unterbrechen!
        out_s += motor_strecke_gefahren(idx);

        ticks_tmp = 0;
        motor_ticks_per_milli(idx, &ticks_tmp);
        out_s += " " + ticks_tmp;

        if(idx == M_MAX - 1)
          out_s += "\n";
        else
          out_s += ", ";
      }

      for(uint8_t idx = 0; idx < M_MAX; idx++)
        all_ticks_tmp[idx] = 0;
        
      motor_ticks_per_milli_fuer_alle(all_ticks_tmp, M_MAX);

      for(uint8_t idx; idx < M_MAX; idx++)
        out_s += all_ticks_tmp[idx] + " ";

      Serial.println(out_s);

      log_time = wtime + millis();
    }
da werden ja verschiedene ausgaben zu einem string "addiert" und dann als ganzes ausgedruckt. Beim einsatz dieser zeilen:

Code:
out_VL += " " + millis();
out_VL += " " + tmp_VL;
out_VL += " "+ tmp_VL_ges;
out_VL += " " + v;
Serial.print (out_VL);
kommt aber etwas ähnliches im serial monitor wie das hier:

Code:
setup fertig 
ticks_VL initialisiert und Motor_VL laeuft 
333: andere Aktion 
500: motor dreht schneller: 102 
  999: andere Aktion 
1500: motor dreht schneller: 104 
  nfnf�1665: andere Aktion 
2331: andere Aktion 
2500: motor dreht schneller: 106 
  nfnf�on 
00: motor dreht schneller: 106 
dere Aktion 
31: ander��2997: andere Aktion 
3500: motor�setup fertig 
ticks_VL initialisiert und Motor_VL laeuft 
335: andere Aktion 
502: motor dreht schneller: 102 
1001: andere Aktion 
1502: motor dreht schneller: 104 
7o_��i����i__��߱������i�:�x�[�W����>:3�ԯ��������k�����=EM|-v�Zz/�n��o�)}���W�v��!>������?+���,���Z��~�{��vN�s�}�1�3N���n5��v�s�KO��u���:���{m��߾�����?g������_�k� �{��g��=^�{7����w��5wr�W?_ky���ܻ���s|4��u�.����D�\·�=���li�����R�~����t��?ٵ���I|,�R�؟��Մn�Wڎ^7��Ÿ�����C9������������4�Z������7�?�eh>�������~y������������Jz ~�>_�~�����FZ{��G����������i����'�� 'ܿ��'/o�������ۖ�W�G�/~-�o���6o�uFl�>l��������/D�E�^أ�O�{��=�#���1���Nw�Cq̎���E�\�h����<|������[q��vx\���׿�~������{�����{�{��Ol��}d��u_������,�}���iH?����eU=�7A������O,a���9������Y���|�L}�e^X��^���n�j>���R����������r������<i�������K�?z:�ϗ�#�j�;�\׿ߍb���������}W�?�m�O���릟���b���y���,�"�����{���ֽ}��ۚ����;M��s�K��Z��[�8�Ү���sW�u�׿j,�3,~Ⱥ/���[��m���_��-� ~���y{k�T���F��������/�u��(>��tv�WJ��g��zgF�����ۅ�+��|��T�S���緖��>�-�Zcпm���`�%�{���p��������c��ϗ������Wm)���\ܲ�γ������v��~_)���n'�?����+�=������zZG^��'�z�H���N{7����w��5wr�W?_ky�޷ܻ���s|4��u�.�ī�D�\���=���li�����R�~����t��?ٵ���I|,�R�؟��Մn�W��^7��Ÿ�����C9���������
muss man vor dem addieren nicht die arten der ausgaben in eine gleiche art umwandeln?