Aiuto Programma

Ciao ragazzi, mi è capitato per le mani questo codice

    int state = HIGH;
    int i,startindex=-1;
    uint8_t bit = digitalPinToBitMask(pin);
    uint8_t port = digitalPinToPort(pin);
    uint8_t stateMask = (state ? bit : 0); 
    unsigned long width[8] = {0,0,0,0,0,0,0,0};
    float nOff=0,nAB=0,nCD=0;     

 
    for(i=0;i<8;i++) {
	while ( (*portInputRegister(port) & bit) == stateMask)
	    width[i]++;
	while ( (*portInputRegister(port) & bit) != stateMask)
  width[i]++;
  }
  for(i=1;i<8;i++) {
    if(i<5) {
                  if(width[i]<width[i+2]&&width[i]<width[i+3]&&width[i+1]<width[i+2]&&width[i+1]<width[i+3]) {
                      startindex=i;
                       i=8;
                          }
            }      
        }
    if(startindex!=-1) { 
	  nOff=width[startindex]+width[startindex+1];
	  nAB=width[startindex+2];
	  nCD=width[startindex+3];

MA non essendo un programmatore di C non capisco bene cosa fa.
Mi potete aiutare??? Grazie

Pare faccia una sorta di statistica sui cambi di stato dei pin relativi ad una porta I/O e poi modifichi lo stato di qualcosa in base a questi dati. Ma senza sapere il contesto è difficile capirlo.

Intanto grazie per la risposta. Poi hai ragione non ho specificato per niente. Serve per misurare la variazione della resistenza di una PT1000 in base all'uscita di un circuito integrato per spunto ho preso questo topic http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1269857588 In particolare volevo sapere cosa facevano queste tre funzioni:

uint8_t bit = digitalPinToBitMask(pin);
    uint8_t port = digitalPinToPort(pin);
    uint8_t stateMask = (state ? bit : 0);

Grazie

legge 8 porte digitali attraverso un byte e poi le confronta....

?:; è in if(){}else{}

le altre due funzioni devi cercarle sul playground o su google e troverai un sacco di tutorial

Grazie, sinceramente avevo cercato su internet e playground ma non ho trovato niente per capire per bene cosa fanno…
Hai qualche link da consigliarmi???

sono funzioni di aiuto per usare i registri pin: http://www.arduino.cc/en/Reference/PortManipulation

Ciao scusa se ti disturbo ancora, ma non ho trovato niente di esauriente ancora non capisco bene cosa fanno...mi puoi scrivere due righe di spiegazione???? grazie