Paso 4: Impresora Serial
Usé Serial1 en la Mega para hablar con la impresora, las piezas relevantes del código son:
Serial1.Begin(19200);
Tengo varios métodos para ejecutar la impresora e imprimir imágenes, etc.:
En su mayor parte a escribir al puerto serie como esta:
Serial1.Print («Moosetar dice: ¡ cuidado! ");
Para imprimir imágenes hago esto:
printBitmap (moose_outline_width, moose_outline_height, moose_outline_data, true);
y los datos como un archivo .h. Más información sobre cómo hacerlo se puede encontrar aquí http://learn.adafruit.com/mini-thermal-receipt-printer/bitmap-printing
Que conseguir luego de impresa por la impresora. He encontrado algunos métodos auxiliares en la biblioteca de la señora Ada. Porque yo estaba usando hardware serial tuve algunos problemas con su código, pero cambiado y había incluido en el bosquejo. Aquí están los métodos pertinentes.
void writePrintMode()
{
Serial.println(printMode);
Serial1.Write(27);
Serial1.Write(33);
Serial1.Write(printMode);
}
void setPrintMode (uint8_t máscara) {}
printMode | = máscara;
writePrintMode();
¿charheight = (printMode & DOUBLE_HEIGHT_MASK)? 24:48;
¿MaxColumn = (printMode & DOUBLE_WIDTH_MASK)? 16:32;
}
void setNormalMode()
{
printMode = 0;
writePrintMode();
Serial1.Write(27);
Serial1.Write(45);
Serial1.Write(Zero);
Serial1.Write(27);
Serial1.Write(32);
Serial1.Write(Zero);
Serial1.Write(29);
Serial1.Write(33);
Serial1.Write(Zero);
}
void unsetPrintMode(uint8_t mask)
{
printMode & = ~ máscara;
writePrintMode();
}
void printerLineFeed(int lines)
{
para (int i = 0; i < líneas; i ++)
{
Serial1.Write(10);
}
}
void writeBytes(uint8_t a) {}
Serial1.Write(a);
}
void writeBytes (uint8_t a, uint8_t b) {}
Serial1.Write(a);
Serial1.Write(b);
Delay(300);
}
void writeBytes (uint8_t a, uint8_t b, c) {uint8_t
Serial1.Write(a);
Serial1.Write(b);
Serial1.Write(c);
Delay(300);
}
void writeBytes (uint8_t a, uint8_t b, uint8_t c, d) {uint8_t
Serial1.Write(a);
Serial1.Write(b);
Serial1.Write(c);
Serial1.Write(d);
Delay(300);
}
void printBitmap(Stream *stream) {}
tmp de uint8_t;
uint16_t ancho, alto;
tmp = corriente -> read();
ancho = (corriente -> read() << 8) + tmp;
tmp = corriente -> read();
altura = (corriente -> read() << 8) + tmp;
printBitmap (anchura, altura, secuencia);
}
void printBitmap (int w, int h, corriente * stream) {}
int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i, c;
rowBytes = (w + 7) / 8; Redondear al siguiente límite de bytes
¿rowbytesclipped = (rowBytes > = 48)? 48: rowBytes; anchura máxima 384 píxeles
para (rowStart = 0; rowStart < h; rowStart += 255) {}
Emitir hasta 255 filas a la vez:
chunkHeight = h - rowStart;
Si chunkHeight (chunkHeight > 255) = 255;
writeBytes (18, 42, chunkHeight, rowBytesClipped);
para (y = 0; y < chunkHeight; y ++) {}
para (x = 0; x < rowBytesClipped; x ++) {}
mientras que ((c = corriente -> read()) < 0);
Serial1.Write((uint8_t)c);
}
para (i = rowBytes - rowBytesClipped; i > 0; i--) {}
mientras que ((c = corriente -> read()) < 0);
}
}
timeoutSet(chunkHeight * dotPrintTime);
}
prevByte = '\n';
}
void printBitmap)
int w, int h, uint8_t const * mapa de bits, bool fromProgMem) {}
int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i;
rowBytes = (w + 7) / 8; Redondear al siguiente límite de bytes
¿rowbytesclipped = (rowBytes > = 48)? 48: rowBytes; anchura máxima 384 píxeles
para (i = rowStart = 0; rowStart < h; rowStart += 255) {}
Emitir hasta 255 filas a la vez:
chunkHeight = h - rowStart;
Si chunkHeight (chunkHeight > 255) = 255;
writeBytes (18, 42, chunkHeight, rowBytesClipped);
para (y = 0; y < chunkHeight; y ++) {}
para (x = 0; x < rowBytesClipped; x ++, i ++) {}
Serial1.Write (fromProgMem? pgm_read_byte (mapa de bits + i): *(bitmap+i));
}
i += rowBytes - rowBytesClipped;
}
timeoutSet(chunkHeight * dotPrintTime);
}
prevByte = '\n';
}