// ################# Definicao de constantes #define PUMP_ON 9 // output digital para driver do relé da bomba de combustivel #define FUEL 10 // output DO PULSO PARA O ELETROINJETOR // ################# Declaracao de variaveis long TEMPO_TESTE = 60 ; // EM SEGUNDOS long TEMPO_PARADO = 40 ; // EM SEGUNDOS float PULSO = 2 ; // TEMPO DE JATO float FATOR_CORRECAO = 1 ; // FATOR DE CORRECAO TEMPO DE CLOCK MANTENHA 1 CASO O PERIODO ESTEJA CORRETO float PULSOM = PULSO * FATOR_CORRECAO * 1000 ; // TEMPO DE JATO float RPM = 1200 ; //1200 rpm float ACRESCIMO = 600; float RPS ; float MEIARPS ; float VOLTA_SEGUNDO; float MEIA_VOLTA_SEGUNDO; float PARADA; float PARADAM; unsigned long currentMillis, workMillis ; void setup() { TEMPO_TESTE = TEMPO_TESTE * 1000; // TEMPO_PARADO = TEMPO_PARADO * 1000; Serial.begin(9600); pinMode(FUEL, OUTPUT); pinMode(PUMP_ON, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); Serial.print("Inicio do teste em "); Serial.print("5"); Serial.println(" s"); Serial.println("##############################"); delay(5000); } void imprime() { Serial.print("TEMPO DE TESTE: "); Serial.print(TEMPO_TESTE / 1000); Serial.println(" s"); Serial.print("ROTAÇÕES: "); Serial.print(RPM); Serial.println(" RPM"); Serial.print("ROTAÇÕES POR SEGUNDO: "); Serial.print(RPS); Serial.println(" "); Serial.print("PERIODO 360º: "); Serial.print(VOLTA_SEGUNDO); Serial.println(" ms "); Serial.print("PERIODO 180º: "); Serial.print(MEIA_VOLTA_SEGUNDO); Serial.println(" ms "); Serial.print("PERIODO DE JATO: "); Serial.print(PULSO); Serial.println(" ms "); Serial.print("TEMPO DE AGUARDO ATÉ + 360º: "); Serial.print(PARADA); Serial.println(" ms "); Serial.println("################################################################# "); } void fuel_test() { digitalWrite(PUMP_ON, HIGH); // ativa a bomba workMillis = currentMillis = millis(); // pega o valor restante de parada para adicionar a diferencia de microsegundos float temp = PARADA - (long)(PARADA); long p = 1; for (int i=0; i< 3 ; i++) p*=10; long DecimalPart = p * temp; Serial.println(DecimalPart); Serial.println(temp); do { digitalWrite(FUEL, HIGH); digitalWrite(LED_BUILTIN, HIGH); delayMicroseconds(PULSOM); digitalWrite(FUEL, LOW); digitalWrite(LED_BUILTIN, LOW); delay(PARADA); delayMicroseconds(DecimalPart * 4); currentMillis = millis(); } while ((currentMillis - workMillis) < TEMPO_TESTE); } void regressivo() { Serial.print("Proximo jato em "); int I = TEMPO_PARADO; do { Serial.print(I); Serial.print(", "); I --; delay(1000); } while( I > 0) ; Serial.println(" "); Serial.println("################################################################# "); } void loop() { if (RPM == 10000) { RPS = RPM / 60 ; MEIARPS = (RPS / 2); VOLTA_SEGUNDO = ((1 / RPS )* 1000) ; MEIA_VOLTA_SEGUNDO = VOLTA_SEGUNDO / 2; PARADA = VOLTA_SEGUNDO - PULSO; PARADAM = PARADA * 1000 ; imprime(); fuel_test(); regressivo(); } else { do { RPS = RPM / 60 ; MEIARPS = (RPS / 2); VOLTA_SEGUNDO = ((1 / RPS )* 1000) ; MEIA_VOLTA_SEGUNDO = VOLTA_SEGUNDO / 2; PARADA = VOLTA_SEGUNDO - PULSO; PARADAM = PARADA * 1000 ; imprime(); fuel_test(); RPM = RPM + ACRESCIMO; regressivo(); } while (RPM <= 10000); RPM = 1200; } }