Byte auswerten und vergleichen

Hallo Forum,
ich benutze eine Receiver Bibliothek um 433 Mhz Signale auszuwerten, das gelingt mir auch sehr gut. Nun habe ich aber mit einem Stück Programmcode einige Probleme:

 byte channel, randomId;
    int temp;
    short int humidity;
    // Decode the data
    SensorReceiver::decodeThermoHygro(data, channel, randomId, temp, humidity);
Serial.print(channel);

Der Code an sich haut tadellos hin! Aber Das "Serial.print(channel) liefert mir direkt die Werte 1,2,3 oder 4. Wenn ich nun

if (channel == 4)
{
}

nutze hängt sich das Programm auf. Das denke ich liegt am Fakt das Channel ein Byte ist, oder? Wie kann ich das Problem lösen?
Habe es schon mit:

if((channel,DEC)==4)
{
}

testet, dann springt er nicht in die Schleife.
mfg
Balli

Der code Schnipsel, den du gepostet hast, erklärt nicht viel.

Ich rate mal, dass die SensorReceiver::decodeThermoHygro() parameter als Referenz definiert sind, so dass sie von der Funktion beschrieben werden können.

Das denke ich liegt am Fakt das Channel ein Byte ist, oder? Wie kann ich das Problem lösen?

Nö, du kannst problemlos ein byte auf == 4 testen.
Was du evtl meinst ist
if ( (int)channel == 4)  { }
um den Compiler zu bewegen, channel als int zu behandeln. Aber, daran liegt's sicher nicht.

Zum Verständnis kannst du es aber auch einfacher machen:

void setup()
{
 byte channel;

 Serial.begin(57600); // irgendwas passendes 
 channel = 4;

 Serial.print(channel);
 if (channel == 4)
 {
   Serial.println ("  ... ??? geht doch");
 }

 if ( (channel,DEC) == 4 )
 {
   // erstaunlich dass das keinen Fehler liefert
 } 
 else
 {
    Serial.println(  (channel,DEC), HEX ) ; // mal sehen was das gibt
 }
}
void loop() {}

Das sollte problemlos laufen ( Hab grad meinen Arduino nicht frei )

Hi,
vielen dank also was klappt ist:

if((int)channel == 4)
{
//klappt
}

der Rest leider nicht, warum auch immer-liegt mit Sicherheit an der Funktionsübergabe oder an einer Laune meines Boards.
mfg
Balli
p.s. vielen Dank

Für`s Protokoll:

Das Komma in

 if ( (channel,DEC) == 4 )

ist ein anderes Komma als das welches bei Funktionen und Methoden als Parametertrenner fungiert.
(channel,DEC) wertet zunächst channel aus und dann DEC. Das Ergebnis ist der Wert von DEC, also 10. Der ist immer != 4 weshalb der IF Zweig nie durchlaufen wird.

An was es "mit Sicherheit" liegt weisst Du jedenfalls nicht. Sonst hättest Du den Fehler schon beseitigen können.
Wenn Du nicht Deinen vollständigen Code postest wird Dir keine sagen können was Du falsch machst.

Hi,
vielen Dank für die DEC-Aufklärung. Mit dem

if((int)channel==4)

klappt das ja jetzt alles wunderbar, nur eben die anderen Ideen nicht. Sobald ich also ein Cast auf int mache, funktioniert das ganze.
mfg
Balli

(channel,DEC) wertet zunächst channel aus und dann DEC. Das Ergebnis ist der Wert von DEC

Danke!

Da kenne ich seit 25 Jahren c und seit 15 C++, und bin inzwischen so von Java und C# verwöhnt, dass ich total verdrängt habe, was für ein Unsinn in c alles syntaktisch richtig ist.

Ganz abgesehen davon, dass
** **const long hour = 60*60*1000;** **
dem Arduino-Compiler offensichtlich klammheimliche Freude (dem zeig ich's jetzt aber mal - nicht) bereitet.

Andere Compiler warnen mich sogar bei if (i = 0) {/* warum nur komm ich nie hierhin ?! */ }

Als ob mit Java die Welt soviel besser wäre. Da findet der Unsinn nur an anderen Stellen statt.