Последовательный монитор Arduino и задержка дисплея - PullRequest
0 голосов
/ 13 сентября 2018

У меня небольшая проблема с моим проектом Arduino.

По сути, я делаю аппаратный монитор, который отображает температуру, тактовую частоту, скорость вентилятора и т. Д.

Я делаю это, отправляя значения тактовой частоты, температуры и т. Д. В arduino через последовательный монитор. Arduino считывает эти значения и выводит на экран

Проблема заключается в следующем. Он без проблем читает последовательный вывод. Но отображение не работает должным образом. Arduino всегда загружает значения на дисплее, а обновление занимает 10-15 с, когда я хочу, чтобы оно равнялось 1 с.

Может ли быть так, что имена значений, которые C # отправляет в Arduino, слишком длинные, поэтому для выполнения всего этого за короткий промежуток времени требуется слишком много времени и вычислительной мощности ??

Кроме того, чем меньше значений, которые я позволяю отображать arduino на экране, тем быстрее он становится.

Я покажу вам серийный монитор Arduino и приведенный ниже код (да, я мог допустить много ошибок, я только что запустил Arduino 4 месяца назад)

Последовательный монитор:

void RefreshAllValues()
{
  static bool isBuffering = false;
  int CPUL;
  int GPUL;
  int RAMT;
  int RAMA;
  int CPUC;
  int GPUC;
  int GPUMC;
  int CPUT;
  int GPUT;
  static String IncomingMessage = "";

  if (Serial.available() > 0)
  {
    char IncomingChar = (char)Serial.read();
    if (IncomingChar == '#')
    {
      isBuffering = true;
      IncomingMessage = "";
    }
    if (IncomingChar == '*')
    {
      isBuffering = false;
      IncomingMessage += IncomingChar;
      if (IncomingMessage.startsWith("#CPU_LOAD:"))
      {
        int dv = IncomingMessage.indexOf(":");
        CPUL = IncomingMessage.substring(dv + 1).toInt();
        CPULoad = String(CPUL) + "%";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#GPU_LOAD:"))
      {
        int dv = IncomingMessage.indexOf(":");
        GPUL = IncomingMessage.substring(dv + 1).toInt();
        GPULoad = String(GPUL) + "%";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#TOTAL_RAM:"))
      {
        int dv = IncomingMessage.indexOf(":");
        RAMT = IncomingMessage.substring(dv + 1).toInt();
        RAMTotal = String(RAMT) + "MB";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#AVAILABLE_RAM:"))
      {
        int dv = IncomingMessage.indexOf(":");
        RAMA = IncomingMessage.substring(dv + 1).toInt();
        RAMAvailable =  String(RAMA) + "MB";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#GPU_CLOCK:"))
      {
        int dv = IncomingMessage.indexOf(":");
        GPUC = IncomingMessage.substring(dv + 1).toInt();
        GPUClock = String(GPUC) + "Mhz";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#GPU_MEMORY_CLOCK:"))
      {
        int dv = IncomingMessage.indexOf(":");
        GPUMC = IncomingMessage.substring(dv + 1).toInt();
        GPUMemory = String(GPUMC) + "Mhz";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#CPU_CLOCK:"))
      {
        int dv = IncomingMessage.indexOf(":");
        CPUC = IncomingMessage.substring(dv + 1).toInt();
        CPUClock =  String(CPUC) + "Mhz";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#CPU_TEMP:"))
      {
        int dv = IncomingMessage.indexOf(":");
        CPUT = IncomingMessage.substring(dv + 1).toInt();
        CPUTemp = String(CPUT) + "C";
        IncomingMessage = "";
      }
      else if (IncomingMessage.startsWith("#GPU_TEMP:"))
      {
        int dv = IncomingMessage.indexOf(":");
        GPUT = IncomingMessage.substring(dv + 1).toInt();
        GPUTemp = String(GPUT) + "C";
        IncomingMessage = "";
      }

    }
    if (isBuffering)
    {
      IncomingMessage += IncomingChar;
    }
  }
}

Отображение на экране:

 tft.setFont(Terminal6x8);
  RefreshAllValues();
  delay(10); //Otherwise it skips the 1st value that comes through
  tft.drawText(30, 10, "CPU");
  tft.drawText(130, 10, "GPU");
  tft.drawText(30, 20, CPULoad);
  tft.drawText(30, 40, CPUClock);  
  tft.drawText(130, 20, GPUTemp);
  tft.drawText(130, 40, GPUClock);
  tft.drawText(130, 60, GPULoad);
  tft.drawText(75, 85, RAMAvailable);

Я в принципе не знаю, как решить эту проблему, и поиск того, как установить интервал 5 с между последовательными чтениями, не дал мне никаких полезных результатов ..

Я надеюсь, что кто-то может помочь мне с этим Спасибо

...