Skocz do zawartości

Zwracanie wartości TRUE lub FALSE przez instrukcje if w pętli


Pomocna odpowiedź

Cóż, jakiś czas może mi nie dawać spokoju. Głównie ostatnia sugestia o TR, dlatego, że przy wykonywaniu porównania jest on po prostu rozszerzany do unsigned long i nie ma tu żadnego problemu, bo jego dodatnia wartość się w pełni mieści w nowym typie. Użycie int do wartości zwracanych przez millis(), o ile co do zasady niepoprawne, to z racji arytmetyki uzupełnień do 2, działać i tak powinno. Przy czym to to tylko w ramach dodatkowej ciekawostki. A na moim Uno R3 kod się nie zawiesza, niezależnie od zastosowanego miksu typów.

Jestem na etapie "nie wierzę, że nie działało". 😛

(edytowany)

Taki tylko przykład, dlaczego nie daje mi spokoju, zostawię na deser:

#include <limits.h>

void setup() {
  Serial.begin(9600);
  
  unsigned long u1 = INT_MAX;
  unsigned long u2 = u1 + 1;
  Serial.println(String("unsigned long: ") + u2 + " - " + u1 + " = " + (u2 - u1));
  int i1 = u1;
  int i2 = u2;
  Serial.println(String("int: ") + i2 + " - " + i1 + " = " + (i2 - i1));

  u1 = ULONG_MAX;
  u2 = u1 - 1000;
  Serial.println(String("Checking difference of ") + u2 + " and " + u1);
  int d = 1000;
  if ((u1 - u2) >= d)
    Serial.println("All good!");

  i1 = u1;
  i2 = u2;
  Serial.println(String("...and converted ") + i2 + " and " + i1);
  if ((i1 - i2) >= d)
    Serial.println("Still good!");
}

void loop() {  
}

Co daje spodziewany wynik:

unsigned long: 32768 - 32767 = 1
int: -32768 - 32767 = 1
Checking difference of 4294966295 and 4294967295
All good!
...and converted -1001 and -1
Still good!

 

Edytowano przez trainee
Dnia 28.07.2022 o 19:48, trainee napisał:

 

Jestem na etapie "nie wierzę, że nie działało". 😛

Otóż nie działało  a ja się zastanawiam czy to mogło wynikać z tego że połączyłem układ z użyciem dwóch GND jeden od strony pinów analog. a drugi od cyfrowych i wtedy gdy typ zmiennej nie był właściwy to indukowało jakiś tajemniczy błąd?

 

Jeszcze jedna rzecz która mnie ciekawi to czy da się wyeliminować taki efekt, że jak wpisuej zmianę koloru diody (dowolnej green,yellow lub blue)

podczas migania czerwonych to one na 0,5 sekundy przestają migać i  tak jakby arduino musi przetrawić tę informacje zapalić lub zgasić podaną diodę a potem migają dalej. Czy to raczej tak już będzie i tego opóźnienia nie da się wyeliminować?

 

No tak nie zauważyłem bo mam swój podobny kod napisany na podstawie tego a ten skopiowałem od kogoś i patrzyłem na swój bez delaya a wgrany miałem ten z delayem więc miło

 

1 godzinę temu, LieutenantDan napisał:

 

podczas migania czerwonych to one na 0,5 sekundy przestają migać i  tak jakby arduino musi przetrawić tę informacje zapalić lub zgasić podaną diodę a potem migają dalej. Czy to raczej tak już będzie i tego opóźnienia nie da się wyeliminować?

 

No to nic nie poradzisz używając delay'a...im szybciej nauczysz się operować millis'em tym lepiej dla Ciebie..nie jest on tak wygodny jak delay, ale co tu porównywać, wystarczy że będziesz chciał migać kilkoma ledami w różnych odstepach i już delay strasznie Ci pokrzyżuje plany, a na millis będzie działać prawidłowo i do tego procek będzie zdychał z nudy...😉

nie nie wszystko git jest poprostu nie zauważyłem tam tego delaya przez tymczasową hipnozę, tak czasami mam,

normalnie wiem że millis lepszy

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...