Go Down

Topic: Programa ficando lento (Read 82 times) previous topic - next topic

tiagocamana

Galera estou com um problema, no meu código... quando adiciono uma certa programação para ler RPM o programa fica lento...

Estou tentando fazer um logger e um gerenciamento para bico suplementar no meu carro turbo...

a questão do gerenciamento do bico (pulsar) de acordo com sensor de pressão e de mistura, já esta funcionando, mas queria poder registrar todos esses dados junto com a determinada rpm...

mas no momento que coloco o código para ler a rpm o programa fica lento.

segue codigo

Code: [Select]


//----------------------------------------LER RPM---------------------------------------------------
int rev = 12;
unsigned long duration;
unsigned long rpm;

//----------------------------------------PULSADOR---------------------------------------------------
int ledPin = 13;                // LED conectado ao pino digital 13
int value = LOW;                // último valor do LED
long previousMillis = 0;        // último momento que o LED foi atualizado
long interval = 1000;           // tempo de transição entre estados (milisegundos)
int tempoinj = 100 ;
//----------------------------------------PRESAO E LAMBDA--------------------------------------------
int pressao = A0;   //defenir o pino analógico para pressao do turbo
int lambda = A1;   //define pino para leitura da sonda

int val = 0;  // criação da variável para armazenar o estado do turbo(variação:0~1024)
int val1 = 0; // criacao da variavel para armazenar o estado da sonda
//---------------------------------------------------------------------------------------------------
void setup()
{
 
  pinMode(ledPin, OUTPUT);      // configura o pino digital como saída
  Serial.begin(230400);//processo para a comunicação serial
//  pinMode(rev, INPUT);
}

  //--------------------------------------------------------------------------------------------
void loop()
{
//--------------------------------------LER RPM---------------------------------------------------
[color=red]
[b]Serial.print("RPM: ");
Serial.println(rpm);
duration = pulseIn(rev, HIGH);
rpm = 30000000 / duration;[/b][/color]
   
  //----------------------------------------------------------------------------------------------
 val = analogRead(pressao); //linha de código para armazenar os valores obtidos do potênciómetro da variável "Val"

  val = map(val,0,1023,0,101.5);
  val = (val * 0.068948) - 1.03 ;
 // Serial.print("Pressao Turbo : ");
//  Serial.println(val);//envia o valor armazenado na variável "val" para a porta serial
// Para ler a pressao do turbo

  val1 = analogRead(lambda); //linha de código para armazenar os valores obtidos do potênciómetro da variável "Val"
  val1 = map(val1,0,204.6,1,1000);
 //Serial.print("Sonda Lambda : ");
 //Serial.println(val1);//envia o valor armazenado na variável "val" para a porta serial
  // Para ler a sonda



  if (val1 <= 100 ) {
   tempoinj = 5 ;
  }else if(val1 <= 200) {
   tempoinj = 10 ;
 }else if(val1 <= 300) {
   tempoinj = 15 ;
 }else if(val1 <= 400) {
   tempoinj = 20 ;
 }else if(val1 <= 500) {
   tempoinj = 25 ;
 }else if(val1 <= 600) {
   tempoinj = 30 ;
 }else if(val1 <= 700) {
   tempoinj = 35 ;
 }else if(val1 <= 800) {
   tempoinj = 40 ;
 }else if(val1 <= 900) {
   tempoinj = 45 ;
 }else if(val1 <= 1000) {
   tempoinj = 50 ;
 }else{
  value = HIGH;
 }

interval = tempoinj ;
Serial.print("Tempo de inj : ");
    Serial.println(tempoinj);


  if (millis() - previousMillis > interval) {
    previousMillis = millis();   // lembre-se do último tempo que piscamos o LED

    // se o LED está apagado, acenda-o e vice-versa.
    if (value == LOW)
      value = HIGH;
    else
      value = LOW;

    digitalWrite(ledPin, value);

  }
  }

bubulindo

Se dissesses que parte do código é que torna o programa lento seria bastante mais simples de te ajudar.

Dito isto, se leres a explicação da função PulseIn(), possivelmente terás a tua resposta. Fica aqui o link:

https://www.arduino.cc/en/Reference/pulseIn

Qual é a frequência do sinal de RPM??
This... is a hobby.

tiagocamana

#2
May 15, 2017, 06:10 pm Last Edit: May 15, 2017, 06:17 pm by tiagocamana
Se dissesses que parte do código é que torna o programa lento seria bastante mais simples de te ajudar.

Dito isto, se leres a explicação da função PulseIn(), possivelmente terás a tua resposta. Fica aqui o link:

https://www.arduino.cc/en/Reference/pulseIn

Qual é a frequência do sinal de RPM??
opa... coloquei em negrito e vermelho a parte do código mais não foi,

a parte do codigo q coloco e o programa fica lento e essa


Serial.print("RPM: ");
Serial.println(rpm);
duration = pulseIn(rev, HIGH);
rpm = 30000000 / duration;


q é a que faz medição da rpm , esses programa eu tirei da internet
a frenquencia e entre 30 hz e 500 hz variando conforme a rpm do motor

bubulindo

O que faz a medição é a função pulseIn()... E essa instrução fica à espera de ver um pulso antes de iniciar. Certamente que à medida que a frequência aumenta, o programa vai ficar mais rápido porque a função pulseIn() bloqueia.

Outra coisa a teres em conta é como tens ligado o sensor de rpm... que sensor é e como está ligado??
This... is a hobby.

Go Up