Ajuda com exercicio livro Arduino Basico

Mortis:
existe um problema nas variáveis declaradas, pois unsigned char é o mesmo que bit, ou seja de 0 a 255, por isso a variável LED e Max H jamais serão menores que zero ^^

Edit: o ideal seria static int LED = 5;

My bad. Tens razão. Mas o ideal seria char. -126 a 127.

Segundo o que percebi, alteraste as condicões para nunca testar abaixo de zero e alteraste os decrementos e incrementos para fora da digitalWrite()... algum motivo para isso?

Edit:

Tive um tempinho para brincar com isto no Visual Studio e o meu printout deste código funciona trocando apenas o unsigned char por char.

Se quiserem experimentar num compilador de C para PC:

#define UP       0
#define DOWN  1

unsigned char ledPin[] = {8, 9, 10, 11, 12, 13}; 
//adaptei a digitalWrite do Arduino para PC.... he eh
void digitalWrite(unsigned char* pin, unsigned char state){
    *pin = state;
};

void LEDChange() {
  //alterei estas variáveis....
  static char sentido = DOWN;
  static char LED = 5; 
  static char MaxH = 5; 
//mas o resto ficou igual. 
  if (sentido == UP) {
    digitalWrite(&ledPin[LED], LOW); //desliga o que estava. 
    digitalWrite(&ledPin[LED++], HIGH); //liga o próximo.
    if (LED > MaxH) { //se atingimos a altura máxima... 
      sentido = DOWN; //vamos para baixo. 
      LED = MaxH;  //mas começamos de MaxH
    }  
  } else { //sentido = DOWN
    digitalWrite(&ledPin[LED], LOW);   //desliga o anterior
    digitalWrite(&ledPin[LED--], HIGH);  //liga o próximo
    if (LED < 0) {  //se chegamos ao chão
      LED = 0;   // não vamos abaixo
      sentido = UP;  //vamos para cima
      MaxH--;   // mas não chegamos tão alto quanto antes. 
      if (MaxH < 0) { // Se atingimos repouso
        MaxH = 5;  // VOLTAMOS AO InÍCIO.
        LED = 5; 
        sentido = DOWN;
      }
  }
}
//adicionei isto para debug na consola. 
  printf("LED = %d\n", (int)LED);
  printf("Sentido = %d\n", (int) sentido);
  printf("MaxH = %d\n", (int) MaxH);
}


int main(char argc, char** argv) {
	int i;
	printf("Hello, world!!\n");
//60 iteracões dá para ver o algoritmo a funcionar... 
	for (i = 0; i <60; i ++) {
		LEDChange();
	}
	getchar();

	return 0; 
}

E tirando a parte final em que a bola regressa ao início, o código funciona. :S