int maxpix = 1000; // maximálna poloha v pixeloch
int stpx = 16; // lineárna závislosť medzi krokmi a bodmi
int stlf = 205; // množstvo krokov na posunutie o jeden pixelový riadok
byte naTlac[1000]; // alokovaných 1000 bajtov, kde sa budú písať hodnoty
long step = 0; // kroky motora tlačovej hlavy
long tarstep = 0; // cieľová pozícia motora tlačovej hlavy
long printpix = 0; // pixel na tlač
long pixel = 0; // horizontálna poloha v pixeloch
byte pxlnfeed = 0; // má sa posunúť riadok v úrovni pixelov?
long stplnfdamnt = 0; // relatívne množstvo krokov na posuv papiera o riadok
byte val = 0; // hodnota čítaná z array naTlac
byte toprint = 0; // má sa tlačiť? Platí len pre jeden riadok pixelov
long retstep = 0; // kroky návratu tlačovej hlavy
byte printdir = 0; // smer tlače
unsigned int clearing = 0;
const byte pins[8] = {6, 7, 8, 9, 10, 11, 12, 13}; //pins for bit outputs, in bit order
const byte Numpins = sizeof(pins);
void setup() {
pinMode(2, OUTPUT); // stepper 1 dir
pinMode(3, OUTPUT); // stepper 1 step
pinMode(4, OUTPUT); // stepper 2 step
pinMode(5, INPUT_PULLUP); // koncový kalibračný spínač
for (int pinNum = 0; pinNum < Numpins; pinNum++) {
pinMode(pins[pinNum], OUTPUT); //writes a 1 to a pin that is a zero in the received byte
}
Serial.begin(9600);
Serial.println(); // tento riadok môžete vynechať
//shlulls();
for (int v = 0; v < maxpix - 1; v = v + 1) { //This will clear pixels 0 -> 998 - is that the intent? Pixel 999(i.e. the 1000th pixel, is untouched)
naTlac[v] = 0;
}
}
void loop() {
if (Serial.available()) {
naTlac[printpix] = Serial.read();
printpix = printpix + 1;
}
if (printpix >= maxpix) {
Serial.write(0x13);
printpix = 0;
toprint = 1;
}
if (toprint == 1 && printdir == 0) stepMovePrint();
if (toprint == 1 && printdir == 1) stepMovePrintReverse();
while (clearing < maxpix) {
naTlac[clearing] = 0;
clearing = clearing + 1;
}
}
void stepMovePrint() { // tlačenie jedného riadku
tarstep = pixel * stpx;
digitalWrite(2, LOW);
if (toprint == 1) {
while (pixel < maxpix) {
tarstep = pixel * stpx;
val = naTlac[pixel];
while (tarstep > step) {
tarstep = pixel * stpx;
digitalWrite(3, HIGH);
delayMicroseconds(40);
digitalWrite(3, LOW);
delayMicroseconds(40);
if (tarstep - step <= stpx - 10) {
for (int pinNum = 0; pinNum < Numpins; pinNum++) {
digitalWrite(pins[pinNum], LOW); //writes a 1 to a pin that is a zero in the received byte
}
}
else prhdwt();
step = step + 1;
}
if (tarstep <= step) pixel = pixel + 1;
}
}
toprint = 0;
digitalWrite(5, LOW);
printdir = 1;
stepLinefeed();
}
void stepLinefeed() {
stplnfdamnt = stlf;
while (stplnfdamnt >= 1) {
digitalWrite(4, HIGH);
delayMicroseconds(100);
digitalWrite(4, LOW);
delayMicroseconds(100);
stplnfdamnt = stplnfdamnt - 1;
}
printpix = 0;
clearing = 0;
for (int i = 0; i < maxpix; i = i + 1) naTlac[i] = 0;
Serial.write(0x11);
}
void stepMovePrintReverse() { // tlačenie jedného riadku
tarstep = pixel * stpx;
digitalWrite(2, HIGH);
if (toprint == 1) {
while (pixel >= 0) {
tarstep = pixel * stpx;
if (pixel > -1) val = naTlac[pixel];
if (pixel == -1) val = naTlac[0];
while (tarstep < step) {
tarstep = pixel * stpx;
digitalWrite(3, HIGH);
delayMicroseconds(40);
digitalWrite(3, LOW);
delayMicroseconds(40);
if (step - tarstep <= stpx - 10) {
for (int pinNum = 0; pinNum < Numpins; pinNum++) {
digitalWrite(pins[pinNum], LOW); //writes a 1 to a pin that is a zero in the received byte
}
}
else prhdwt();
step = step - 1;
}
if (tarstep >= step) pixel = pixel - 1;
}
}
digitalWrite(5, LOW);
toprint = 0;
printdir = 0;
stepLinefeed();
}
void shlulls() {
digitalWrite(2, HIGH);
while (digitalRead(6) == HIGH) {
digitalWrite(3, HIGH);
delayMicroseconds(2500);
digitalWrite(3, LOW);
delayMicroseconds(2500);
}
tarstep = 0;
step = 0;
pixel = 0;
printpix = 0;
while (step <= 400) {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delayMicroseconds(250);
digitalWrite(3, LOW);
delayMicroseconds(250);
step = step + 1;
}
}
void prhdwt() { /* Print head write (writes a byte to the whole printhead) */
byte num1 = ~naTlac[pixel];
for (int pinNum = 0; pinNum < Numpins; pinNum++ ) {
digitalWrite(pins[pinNum], num1 & 0b00000001); //writes a 1 to a pin that is a zero in the received byte
num1 = num1 >> 1;
}
}
Homing switch
Line feed
Carriage move