Kinetic Clock, få koden att visa tid istället för en räknare

Hej, jag håller på med detta projektet, Kinetic Clock men jag lyckas inte få till koden så att klockan ändras varje minut. Just nu så ändrar den siffrorna/servon typ en gång i sekunden.

Jag antar att det är under loop-delen och "Step 1: Set servoTargetDestination" som jag gör fel. Det står i kommentaren att jag skall byta till "timeString" frågan är bara var/hur...

String input;
#include <Servo.h>
#include <DS3231.h>
DS3231  rtc(SDA, SCL);

const int DIGIT_TO_SEGMENT_MAPPING[10][7] = {
  { 1, 1, 1, 1, 1, 1, 0 }, // 0
  { 0, 1, 1, 0, 0, 0, 0 }, // 1
  { 1, 1, 0, 1, 1, 0, 1 }, // 2
  { 1, 1, 1, 1, 0, 0, 1 }, // 3
  { 0, 1, 1, 0, 0, 1, 1 }, // 4
  { 1, 0, 1, 1, 0, 1, 1 }, // 5
  { 1, 0, 1, 1, 1, 1, 1 }, // 6
  { 1, 1, 1, 0, 0, 0, 0 }, // 7
  { 1, 1, 1, 1, 1, 1, 1 }, // 8
  { 1, 1, 1, 1, 0, 1, 1 }  // 9
};

const int SEGMENT_INTERVALS[4][7][2] = {
  {
    {141, 54},
    {155, 69},
    {150, 73},
    {151, 70},
    {159, 75},
    {159, 75},
    {125, 40}
  },
  {
    {164, 76},
    {155, 76},
    {138, 61},
    {180, 87},
    {151, 63},
    {145, 57},
    {165, 78}
  },
  {
    {157, 73},
    {156, 70},
    {165, 85},
    {137, 52},
    {133, 50},
    {133, 50},
    {168, 73}
  },
  {
    {131, 52},
    {147, 61},
    {131, 51},
    {158, 69},
    {155, 73},
    {116, 28},
    {137, 60}
  }
};

const int COLON_INTERVAL[2][2] = {
  {141, 62},
  {137, 30},
};


const int DIGIT_STARTING_SEGMENT_INDEX[4] = {2, 9, 22, 29};
const int COLON_STARTING_INDEX = 16;

const int START_POS = 0;
const int COLON = 2;
const int DIGITS = 4;
const int SEGMENTS_PER_DIGIT = 7;
const int STEP_MS = 20;
const int COUNT_MS = 2000;
const int NUM_SERVOS = DIGITS * SEGMENTS_PER_DIGIT;

int servoTargetDestination[DIGITS][NUM_SERVOS];
int servoTargetDestinationColon[COLON];

int count = 1200;
int timeMS = 0;

Servo servos[DIGITS][SEGMENTS_PER_DIGIT];
Servo colonServos[COLON];


void setup() {
  rtc.begin();
  for (int i = 0; i < DIGITS; i++) {
    for (int j = 0; j < SEGMENTS_PER_DIGIT; j++) {
      int offset = DIGIT_STARTING_SEGMENT_INDEX[i];
      servoTargetDestination[i][j] = SEGMENT_INTERVALS[i][j][START_POS];
      servos[i][j].attach(j + offset);
      servos[i][j].write(servoTargetDestination[i][j]);
    }

  }
  delay(500);
  for (int i = 0; i < DIGITS; i++) {

    for (int j = 0; j < SEGMENTS_PER_DIGIT; j++) {
      servos[i][j].detach();
    }
  }
  for (int i = 0; i < COLON; i++) {
    colonServos[i].attach(i + COLON_STARTING_INDEX);
    colonServos[i].write(COLON_INTERVAL[i][START_POS]);
  }
  delay(500);
  for (int i = 0; i < COLON; i++) {
    colonServos[i].detach();
  }
  for (int i = 0; i < COLON; i++) {
    colonServos[i].attach(i + COLON_STARTING_INDEX);
    colonServos[i].write(COLON_INTERVAL[i][1]);
  }
  delay(500);
  for (int i = 0; i < COLON; i++) {
    colonServos[i].detach();
  }
}

void loop() {
    // Retrieve and cleanup RTC string. "12:45" -> "1245"
    String timeStr = rtc.getTimeStr();
    String timeString = timeStr.substring(0, 2) + timeStr.substring(3, 5);

    for (int activeDigit = 0; activeDigit < 4; activeDigit++) {
      
      // Step 1: Set servoTargetDestination
      String stringCount = String(count); // Swap to timeString to use the clock.
      for (int i = 0; i < SEGMENTS_PER_DIGIT; i++)
      {
        int displayNumber = stringCount.charAt(timeString.length() - 1 - activeDigit) - '0';
        int placement = (activeDigit == 3 && displayNumber == 0) ? 0 : DIGIT_TO_SEGMENT_MAPPING[displayNumber][i];
        servoTargetDestination[activeDigit][i] =  SEGMENT_INTERVALS[activeDigit][i][placement];
      }

      // Step 2: Increment Segments
      for (int i = 0; i < SEGMENTS_PER_DIGIT; i++)
      {
        Servo servo = servos[activeDigit][i];
        int pos = servo.read();
        int dest = servoTargetDestination[activeDigit][i];
        if (pos != dest) {
          if (pos < dest) {
            pos++;
          } else {
            pos--;
          }
          if (!servo.attached()) {
            int offset = DIGIT_STARTING_SEGMENT_INDEX[activeDigit];
            servo.attach(i + offset);
          }
          servo.write(pos);
        }
      }
    }
  
    // Step 3: Wait
    delay(STEP_MS);
    timeMS = timeMS + STEP_MS;
  
    // Step 4A: Countdown
    if (timeMS >= COUNT_MS) {
      timeMS = 0;
      count = count + 1;
    }
  
    // Step 5: Detach anything that is at its destination
    for (int i = 0; i < DIGITS; i++) {
      for (int j = 0; j < NUM_SERVOS; j++) {
        Servo servo = servos[i][j];
        int pos = servo.read();
        int destination = servoTargetDestination[i][j];
        if (pos == destination && servo.attached()) {
          servos[i][j].detach();
        }
      }
    }

}

Jag är lite usäker på frågan. Du säger att den funker i en sags "debug" modus där den bare räknar upp från 1200 ?

I så fall byter du
String stringCount = String(count) ;
til
String stringCount = timeString ;

Kom ihåg att du skal justere all tal i SEGMENT_INTERVALS tabellen så dina servo står snyggt.