Temporizzazione per gestire sensori ultrasuoni

Ciao a tutti!

Sto cercando di riutilizzare una schedina "Sonar I/O" di un robot mondadori che avevo iniziato a fare tempo fa...

Per riferimento, la scheda in questione è questa:

http://www.lpilsley.co.uk//cybot/sonario.htm
per info più generiche: Scheda sonar in/out robot Cybot

Credo di aver collegato tutto bene ad arduino, non mi resta che pilotare i trasmettitori ultrasuoni con la giusta temporizzazione, e qui c'è il problema. La temporizzazione è spiegata qui:

http://www.cybench.co.uk/cybot/sonar.php

Se ho capito bene quel che devo fare è, ogni 25millisecondi, emettere otto impulsi di durata 12.5microsecondi, in controfase tra il piedino 5 e 6.

Ho provato a buttar giù uno sketch, potreste dirmi se vi sembra corretto il pilotaggio? Sembra non funzionare, e ci sto impazzendo!

#define frontal 0
#define transmit1 12
#define transmit2 13

int sonarRead = 0;
int lastBurst = 0;
int delta = 0;
int lastPulse = 0;
int delta2 = 0;

void setup() {
    Serial.begin(9600);
    pinMode(frontal, INPUT);      
    pinMode(transmit1, OUTPUT);
    pinMode(transmit2, OUTPUT);
    lastBurst = millis();

}  

void loop(){
  
       delta = millis() - lastBurst; 
       
       if(delta >= 25){ // ogni 25 millisecondi un burst
          
         // qui devo generare 8 impulsi di durata 12.5microsec in controfase sui piedini transmit1 e transmit2 
           lastPulse = micros();
         for(int pulseCount = 0; pulseCount < 8;){

           if(pulseCount % 2){
               digitalWrite(transmit1, HIGH);
               digitalWrite(transmit2, LOW);
           }else{
               digitalWrite(transmit1, LOW);
               digitalWrite(transmit2, HIGH);            
             }

            delta2 = micros() - lastPulse;
            if(delta2 >= 12.5){
              pulseCount++;
              lastPulse = micros();
            }
         }
         
         lastBurst = millis();
         digitalWrite(transmit1, LOW); // lascio a riposo
         digitalWrite(transmit2, LOW);         
       }

     sonarRead = analogRead(frontal);
     Serial.println(sonarRead);
     
}

grazie a tutti :sunglasses:

nessuno sa dirmi se quel codice è corretto per fare quella temporizzazione sui piedini transmit1 e transmit2?

ciao
Il comando "for(int pulseCount = 0; pulseCount < 8;){" é strana; manca l' incremento della variabile ed é meglio lavorare con la funzione delayMicroseconds().
la funzione micros() da solo valori interi percui la frequenza non é 25 µsec ma 26µsec. Non dovrebbe essere grave. Puoi anche fare 13sec on e 12µsec off.

Ciao Uwe