// current image is testimg . Replace with image data of your choosing. Image must be one byte per pixel, where black pixel is 1 and white pixel is 0.
#include "ulozisko.h"
int line = 0;
int count = 0;
int dot = 0;
float bod = 0;
byte ready = 0;
byte maxcount = 90;
int bodoff2 = 30;
int bodoff3 = 60;
int bodoff4 = 90;
int bodoff5 = 120;
int bodoff6 = 150;
int bodoff7 = 180;
int bodoff8 = 210;
int totoff2 = 0;
int totoff3 = 0;
int totoff4 = 0;
int totoff5 = 0;
int totoff6 = 0;
int totoff7 = 0;
int totoff8 = 0;
int truoff1 = 0;
int truoff2 = 0;
int truoff3 = 0;
int truoff4 = 0;
int truoff5 = 0;
int truoff6 = 0;
int truoff7 = 0;
int truoff8 = 0;
int row = 0;
byte val = 0;
void setup() {
pinMode(2, INPUT); // line
pinMode(3, INPUT); // collumn
pinMode(4, OUTPUT); // leftmost needle
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT); // rightmost needle
pinMode(12, OUTPUT); // motor pin
attachInterrupt(digitalPinToInterrupt(2), skuska, RISING);
attachInterrupt(digitalPinToInterrupt(3), skuska2, CHANGE);
Serial.begin(115200);
digitalWrite(12, HIGH);
line = 0;
}
void skuska() {
if (ready == 1) {
line = line + 1;
}
if (ready == 0) {
ready = 1;
}
count = 0;
bod = 0;
dot = 0;
if(line > 7) {
row = row + 1;
line = 0;
}
if(row >= 12) {row = 0; line = 0;}
}
void skuska2() {
if (count < maxcount && ready == 1) {
count = count + 1;
} else if(ready == 0) {count = 0;}
else if (count >= maxcount) {
count = maxcount;
}
if((!(count % 3)) && ready == 1) {
Serial.print(line);
Serial.print(" ");
Serial.print(row);
Serial.print(" ");
Serial.println(truoff1);
}
}
void loop() {
bod = count / 3.00;
dot = count / 3;
if(dot >= 30) {dot = 29;}
totoff2 = dot + bodoff2;
totoff3 = dot + bodoff3;
totoff4 = dot + bodoff4;
totoff5 = dot + bodoff5;
totoff6 = dot + bodoff6;
totoff7 = dot + bodoff7;
totoff8 = dot + bodoff8;
truoff1 = dot + (240 * row);
truoff2 = totoff2 + (240 * row);
truoff3 = totoff3 + (240 * row);
truoff4 = totoff4 + (240 * row);
truoff5 = totoff5 + (240 * row);
truoff6 = totoff6 + (240 * row);
truoff7 = totoff7 + (240 * row);
truoff8 = totoff8 + (240 * row);
val = (((pgm_read_byte(&testarr[truoff1])) >> line) & 1) + (2 * (((pgm_read_byte(&testarr[truoff2])) >> line) & 1)) + (4 * (((pgm_read_byte(&testarr[truoff3])) >> line) & 1)) + (8 * (((pgm_read_byte(&testarr[truoff4])) >> line) & 1)) + (16 * (((pgm_read_byte(&testarr[truoff5])) >> line) & 1)) + (32 * (((pgm_read_byte(&testarr[truoff6])) >> line) & 1)) + (64 * (((pgm_read_byte(&testarr[truoff7])) >> line) & 1)) + (128 * (((pgm_read_byte(&testarr[truoff8])) >> line) & 1)) ;
if(ready == 0) {val = 0;}
// (((pgm_read_byte(&testarr[truoff1])) >> line) & 1)
if (bod - dot < 0.2 || ready == 1) { // don't forget to change || to &&
digitalWrite(4, (val & 1));
digitalWrite(5, (val & 2));
digitalWrite(6, (val & 4));
digitalWrite(7, (val & 8));
digitalWrite(8, (val & 16));
digitalWrite(9, (val & 32));
digitalWrite(10, (val & 64));
digitalWrite(11, (val & 128));
} else {
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if(line > 98) {
val = 0;
ready == 0;
delay(500);
line = 0;
}
}