Go Down

Topic: Demora de aprox 1 segundo para o Arduino executar a função. (Read 212 times) previous topic - next topic

Aparecido

Estou fazendo teste para acender/apagar um led através de comandos pela porta serial.
 O problema é o seguinte, ao enviar o comando para acender ou apagar o led do pino 13 do Arduino, ele demora aproximadamente 1 segundo para executar o comando (mudar estado lógico da porta), eu havia encontrado um exemplo onde tinha um comando que fazia o Arduino executar a função imediatamente, porém não encontrei mais esse exemplo.
 Alguém sabe qual o comando?? Acho que é algo como precisão do tempo de resposta. Segue abaixo o código que estou testando.
 Obrigado, abraços.

Code: [Select]
String incoming;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); //Inicializa a serial
}

void loop()
{
   if (Serial.available() > 0)
   {
   incoming = Serial.readString();
   
    if(incoming == "a")
    {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    if(incoming == "b")
    {
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    }
   }
}

bubulindo

E que tal usares read em vez de readString???


Code: [Select]

char incoming;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); //Inicializa a serial
}

void loop()
{
   if (Serial.available() > 0)
   {
   incoming = Serial.read();
   
    if(incoming == "a")
    {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    if(incoming == "b")
    {
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    }
   }
}

This... is a hobby.

bubulindo

Já agora, lendo a fraca descrição de readString, possivelmente terias de enviar um terminador de string para que a função não fique à espera antes de avançar.
Seja como for, se apenas vais enviar um caracter, não devias usar Strings.

https://www.arduino.cc/en/Serial/ReadString
This... is a hobby.

Aparecido

E que tal usares read em vez de readString???
Code: [Select]

char incoming;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); //Inicializa a serial
}

void loop()
{
   if (Serial.available() > 0)
   {
   incoming = Serial.read();
   
    if(incoming == "a")
    {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    if(incoming == "b")
    {
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    }
   }
}


Já agora, lendo a fraca descrição de readString, possivelmente terias de enviar um terminador de string para que a função não fique à espera antes de avançar.
Seja como for, se apenas vais enviar um caracter, não devias usar Strings.

https://www.arduino.cc/en/Serial/ReadString
Testei o código que você postou e o led não acende/apaga.
 Eu não lembro a função, mas era algo como funçãovarredura=1 e acendia/apagava instantaneamente.
 No código acima eu estou enviando um único caractere, esse código é só para testar a comunicação, eu vou usar strings sim.
 Obrigado pela ajuda.

luisilva

Testei o código que você postou e o led não acende/apaga.
(...)
Veja assim. O bubulindo não corrigiu o código original completamente.
Code: [Select]

char incoming;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); //Inicializa a serial
}

void loop()
{
   if (Serial.available() > 0)
   {
   incoming = Serial.read();
   
    if(incoming == 'a')
    {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    if(incoming == 'b')
    {
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    }
   }
}


Aparecido

Veja assim. O bubulindo não corrigiu o código original completamente.
Code: [Select]

char incoming;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600); //Inicializa a serial
}

void loop()
{
   if (Serial.available() > 0)
   {
   incoming = Serial.read();
   
    if(incoming == 'a')
    {
    digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
    }
    if(incoming == 'b')
    {
    digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
    }
   }
}


Testei aqui e ficou instantâneo, obrigado.
 Para string tem outro exemplo? Porque esse código eu estava relembrando como funciona comunicação serial.
 O que estou tentando fazer vai usar string, por exemplo 'ledon' e 'ledoff'.

bubulindo

Demorou até perceber onde estava o erro... :) Obrigado pela correcção.
This... is a hobby.

Go Up