Stap 4: Seriële Printer
Ik gebruikte Serial1 op de Mega om te praten met de printer, de relevante stukken code zijn:
Serial1.begin(19200);
Ik heb verschillende helper methodes te lopen van de printer en afdrukken van de beelden, enz:
Voor het grootste deel gewoon ik op de seriële poort als volgt:
Serial1.Print ("Moosetar zegt: pas op!");
Voor afdrukken beelden doen ik dit:
printBitmap (moose_outline_width, moose_outline_height, moose_outline_data, true);
en omvatten de gegevens als een .h bestand. Meer informatie over hoe dit te doen kan hier gevonden worden http://learn.adafruit.com/mini-thermal-receipt-printer/bitmap-printing
Welke dan krijgen de gedrukt door de printer. Ik vond sommige helper methodes in Lady Ada's bibliotheek. Omdat ik was met behulp van hardware seriële ik had wat problemen met haar code, maar ik veranderde hen en hen opgenomen in de schets. Hier zijn de relevante methoden.
VOID writePrintMode()
{
Serial.println(printMode);
Serial1.write(27);
Serial1.write(33);
Serial1.write(printMode);
}
VOID setPrintMode (uint8_t masker) {}
printMode | = masker;
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 & = ~ maskeren;
writePrintMode();
}
VOID printerLineFeed(int lines)
{
for (int i = 0; ik < regels; 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 uint8_t c) {}
Serial1.write(a);
Serial1.write(b);
Serial1.write(c);
delay(300);
}
VOID writeBytes (uint8_t a, uint8_t uint8_t c, b, uint8_t d) {}
Serial1.write(a);
Serial1.write(b);
Serial1.write(c);
Serial1.write(d);
delay(300);
}
ongeldig printBitmap(Stream *stream) {}
uint8_t tmp;
uint16_t breedte, hoogte;
tmp = stream -> read();
breedte = (stream -> read() << 8) + tmp;
tmp = stream -> read();
hoogte = (stream -> read() << 8) + tmp;
printBitmap (breedte, hoogte, stream);
}
VOID printBitmap (int w, h, int streamen * stream) {}
int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i, c;
rowBytes = (w + 7) / 8; Naar boven afronden op volgende byte grens
rowBytesClipped = (rowBytes > = 48)? 48: rowBytes; 384 pixels max breedte
voor (rowStart = 0; rowStart < h; rowStart += 255) {}
Geef maximaal 255 rijen tegelijk:
chunkHeight = h - rowStart;
Als (chunkHeight > 255) chunkHeight = 255;
writeBytes (18, 42, chunkHeight, rowBytesClipped);
voor (y = 0; y < chunkHeight; y ++) {}
voor (x = 0; x < rowBytesClipped; x ++) {}
terwijl ((c = stream -> read()) < 0);
Serial1.write((uint8_t)c);
}
voor (ik = rowBytes - rowBytesClipped; ik > 0; ik--) {}
terwijl ((c = stream -> read()) < 0);
}
}
timeoutSet(chunkHeight * dotPrintTime);
}
prevByte = '\n';
}
VOID printBitmap)
int w, int h, const uint8_t * bitmap, bool fromProgMem) {}
int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i;
rowBytes = (w + 7) / 8; Naar boven afronden op volgende byte grens
rowBytesClipped = (rowBytes > = 48)? 48: rowBytes; 384 pixels max breedte
voor (ik = rowStart = 0; rowStart < h; rowStart += 255) {}
Geef maximaal 255 rijen tegelijk:
chunkHeight = h - rowStart;
Als (chunkHeight > 255) chunkHeight = 255;
writeBytes (18, 42, chunkHeight, rowBytesClipped);
voor (y = 0; y < chunkHeight; y ++) {}
voor (x = 0; x < rowBytesClipped; x ++, i ++) {}
Serial1.write (fromProgMem? pgm_read_byte (bitmap + i): *(bitmap+i));
}
Ik += rowBytes - rowBytesClipped;
}
timeoutSet(chunkHeight * dotPrintTime);
}
prevByte = '\n';
}