Compare problem

Hi,

I have the custom library with this code:

		unsigned long border=_lastTime+(unsigned long)1000;
		
		if(actual>border);
		{
			_lastTime=actual;
			_info+=String(actual)+">"  +String(border)+   "\n";
		}
		return false;

I print this in the Serial Monitor and I have this result:

1827>2796

Please tell me why???

Sorry, need a little context.

Please post a complete example of this mystery, the smallest program you can write that shows this problem.

Or your entire program. Whatever, just complete so we can see the details and run it ourselves maybe.

a7

Read the forum guidelines.
Use the IDE autoformat tool (ctrl-t or Tools, Auto format) before posting code in code tags.

Ok, this is my code:

#include "WateringMachine.h" //include the declaration for this class

#define ST_Czuwanie 0
#define ST_Pomiar 1
#define ST_KoniecPomiaru 2
#define ST_Podlewanie 3
#define ST_CzekanieNaKolejnyPomiar 4
#define ST_Pomin 10

int _pinPWMDC;
int _pinDC1;
int _pinDC2;
int _pinHumPower;
byte _pinHumRead;

int _stanPodlewania = 1;
unsigned long _czasOstatniegoPomiaru;
int _numerOstatniegoPomiaru = -1;
int _pomiaryCzastkowe[10];
bool _pierwszyPomiar = true;

int OkGleba = 400;
int _okGleba = 400;
unsigned long MinutyDoPodlania = 200UL;
unsigned long _lastTime;

String _info;

WateringMachine::WateringMachine() {}
WateringMachine::WateringMachine(int pinPWMDC, int pinDC1, int pinDC2, int pinHumPower, byte pinHumRead)
{

	_pinPWMDC = pinPWMDC;
	pinMode(_pinPWMDC, OUTPUT); //Sygnał PWM silnika nr 1
	digitalWrite(_pinPWMDC, HIGH); //Ustawiamy (na stałe) stan wysoki na pinie 6

	_pinDC1 = pinDC1;
	_pinDC2 = pinDC2;
	pinMode(pinDC1, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1
	pinMode(pinDC2, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 2

	_pinHumPower = pinHumPower;
	_pinHumRead = pinHumRead;
	pinMode(_pinHumPower, OUTPUT);//Sygnał włączający czujnik wilgotności gleby
	pinMode(_pinHumRead, INPUT);//Czytanie pomiaru gleby
}

//<<destructor>>
WateringMachine::~WateringMachine() {/*nothing to destruct*/ }
String WateringMachine::Handle()
{
	_info = "";
	if (millis() < _czasOstatniegoPomiaru)
	{
		UstawStan(ST_Pomin);
	}
	switch (_stanPodlewania)
	{
	case ST_Pomiar:
		PomiarGleby();
		break;
	case ST_KoniecPomiaru:
		SprawdzPomiarGleby();
		break;
	case ST_Podlewanie:
		Podlej();
		break;
	case ST_CzekanieNaKolejnyPomiar:
		CzekajNaPomiar();
		break;
	case ST_Czuwanie:
		Czuwaj();
		break;
	case ST_Pomin:
		UstawStan(ST_Pomiar);
		break;
	}
	return _info;
}
int WateringMachine::UstawStan(int stan)
{
	_czasOstatniegoPomiaru = millis();
	_stanPodlewania = stan;
	_info += OpisDlaStanu(stan) + "\n";
}
String WateringMachine::OpisDlaStanu(int stan)
{
	switch (stan)
	{
	case ST_Czuwanie:
		return "Czuwam";
	case ST_Pomiar:
		return "Pomiar";
	case ST_KoniecPomiaru:
		return "Koniec pomiaru";
	case ST_Podlewanie:
		return "Podlewam";
	case ST_CzekanieNaKolejnyPomiar:
		return "Czekam na kolejny pomiar";
	case ST_Pomin:
		return "Pomijam przepełnienie millis";
	}
}
void WateringMachine::PomiarGleby()
{
	digitalWrite(_pinHumPower, HIGH);
	if (CzyUplynalCzas(1000UL))
	{
		ZrobPomiarCzastkowy();
		if (_numerOstatniegoPomiaru == 9)
		{
			UstawStan(ST_KoniecPomiaru);
			digitalWrite(_pinHumPower, LOW);
		}
	}
}
bool WateringMachine::CzyUplynalCzas(unsigned long okresCzasu)
{
	unsigned long aktualnyCzas = millis();
	unsigned long granicznyCzas = _czasOstatniegoPomiaru + okresCzasu;
	if (aktualnyCzas > granicznyCzas)
	{
		_czasOstatniegoPomiaru = aktualnyCzas;
		return true;
	}
	else
	{
		**unsigned long granica = _lastTime + (unsigned long)1000;**

**		if (aktualnyCzas > granica);**
**		{**
**			_lastTime = aktualnyCzas;**
**			_info += String(aktualnyCzas) + ">" + String(granica) + "\n";**
**		}**
		return false;
	}
}
void WateringMachine::ZrobPomiarCzastkowy()
{
	_pomiaryCzastkowe[++_numerOstatniegoPomiaru] = 1023 - analogRead(_pinHumRead);
}
void WateringMachine::SprawdzPomiarGleby()
{
	_numerOstatniegoPomiaru = -1;
	int stanAkceptowalny = _okGleba + 0;
	_info += "OkGleba " + String(_okGleba) + "\n";

	int aktualnaGleba = AktualnyPomiar();

	//if(!_pierwszyPomiar)
	//{
	  //stanAkceptowalny+=50;
	//}
	if (aktualnaGleba < stanAkceptowalny)
	{
		UstawStan(ST_Podlewanie);
	}
	else
	{
		_info += String(aktualnaGleba) + " > " + String(stanAkceptowalny) + "\n";
		UstawStan(ST_Czuwanie);
		_pierwszyPomiar = true;
	}
}
void WateringMachine::Podlej()
{
	if (CzyUplynalCzas(10000UL))
	{
		digitalWrite(_pinDC1, LOW);
		digitalWrite(_pinDC2, LOW);
		UstawStan(ST_CzekanieNaKolejnyPomiar);
	}
	else
	{
		digitalWrite(_pinDC1, HIGH);
		digitalWrite(_pinDC2, LOW);
	}
}
void WateringMachine::CzekajNaPomiar()
{
	if (CzyUplynalCzas(20000UL))
	{
		UstawStan(ST_Pomiar);
	}
}
void WateringMachine::Czuwaj()
{
	//Trzeba zmianić na minuty a nie sekundy
	unsigned long okres = MinutyDoPodlania * 1000UL;
	if (CzyUplynalCzas(okres))
	{
		_info += "poczekalem ";
		_info += okres + "\n";
		_info += "----------------------\n";
		UstawStan(ST_Pomiar);
	}
}
int WateringMachine::AktualnyPomiar()
{
	int pomiar = 0;
	for (int i = 0; i < 10; i++)
	{
		pomiar += _pomiaryCzastkowe[i];
	}
	pomiar = pomiar / 10;

	_info += "Pomiar gleby = ";
	_info += String(pomiar) + "\n";
	return pomiar;
}

#include <WateringMachine.h>

WateringMachine _wateringMachine;

void setup() {
  // put your setup code here, to run once:
  _wateringMachine = WateringMachine(6, 7, 8, 2, A0);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  String info = _wateringMachine.Handle();
  if (info != "")
  {
    Serial.println(info);
  }
}

The bold text is the problem.

there's a ";" after the if statement

we've all seem to have made this mistake at one time or another

Oh my God!
This is the lesson that says "night is to sleep".

Many thanks...

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