Arduino: функция не будет работать, если не используется Serial.println с любым текстом - PullRequest
0 голосов
/ 02 декабря 2018

Совершенно новый для программирования Arduino, поэтому я прошу прощения, если то, что я делаю в следующем коде, глупо:)

Я пишу функцию для пользовательского измерителя ветра.У меня очень странная «ошибка»: если я прокомментирую строку № 41 приведенного ниже кода, которая представляет собой просто «Serial.println» с любым текстом внутри, функция wind возвращается в цикл, fixed number: 8029.90.

Кроме того, переменная "Perimetros" оценивается как "0", что является ложным и приведет к тому, что возвращаемое значение функции "wind" будет делением с 0 знаменателем (таким образом,ошибка, а не «0»).

#include <time.h>

// Global Variables:
  // function: 'loop'
  int GeneralDelay = 1;
  float Wind;
  float Rain;
  int ticktockRain;
  String message;

  // function: 'wind'
  int RotateFirstTime = 0;
  int RotateLastTime = 0;
  int RotateTimeDelta = 0;
  float Aktina = 11.3;
  float ConvertedAktina = Aktina * 0.00001;
  float Perimetros = ConvertedAktina*2.0*3.14159;
  float RPM;
  int WindSensor = 8;
  int SampleTimeRPM = 5000;
  float tempWind;
  int flagWind = 0;
  int WindRunningTimeSTART = 0;
  int WindRunningTimeEND = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(WindSensor, INPUT);
}

float wind(){
  WindRunningTimeSTART = millis();
  while (SampleTimeRPM > (WindRunningTimeEND- WindRunningTimeSTART)){
    //Serial.print("SampleTimeRPM =");
    //Serial.println(WindRunningTimeEND- WindRunningTimeSTART);
    WindRunningTimeEND = millis();
    if (digitalRead(WindSensor) == HIGH && flagWind == 0)
    {
      Serial.println("LITERALLY WHATEVER TEXT MAKES THIS CODE WORK");
      RotateFirstTime = millis();
      flagWind = 1;
    }
    if (digitalRead(WindSensor) == HIGH && flagWind == 1)
    {
      RotateLastTime = millis();
      flagWind = 0;
    }
    RotateTimeDelta = (RotateLastTime - RotateFirstTime);
    if (RotateTimeDelta > 0 && flagWind == 0)
    {
      RPM = (3600000/RotateTimeDelta*3.14159*1*Perimetros);
      tempWind = RPM;
      RPM = 0.0;
    }
  }
  return(tempWind);
}

void loop(){
  Wind = wind();
  Serial.print("Wind: ");
  Serial.println(Wind);
}

Если я просто раскомментирую эту конкретную строку, а «Serial.println ()» будет выполнен с любым текстом внутри (пустой текст не работает), тогдавсе расчеты, операции и общая логика функции "ветер" выполнены отлично и на 100% правильно !!!

Мой вопрос: на "digitalRead" влияют какие-либо средства, из "Serial.функции print "или" Serial.println "?

Заранее благодарим вас за любые предложения, которые могут у вас возникнуть по этому странному вопросу, и извините, если я задам что-то очевидное!

...