Caracteres Speacial

zero as a naked constant is kind of a special value in C because it can be interpreted as different things.
It could be pointer or a numeric value.
It has been the cause of many colorful discussions through several decades.

In this case the way the Arduino Print class is defined in Print.h there are three versions of write()

- write(uint8_t); // takes a numeric byte value
- write(const uint8_t *buffer, size_t size); // takes a pointer to a buffer and its length
- write(const char *str); // takes a pointer to a C string

So the problem is that since zero is special and can be either a number or a pointer, the
compiler has no way of knowing which version of the write() function you wanted to call.
It could be the write() that takes a byte value or it could be the write() that takes a pointer.

Just my opinion but I think the 3rd definition should not exist. It isn't necessary since
there is a print() function to handle C strings.
Eliminating this extra write function would clear up the issue.

Anyway, to work within the current environment,
the easiest thing to do is to always cast the value into your intended type so that that the compiler will
deal with the value as you intended.

i.e.

lcd.write((byte) value);

This explicit cast tells the compiler that "value" is a byte value (really an unsigned char) so that
there is no confusion.

This will allow using the naked constant 0 to work.
i.e.

lcd.write((byte) 0);

--- bill