Étape 4: Imprimante série
J’ai utilisé Serial1 sur le Mega pour parler à l’imprimante, les éléments pertinents du code sont :
Serial1.Begin(19200) ;
J’ai plusieurs méthodes d’assistance pour exécuter l’imprimante et imprimer des images, etc. :
La plupart du temps je viens d’écrire sur le port série comme ceci :
Serial1.Print (« Moosetar dit : prenez garde! ") ;
Pour l’impression d’images j’ai procédez comme suit :
printBitmap (moose_outline_width, moose_outline_height, moose_outline_data, true) ;
et inclure les données dans un fichier .h. Plus d’informations sur la façon de le faire peuvent être trouvés ici http://learn.adafruit.com/mini-thermal-receipt-printer/bitmap-printing
Quel puis prendre les d’imprimé par l’imprimeur. J’ai trouvé des méthodes d’assistance dans la bibliothèque de Lady Ada. Parce que j’utilisais matériel série j’ai eu quelques problèmes avec son code, mais j’ai changé et inclus dans l’esquisse. Voici les méthodes pertinentes.
Sub writePrintMode()
{
Serial.println(printMode) ;
Serial1.Write(27) ;
Serial1.Write(33) ;
Serial1.Write(printMode) ;
}
void setPrintMode (masque uint8_t) {}
printMode | = masque ;
writePrintMode() ;
charHeight = (printMode & DOUBLE_HEIGHT_MASK) ? 24:48 ;
maxColumn = (printMode & DOUBLE_WIDTH_MASK) ? 16:32 ;
}
Sub 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) ;
}
Sub unsetPrintMode(uint8_t mask)
{
printMode & = ~ masque ;
writePrintMode() ;
}
Sub printerLineFeed(int lines)
{
pour (int i = 0; i < lignes; 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 b, uint8_t c, uint8_t d) {}
Serial1.Write(a) ;
Serial1.Write(b) ;
Serial1.Write(c) ;
Serial1.Write(d) ;
Delay(300) ;
}
void printBitmap(Stream *stream) {}
uint8_t tmp ;
uint16_t largeur, hauteur ;
tmp = stream -> read() ;
largeur = (flux -> read() << 8) + tmp ;
tmp = stream -> read() ;
hauteur = (flux -> read() << 8) + tmp ;
printBitmap (largeur, hauteur, stream) ;
}
void printBitmap (int w, int h, Stream * stream) {}
int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i, c ;
rowBytes = (w + 7) / 8 ; Arrondir à la prochaine limite octets
rowBytesClipped = (rowBytes > = 48) ? 48 : rowBytes ; 384 pixels de large max
pour (rowStart = 0; rowStart < h; rowStart += 255) {}
Délivre jusqu'à 255 lignes à la fois :
chunkHeight = h - rowStart ;
Si chunkHeight (chunkHeight > 255) = 255 ;
writeBytes (18, 42, chunkHeight, rowBytesClipped) ;
pour (y = 0; y < chunkHeight; y ++) {}
pour (x = 0; x < rowBytesClipped; x ++) {}
tandis que ((c = stream -> Read < 0) ;
Serial1.Write((uint8_t)c) ;
}
pour (i = rowBytes - rowBytesClipped ; j’ai > 0; i--) {}
tandis que ((c = stream -> Read < 0) ;
}
}
timeoutSet(chunkHeight * dotPrintTime) ;
}
prevByte = « \n » ;
}
Sub printBitmap)
int w, int h, const uint8_t * bitmap, bool fromProgMem) {}
int rowBytes, rowBytesClipped, rowStart, chunkHeight, x, y, i ;
rowBytes = (w + 7) / 8 ; Arrondir à la prochaine limite octets
rowBytesClipped = (rowBytes > = 48) ? 48 : rowBytes ; 384 pixels de large max
pour (i = rowStart = 0; rowStart < h; rowStart += 255) {}
Délivre jusqu'à 255 lignes à la fois :
chunkHeight = h - rowStart ;
Si chunkHeight (chunkHeight > 255) = 255 ;
writeBytes (18, 42, chunkHeight, rowBytesClipped) ;
pour (y = 0; y < chunkHeight; y ++) {}
pour (x = 0; x < rowBytesClipped; x ++, i ++) {}
Serial1.Write (fromProgMem? pgm_read_byte (bitmap + i): *(bitmap+i)) ;
}
J’ai += rowBytes - rowBytesClipped ;
}
timeoutSet(chunkHeight * dotPrintTime) ;
}
prevByte = « \n » ;
}