Paso 2: configuración
90 * 8 = 720 + 450 = 1170us / 5 = 234 pulsout puerto, 234 es 90 grados en este servo.
Encontré una solución para el flotante punto de multiplicación y división en matemáticas de entero en el Picaxe programación manual en matemáticas. Mi fórmula 90 * 5.556 se convierte en 90 / 10 * 56 en matemáticas de entero. Funciona pero no es lo que precisa. 56 si una solución y agregar 1 90 / 56 + 1 * 10 es un poco más preciso. No tengo ningún servos con un UPD de 5.556 o que tienen un rango bajo de 1000. Ninguno de mi código utiliza ya. Fue un divertido buscar y trabajar.
90 / 10 * 56 = 504 + 450 = 954 es cerca de 90 en un servo
90 / 10 + 1 * 56 = 560 + 450 = 1010 está más cerca. Es por eso que no lo uso ya.
90 * 8 = 720 + 450 = 1170 es 90 de la torre Pro SG90 de Micro
Procesadores de punto flotante como el Arduino hacen esto fácil. El Arduino no tiene un comando pulsout, pero tiene delayMicroseconds(). Arduino también tiene una biblioteca de servo que puede hacer prácticamente cualquier cosa con un servo.
digitalWrite (pPin, HIGH);
delayMicroseconds ((unsigned int) pulsAng); ' pulsAng = 1170
digitalWrite (pPin, bajo)
El archivo zip contiene los programas básicos de sellos de 1 & 2, Picaxe y Arduino. Fotos de retrato para la fácil impresión de números binarios y los detalles.
Mis funciones matemáticas de Servo Arduino
void pulsePin (int pPin, pAng int) {}
Si (bitRead (sFlags, svr1On) == 0) {}
bitWrite (sFlags, svr1On, 1);
}
Si (lastAng! = pAng) {}
cntSetSrv = svrSetR;
RfhSetSrv = 1;
lastAng = pAng;
Si (pAng == 0) {}
pAng = svr1Lrng;
}
Else {}
pAng pAng de = * curUPD; //Angle * UPD (nosotros por grado)
pAng pAng = svr1Lrng; //Add gama baja para hacer
} //servo ángulo
pulsAng = (unsigned int) pAng;
}
digitalWrite (pPin, HIGH); //Set ángulo del Servo
delayMicroseconds(pulsAng);
digitalWrite (pPin, LOW);
retorno;
}
Función de sello 2 Servo matemáticas básica
angToInt:
IF sLastAng <> sAngle entonces
' Pausa del golpe y golpear de mostrador
sLastAng = sAngle
svoHitT = srvo1Hits
svoRfrsh = srvo1Hpaus
wTmp1 = sAngle
' Cambiar el ángulo a un PulsOut Int
IF wTmp1 = 0 THEN
wTmp1 = sRangeLow / srvo1Pu
OTRA COSA
wTmp1 = wTmp1 * curUPD
wTmp1 = wTmp1 + sRangeLow / srvo1Pu
ENDIF
ENDIF
PULSOUT srvo1, wTmp1
VOLVER