Paso 6: código. Finalmente.
Bien, ahora estamos finalmente listos para cargar el código real. Sólo copie y pegue este código en el IDE. Luego, ir a la línea 13, donde el pgt se establece en 250000. Cambio los 250000 a 1000000 / (12 / distancia) donde la distancia es la distancia entre los agujeros de la última etapa. No utilice decimales, redondo al número entero más cercano.
Boolean ts;
int value01 = 0; valor //the en las décimas
byte value10 = 0; //value decenas lugar
anaval largo sin firmar; //value en el lugar
valor de byte = 0; / / prueba de valor que se mostrará
const int val = 40; el retraso
larga temp;
Boolean extra10; //these están justo donde queremos que los decimales
extra1 booleano;
Boolean extra;
tiempo largo sin firmar; //the micros() valor en el momento de interrupción
lasttime largo sin firmar;
unsigned int pgt = 250000; el número de 3 pulgadas entre photogates. Si este número se muestra, significa que hubo un error, y no intervalo de tiempo se registró.
calcula como 1000000/(12/distanceininches). da salida en ft/seg
no utilizar flotadores para ahorrar espacio (hay muy poco en el 2313)
void setup() {}
DDRB = B11111111; //sets puerto B de salida (pines más a la izquierda)
DDRD = B1110000; //sets los 3 pines que cambie los dígitos hacia fuera, todos los demás que en.
DDRA = B000; Si se utiliza un oscilador externo, no se líe con un puerto, que es reset y oscilador.
PORTD = B0001111;
PORTA = B000;
attachInterrupt (1, stv, levantamiento); //we sólo quiere interrumpir en la primera puerta, no nos importa el segundo todavía.
}
void loop() {}
istobig (); //these tres sólo el número de la salida. La sincronización se realiza en las interrupciones
divide();
SendOut();
}
void stv() {//starts tiempo y une el correcto interrumpir
tiempo = (micros); //if cambias el código, este siempre debe estar en el mismo orden que stopv(). De lo contrario, la diferencia entre romper la puerta y el tiempo de grabación diferente y así estropear el resultado.
attachInterrupt (0, stopv, RISING); //set uno para el otro pin de interrupción
detachInterrupt (1); //and apague éste, hasta que el otro interrpt
}
void stopv() {}
lasttime = (micros); //this debe ser la misma operación y en el mismo lugar como time=micros() arriba.
anaval = pgt / (abs(lasttime-time)/10); //do la matemática para obtener ft/seg
attachInterrupt (1, stv, levantamiento); //reattach la interrupción para iniciar el temporizador,
detachInterrupt(0); y este uno.
}
void istobig() {//checks si el número es demasiado grande. Si es así, reduce en consecuencia. (por un factor de 10);
Temp = anaval;
Si (temp > 1000) {}
extra = 1;
Temp = temp/10;
} else {}
extra = 0;
}
Si (temp > 1000) {}
extra1 = 1;
Temp = temp/10;
} else {}
extra1 = 0;
}
Si (temp > 1000) {}
extra10 = 1;
Temp = temp/10;
} else {}
extra10 = 0;
}}
{} void divide()
value01 = temp; //sets décimas entre 0 y 900
valor = temp/10; //sets los entre 0 y 90
value10 = temp/100; //sets decenas entre 0 y 9
valor = int (valor); //rounds las variables
value10 = int(value10);
value01 = int(value01);
value01 = value01 - (valor * 10); //removes todos menos el dígito de las décimas-lugar
valor = valor - (value10 * 10); //removes de todo pero el lugar de los dígitos
}
void sendout() {}
extra * = 4;
PORTD = B0001111;
Temp = value01;
Output();
PORTD = B1001111;
delayMicroseconds(val);
extra = extra1 * 4;
PORTD = B0001111;
Temp = valor;
Output();
PORTD = B0101111;
delayMicroseconds(val);
extra = extra10 * 4;
PORTD = B0001111;
Temp = value10;
Output();
PORTD = B0011111;
delayMicroseconds(val2);
sin retardo necesario, la matemática toma bastante tiempo
}
void output() {portB //sets basado en el número que aparecerá
{Switch(Temp)}
caso 0:
PORTB = B00000101 - extra; adicional agrega un punto decimal.
rotura;
caso 1:
PORTB = B11011101 - extra;
rotura;
caso 2:
PORTB = B01000110 - extra;
rotura;
caso 3:
PORTB = B01010100 - extra;
rotura;
caso 4:
PORTB = B10011100 - extra;
rotura;
caso 5:
PORTB = B00110100 - extra;
rotura;
caso 6:
PORTB = B00100100 - extra;
rotura;
caso 7:
PORTB = B01011101 - extra;
rotura;
caso 8:
PORTB = B00000100 - extra;
rotura;
caso 9:
PORTB = B00011100 - extra;
rotura;
}}