Como rodar 32u4 (Leonardo Beetle) sem a Serial da IDE aberta ?

Se fecho a janela Serial na IDE do Arduino o programa carregado no Arduino Beetle (Leonardo 32u4) para de funcionar ou funciona muito lentamente paracendo que aguarda algum timeout. Preciso utilizar o módulo apenas com a Serial1 e a alimentação sem estar conectado no computador e sem estar com a Serial de inteface aberta.

Sem vermos o código parece-me difícil de sabermos o que se está a passar...

Concordo.

Em todo caso, muitas vezes em que isso acontece é por causa dessa linha no programa:

while(!Serial);

Dê uma olhada se tem essa linha no seu e apague ela.

Se desabilitar o while ai mesmo é que não roda. Enquanto a tela serial da IDE está aberta o programa roda com o loop em cerca de 30Hz. Se fecho a janela serial o programa fica super lento só atualizando a cada 3 ou 4 segundos. O processador é o Leonardo Beetle (32u4) mini que a propria placa é o conector USB.

#include <LiquidCrystal_I2C.h> //para o LCD I2C
#define TX_PIN 11  // Saída do pulso trigger

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
unsigned int Data = 0;
unsigned long currentMillis = 0;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(TX_PIN, OUTPUT);
  digitalWrite(TX_PIN, HIGH);  // Inicialmente HIGH

  Serial.begin(115200);
  while (!Serial) ; // se não habilitar nem inicia
  Serial1.begin(115200); //leonardo beetle
  lcd.begin (16, 2);
  delay(1000);
  lcd.clear();
  lcd.setBacklight(HIGH);
  lcd.setCursor(0, 0); //linha 1
  lcd.print("Hydratec");
  lcd.setCursor(0, 1);
  lcd.print("UW Sonar");
  delay(700);
  lcd.setCursor(0, 0); //linha 1
  lcd.print("Alti Sub");

  printHeader(); // imprime os dados do programa
} // setup
//////////////////////////////
void loop() {
  currentMillis = millis();
  //
  blinkled(); // pisca o LED

  // Envia pulso LOW de 2ms
  digitalWrite(TX_PIN, LOW);
  delay(2);//pulso trigger
  digitalWrite(TX_PIN, HIGH);

  unsigned long startTime = millis();
  while (Serial1.available() < 4 && millis() - startTime < 200) {
    // Aguarda até 4 bytes ou timeout de 200ms
  }

  // Leitura dos 4 bytes, se disponíveis
  if (Serial1.available() >= 4) {
    byte header = Serial1.read();
    byte highByte = Serial1.read();
    byte lowByte = Serial1.read();
    byte checksum = Serial1.read();

    // Verifica header e checksum
    if (header == 0xFF) { //default header
      byte calculated = (header + highByte + lowByte) & 0xFF;  // Soma com preâmbulo e pega LSB

      if (checksum == calculated) {
        Data = (highByte << 8) | lowByte;
        Serial.print(Data);
        Serial.println("mm");
        lcd.setCursor(0, 1); //linha 2
        lcd.print(" ");
        if (Data < 1000) {
          lcd.print(" ");
        }
        if (Data < 100) {
          lcd.print(" ");
        }
        if (Data < 10) {
          lcd.print(" ");
        }
        lcd.print(Data);
        lcd.print(" mm");
      } else {
        //Serial.println("Checksum inválido");
      }

    }

    delay(5);//delay ajustado para 25hz
  }

  printLooptime();

}  // loop
////////////////////////////////////////////////////////////////////////////////
void blinkled () {
  int DELAY = 6;
  digitalWrite(13, !digitalRead(13)); //toggle LED
  delay(DELAY / 2);
  digitalWrite(13, !digitalRead(13)); //toggle LED
  delay(DELAY / 2);
}
//////////////////////////////////////////////////////////////////////////////
void printHeader() {
  Serial.println (F("///////////////////////////////////////////////////////////"));
  Serial.println (F("Software: "));
  Serial.println (F("Hardware:"));
  Serial.println (F("programado por ACJacques"));
  Serial.println (F("Obs."));
  Serial.println (F("Obs."));
  Serial.println( F(__FILE__));
  Serial.print   (F("Compilado em "));
  Serial.print (F(__DATE__ ));
  Serial.println (F(" "__TIME__ ));
  //Serial.print(F( "Arduino IDE version: ")); Serial.println( ARDUINO, DEC);
  //Serial.println (F( "C++: " )) ;
  //Serial. println ( __cplusplus ) ; // Versão C++ (201103 = ISO C++ 2011)
  Serial.println (F("///////////////////////////////////////////////////////////"));
  delay (1000); // tempo para exibir
}
///////////////////////////
void printLooptime() {
  unsigned long period = millis() - currentMillis;
  Serial.print(F("Looptime "));
  Serial.print(period);
  Serial.print(F("ms "));
  Serial.print(1000.0 / period, 2); // para imprimir a parte fracionaria
  Serial.println(F("Hz"));
}

Essa linha não bate com o comentário. No caso ela aguarda 4 bytes e 200ms. Contudo, isso não deveria sofrer influência da outra serial.

A Serial1 só é usada para receber os dados do sensor e não tem relação com o problema. O problema é que se não iniciar a janela serial da IDE (Serial comum da interface) o programa não roda. E se abrir a janela o programa parte e roda normalmente. Se fechar a janela ele fica rodando o loop ultralento em 4 segundos....quero poder usar o processador standalone .

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.