Rueda dentada jeep 4.0

Hola amigos tengo un taller mecánico de jeep y un banco de pruebas de pcm y necesito reproducir el patron de la rueda dentada la cual es 18-2-2-2.
Estuve preguntandole a la gente de ardustim pero no he recibido respuestas satisfactorias ni ayuda.
no soy programador pero puedo aprender, poseo la arduino UNO y ya hice un código que funciona pero no se como agregarle un potenciometro para variar las rpms.
quisiera saber si uds pueden ayudarme al menos en decirme que tipos de comandos usar en el código...
muchas gracias desde VENEZUELA

code:  [Select]
 int led = 13;
int led2 = 12;

// the setup routine runs once when you press reset:
void setup() {               
 // initialize the digital pin as an output.
 pinMode(led, OUTPUT);
 pinMode(led2, OUTPUT); 
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(4.72); 
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);    
 delay(4.72); 

 // 2
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78); 
 digitalWrite(led, HIGH);  
 delay(5.56);              
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(9.44); 

//3
digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);    
 delay(9.44); 
//4
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);  
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);  
 delay(5.56);               
 digitalWrite(led, LOW);  
 delay(4.72); 
 digitalWrite(led2, LOW);
 digitalWrite(led, LOW);    
 delay(4.72); 
//5
 digitalWrite(led, HIGH);  
 delay(5.56);             
 digitalWrite(led, LOW);  
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);  
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);   
 delay(9.44); 
//6
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);              
 digitalWrite(led, LOW);   
 delay(2.78); 
 digitalWrite(led, HIGH);  
 delay(5.56);               
 digitalWrite(led, LOW);   
 delay(2.78); 
 digitalWrite(led, HIGH);   
 delay(5.56);               
 digitalWrite(led, LOW);    
 delay(9.44); 
 
}

https://drive.google.com/open?id=0ByTqMTU7OnezTU9xTjJFUl9qcGs

Para comenzar controla tu impaciencia y lee las Normas del foro sobre como postear enlaces, códigos e imágenes.
Luego te comento que delay solo maneja números enteros de modo que si usas 2.75 leerá 2 y será una demora de 2 mseg nada mas.
puedes usar delayMicroseconds(us)
en lugar de lo que usabas
Entonces

delay(2.75);

cambia a

 delayMicroseconds(2750); // pero ahora expresado en usegundos

Los códigos se suben a este blog, no se ponen enlaces para descargarlos y que además requieren acceso personalizados.
Para resolver tu problema con el potenciómetro deberías decirnos a que posición del mismo le corresponde el código que has posteado.

Muchas gracias Surbyte por guiarme y pido disculpas por lo que hice indebido.
Lo del potenciometro no tengo la menor idea de como agregarselo al código que he hecho y quisiera que uds me ayuden, Muchas gracias

con respecto a las normas del foro si las leí y trate de insertar las imágenes y códigos con el formato específico pero no veía en mi navegador las herramientas . ya lo solucione cambiando de navegador.
muchas gracias por su comprensión

repito para que nos entendamos.
Tu código muestra una serie de delays que en conjunto te darán una velocidad. Dime cual es?
Para usar un potenciómetro necesitas esto

void setuup() {
     Serial.begin(9600); // solo para ver los datos en el monitor serie
}

void loop(){
   Pot = 5.0*analogRead(A0)/1023.0;      // convierto a Voltios valor de A0 que va de 0 a 1023
   Serial.println(Pot);
}

Este simple programa lee un potenciómetro conectado entre +5V y GND con el cursor a A0 del Arduino.
La salida se ve en el monitor Serie.

Mi código es experimental y ahorita le puse estos tiempos sólo para observar físicamente los led en la arduino:

Code: [Select]
<digitalWrite(led, HIGH);   
  delay(55.6);               
  digitalWrite(led, LOW);   
  delay(278); 
  digitalWrite(led, HIGH);   
  delay(55.6);               
  digitalWrite(led, LOW);   
  delay(278); 
  digitalWrite(led, HIGH);  
  delay(55.6);              
  digitalWrite(led, LOW);    
  delay(278); 
  digitalWrite(led, HIGH);   
  delay(55.6);               
  digitalWrite(led, LOW);   
  delay(944); >

esto es para representar la gráfica ( la cual no puedo insertar en este momento porque no veo las herramientas en este editor )

Traté de hacer el código en microsegundos así:

Code: [Select]
<void loop() {
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);              
  digitalWrite(led, LOW);    
  delayMicroseconds(278000); 
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);               
  digitalWrite(led, LOW);    
  delayMicroseconds(278000); 
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);               
  digitalWrite(led, LOW);    
  delayMicroseconds(278000); 
  digitalWrite(led, HIGH);   
  delayMicroseconds(55600);               
  digitalWrite(led, LOW);   
  delayMicroseconds(472000); 
  digitalWrite(led2, HIGH);
  digitalWrite(led, LOW);    
  delayMicroseconds(472000); >

y ahora obtengo muchos errores:

F:\ARDUINO\microsecond\microsecond.ino: In function 'void loop()':

F:\ARDUINO\microsecond\microsecond.ino:17:27: warning: large integer implicitly truncated to unsigned type [-Woverflow]

delayMicroseconds(278000);

^

Esta es mi última respuesta hasta no ver que usas los tags para insertar códigos.

Pero porque pones números tan altos?
5.56 mseg son 5560 useg
delay(5.56); cambia a delayMicroseconds(5560);
delay(2.78);cambia a delayMicroseconds(2780);
no hay ningun número posible como

int led = 13;
int led2 = 12;

// the setup routine runs once when you press reset:
void setup() {               
 // initialize the digital pin as an output.
 pinMode(led, OUTPUT);
 pinMode(led2, OUTPUT); 
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);    
 delayMicroseconds(4720);

 // 2
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);

//3
digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(9440);
//4
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);  
 delayMicroseconds(4720);
 digitalWrite(led2, LOW);
 digitalWrite(led, LOW);    
 delayMicroseconds(4720);
//5
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);  
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);
//6
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(9440); 

}

ok allí anda bien.

quisiera saber si existe algún simulador de arduino y si existe la posibilidad de ver en la pc con un osciloscopio virtual el patrón de ondas de la salida del arduino ?
muchas gracias

Si. claro pero gratis no. El mejor para mi se llama Proteus.

prueba

}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);    
 delayMicroseconds(4720);

Algo así ?

int led = 13;
int led2 = 12;

// the setup routine runs once when you press reset:
void setup() {               
 // initialize the digital pin as an output.
 pinMode(led, OUTPUT);
 pinMode(led2, OUTPUT);
 
Serial.begin(9600); // solo para ver los datos en el monitor serie
}
// the loop routine runs over and over again forever:
// 10 rpm
//1
void loop() {

Pot = 5.0*analogRead(A0)/1023.0;      // convierto a Voltios valor de A0 que va de 0 a 1023
   Serial.println(Pot);

 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(4720);
 digitalWrite(led2, HIGH);
 digitalWrite(led, LOW);    
 delayMicroseconds(4720);

 // 2
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);

//3
digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(9440);
//4
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);  
 delayMicroseconds(4720);
 digitalWrite(led2, LOW);
 digitalWrite(led, LOW);    
 delayMicroseconds(4720);
//5
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);             
 digitalWrite(led, LOW);  
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);   
 delayMicroseconds(9440);
//6
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);              
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);  
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);   
 delayMicroseconds(2780); 
 digitalWrite(led, HIGH);   
 delayMicroseconds(5560);               
 digitalWrite(led, LOW);    
 delayMicroseconds(9440); 

}

Hola ya logré instalar proteus 7.9 sp1, le incluí las librerías, corrí el hex y vi el osciloscopio. ( mucho progreso para mi )
Ahora quisiera ayuda para agregarle el potenciometro para variar las rpms.
muchas gracias por su invaluable ayuda

A ver si nos entendemos mejor. Necesito que me digas de donde has sacado los tiempos que has puesto y porque son esos tiempos. Los pusiste al azar? Surgen de alguna justificación matemática?
son demasiado precisos para que sean al azar.
Si esos tiempos son 10 rpm, quiero saber como modificar esos tiempos para 20 RPM y asi.
Entonces al variar tu potenciometro sacaremos una manera de modifcar los delayMicroseconds(). Se entiende?

Porque no publicas como son las conexiones, que motor usas, etc.
Tu proyecto resulta como descolgado para los que leemos de este lado y mira como yo soy el único que te responde pero si pones mas información, mas personas responderán.

Muchas gracias por su paciencia.
no he sabido a{un como vincular fotos para poder mostrar la informacion de la rueda dentada. he tratado usando google drive y mega sin exitos, seguire tratando...

los tiempos si son precisos y corresponden al patron de la rueda de jeep 4.0 de los años 1990 al 2001 que se llama 18-2-2-2.
se refiere a 3 grupos de 4 dientes,
los grupos tienen 120 grados de separacion entre ellos.
los dientes estan separados 20 grados unos de otros
entre un grupo y el otro hay 60 grados
si la circunferencia tiene 360 grados y la separo entre 18 da 20 grados .
el sensor de levas es una media luna en el distribuidor es decir 180 grados del distribuidor que corresponde a 360 grados del cigueñal ya que la leva gira a la mitad de las rpms del cigueñal, entonces tenemos que en 720 grados o 2 rpms se da que el sensor de levas esta 1 rpm encendido y 1 rpm apagado.
Todo esto es confuso explicarlo con letras, una imagen lo muestra mejor.
Saludos