confronto con NULL

Ciao a tutti sicuramente questo argomento sarà già stato trattato ma io non sono riuscito a trovare quello che mi interessa, se ci sono altri post cortesemente indicatemi il link, vi spiego, dovendo acquisire i valori dei pin di input da seriale la mia funzione prevede se e solo se il valore non è nullo lo scrive in seriale, ma ho un problema, per arduino sembra essere la stessa cosa NULL e lo zero, quindi se vado a leggere da un pin digitale se il valore del pin è 1 tutto ok mi stampa il risultato sulla seriale, ma se il valore è zero allora non lo stampa, in quanto io ho predisposto nel programma questa riga

valore = digitalRead(pin);
if (valore != NULL)
{
    Serial.println(valore);
}

a quanto pare se il valore di lettura del pin digitale è uguale a zero per il software sembra essere la stessa cosa che NULL e quindi non stampa.

Mi aiutate a risolvere?
Grazie

è che un pin digitale può avere solo 2 valori.... +5V e 0V che vengono identificati con HIGH e LOW oppure 1 o 0 non esiste comunque il valore null come lo intendi tu ed evidentemente a null è stato dato il valore di zero

ciao...per come la vedo io in questo caso non ha senso fare il confronto con NULL...pensa un attimo...le luci di una stanza posso essere : accese -> 1 o spente -> 0...non "inesistenti".
NULL ti serve, per esempio, per verificare se ad un puntatore è stato assegnato un indirizzo o meno...di conseguenza puoi verificare se un Oggetto esiste o no.

diciamo che NULL, che è una costante, esprime si un "valore" che è 0, e quindi quell'if ti funziona, ma sempre ragionando ai puntatori...questo, per avere un senso, non può puntare all'indirizzo 0.

Quel pezzo di codice è un esempio di quello che devo fare è normale che in quel contesto non serve a nulla, però il mio scopo è quello, io con python posso fare un confronto con NULL che è diverso da fare il confronto con zero, quindi avevo pensato che fosse stato possibile farlo anche con arduino, quindi la mia domanda resta sempre la stessa, si può distinguere NULL da zero?

Grazie

no, qui vale 0

però vale il discorso di orso...

ORSO2001:
ciao...per come la vedo io in questo caso non ha senso fare il confronto con NULL...pensa un attimo...le luci di una stanza posso essere : accese -> 1 o spente -> 0...non "inesistenti".
NULL ti serve, per esempio, per verificare se ad un puntatore è stato assegnato un indirizzo o meno...di conseguenza puoi verificare se un Oggetto esiste o no.

diciamo che NULL, che è una costante, esprime si un "valore" che è 0, e quindi quell'if ti funziona, ma sempre ragionando ai puntatori...questo, per avere un senso, non può puntare all'indirizzo 0.

Non vorrei sparare una vacc-ata ma in python, che è un linguaggio non tipizzato, funziona un po' diversamente da C/C++ che sono tipizzati... In python ogni variabile la puoi considerare come un Oggetto...od un puntatore ad esso...quindi fare un confronto con NULL sulle "variabili" può avere senso.

Non riesco a capire la domanda: digitalRead può rispondere solo 0 o 1, non ci sono altre possibilità!

digitalRead() ritorna un intero.

Un intero è sempre un intero, non può essere NULL.

In Python al massimo puoi verificare che una funzione non ritorni None, ma questo non implica che in C tu possa sempre fare altrettanto.

Più che un intero, ritorna un singolo bit, che può essere 0 o 1.

vinny74:
a quanto pare se il valore di lettura del pin digitale è uguale a zero per il software sembra essere la stessa cosa che NULL e quindi non stampa.

Scusa, ti hanno già spiegato, ma per curiosità: per te leggere NULL da un pin digitale a quale condizione dovrebbe corrispondere?

giusto per essere precisi...la funzione digitalRead() è così scritta:

int digitalRead(uint8_t pin)
{
	uint8_t timer = digitalPinToTimer(pin);
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);

	if (port == NOT_A_PIN) return LOW;

	// If the pin that support PWM output, we need to turn it off
	// before getting a digital reading.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);

	if (*portInputRegister(port) & bit) return HIGH;
	return LOW;
}

quindi ritorna una int e LOW ed HIGH sono definiti come 0x00 ed 0x01...