Comunicación de arduino con miniprinter

Hola a todos, soy nuevo en el foro y apenas estoy aprendiendo sobre arduino.
He intentado comunicar a un arduino con una miniprinter por comunicación serial y la impresora si ha respondido, mi problema comenzó cuando mande imprimir y la miniprinter no tenia papel y aun así manda la impresión.

Mi pregunta es si ustedes saben y me pueden ayudar con este problema, la miniprinter tiene sensores de papel y la comunicación que tiene es rs232, estoy utilizando un max232 para comunicarlo con arduino y la única idea que se me ocurre es que la impresora debería de mandarme algún tipo de dato cuando los sensores detectan o no papel, pero no he logrado capturar ese dato.

aqui esta el codigo:

#include <SoftwareSerial.h> 

void setup()
{
  Serial.begin(9600);
  impresora.begin(9600); 
}

void loop()
{
impresora.listen();

           if (impresora.isListening()) 
            {
                Serial.println("Prueba de impresion");
            }
delay(5000);
}

y para intentar capturar el dato utilice este codigo:

int c;

 if(impresora.available() > 0) 
{
   c= impresora.read();
}
 else
{ 
   c = 0;
}

Este ultimo codigo lo puse en varias partes del codogo para ver si en algun momento me daba alguna respuesta la miniprinter.

Bueno, espero haber sido claro con mi duda y ojala me puedan ayudar.

Lo normal, es que la impresora detecte que no tiene papel y no imprima. No es habitual que ese control lo haga un dispositivo externo. Yo he estado como unos 12 años reparando impresoras, y ese comportamiento no lo he visto nunca, a excepción de que el sensor de papel esté averiado o enganchado con algún trozo de papel.

Repito. Nunca he visto una impresora que, envíe la señal de que no tiene papel, al dispositivo que le envía los datos a imprimir, para que este no imprima. Como mucho, la impresora envía una señal, para que el dispositivo sepa que no puede aceptar más datos en el buffer, pero no para que le diga que no tiene que imprimir. Es la impresora la que debe evitar la impresión si no hay papel, para evitar daños en el rodillo, si es de agujas, o suciedad si es de inyección de tinta. Las laser ni las nombro, porque sería todo un sinsentido.

carmeloco:
Nunca he visto una impresora que, envíe la señal de que no tiene papel, al dispositivo que le envía los datos a imprimir, para que este no imprima.

Las impresoras con interface Centronics (Paralelo) si señalizan Paper Out por el pin 12 (también Select (que informa de si la impresora está en linea) mediante el pin 13), y de esta manera los programas podían avisar de impresora sin papel . Otro tipo de impresoras con comunicación bidireccional (como USB, IP), también lo hacen mandando mensajes propios. Eso si, en RS232 no hay señal que indique Paper Out, ahí si que se usaban las señales DTR, CTS, RTS, etc... para controlar el estado de la impresora (Impresora no preparada) que podía ser Offline, sin papel, fallo, etc, pero sin poder identificar cual de los estados.

Tal vez te he resuelto el problema. Lee el artículo completo

Alguien envió ESC v

Serial2.write(27);
Serial2.write(118);

ahora no me queda claro si envio ESC v n donde n puedes ser cualquier cosa pero debe usarse.

finalmente recibió el siguiente mensaje
0b100000 si la impresora esta READY TO PRINT Lista para imprimir
0b101000 si el papel esta Ok y

Mira este comentario del foro Adafruit justamente de una Miniprinter y de alguien que busca lo mismo que tu, leer el estatus.
Aparentemente si envias esc v recibes en respuesta el estatus y el 4 bit indica paper OK = 1 o paper bad = 0

First it's inconsistent in that it refers to "esc v" and "esc v n" in different places, but "n" is never defined. However, I've run a test sketch sending n from 0 to 255, and found that it does not matter what n is, but you have to send the n or the printer won't do anything as it waits for that last byte.

Second, I've found through experimenting that where I thought it was responding with a 'space' it was actually sending a single byte of data that only happened to be Dec 32 - space.

In binary, 0b100000 is returned when the printer is ready to print. Take away the paper and it changes to 0b100100, so the 4's column is paper status, good=0 and bad=1.

I've tried varying the input voltage a little, but that did not change the status at all. Nor did changing the temperature. I know the printer has this info in it, as it prints it on the testpage! But it's not returning the data like it shows in the manual.

Still, at least there's a way to get the paper status out of it.

Asking for the auto-status does appear to work, but returns slightly different data. As per the manual I'm turning auto status on by sending 29, 97, 4. In this case, the printer immediately responds with a '0' (all good) then if I remove the paper I get a '0b100', so the auto-status reports do not include the 0x100000 bit, whatever that means.