diff --git a/Adafruit_Thermal.cpp b/Adafruit_Thermal.cpp index 6552206..556cfa9 100644 --- a/Adafruit_Thermal.cpp +++ b/Adafruit_Thermal.cpp @@ -81,11 +81,13 @@ void Adafruit_Thermal::timeoutSet(unsigned long x) { // This function waits (if necessary) for the prior task to complete. void Adafruit_Thermal::timeoutWait() { if (dtrEnabled) { - while (digitalRead(dtrPin) == HIGH) - ; + while (digitalRead(dtrPin) == HIGH) { + yield(); + }; } else { - while ((long)(micros() - resumeTime) < 0L) - ; // (syntax is rollover-proof) + while ((long)(micros() - resumeTime) < 0L) { + yield(); + }; // (syntax is rollover-proof) } } @@ -163,12 +165,6 @@ size_t Adafruit_Thermal::write(uint8_t c) { return 1; } -/*! - @def printDensity - Printing density, default: 100% (? can go higher, text is darker but fuzzy) - @def printBreakTime - Printing break time. Default: 500 uS -*/ void Adafruit_Thermal::begin(uint16_t version) { firmware = version; @@ -183,20 +179,6 @@ void Adafruit_Thermal::begin(uint16_t version) { setHeatConfig(); - // Print density description from manual: - // DC2 # n Set printing density - // D4..D0 of n is used to set the printing density. Density is - // 50% + 5% * n(D4-D0) printing density. - // D7..D5 of n is used to set the printing break time. Break time - // is n(D7-D5)*250us. - // (Unsure of the default value for either -- not documented) - -#define printDensity 10 - -#define printBreakTime 2 - - writeBytes(ASCII_DC2, '#', (printBreakTime << 5) | printDensity); - // Enable DTR pin if requested if (dtrPin < 255) { pinMode(dtrPin, INPUT_PULLUP); @@ -456,6 +438,17 @@ void Adafruit_Thermal::setHeatConfig(uint8_t dots, uint8_t time, writeBytes(dots, time, interval); // Heating dots, heat time, heat interval } +// Print density description from manual: +// DC2 # n Set printing density +// D4..D0 of n is used to set the printing density. Density is +// 50% + 5% * n(D4-D0) printing density. +// D7..D5 of n is used to set the printing break time. Break time +// is n(D7-D5)*250us. +// (Unsure of the default value for either -- not documented) +void Adafruit_Thermal::setPrintDensity(uint8_t density, uint8_t breakTime) { + writeBytes(ASCII_DC2, '#', (density << 5) | breakTime); +} + // Underlines of different weights can be produced: // 0 - no underline // 1 - normal underline diff --git a/Adafruit_Thermal.h b/Adafruit_Thermal.h index 30157e0..e98fb6e 100644 --- a/Adafruit_Thermal.h +++ b/Adafruit_Thermal.h @@ -259,6 +259,12 @@ class Adafruit_Thermal : public Print { * @param interval heating interval, 10 us per increment */ setHeatConfig(uint8_t dots=11, uint8_t time=120, uint8_t interval=40), + /*! + * @brief Sets print density + * @param density printing density + * @param breakTime printing break time + */ + setPrintDensity(uint8_t density=10, uint8_t breakTime=2), /*! * @brief Puts the printer into a low-energy state immediately */