2023-02-08 19:17:58 +00:00
# include "image.h"
Image : : Image ( )
{
}
2023-02-11 17:26:52 +00:00
void Image : : serialPrintInt ( uint16_t source )
{
for ( uint8_t i = 0 ; i < 16 ; i + + )
Serial . print ( ( source & ( 1 < < i ) ) > 0 ) ;
}
2023-02-08 19:17:58 +00:00
void Image : : init ( )
{
flipdot . init ( ) ; //sets pin modes etc.
2023-02-08 20:00:15 +00:00
flag_updating = false ;
update_counter = 0 ;
2023-02-13 18:02:11 +00:00
updateDelay = 10 ;
2023-02-11 17:51:33 +00:00
resetOrder ( true ) ;
2023-02-08 19:17:58 +00:00
}
uint8_t Image : : getW ( ) {
return COLUMNS ;
}
uint8_t Image : : getH ( ) {
return ROWS ;
}
2023-02-08 20:00:15 +00:00
void Image : : setBuffer_solid ( bool set )
{
for ( uint8_t x = 0 ; x < getW ( ) ; x + + ) {
if ( set ) {
backBuffer [ x ] = 0xffff ; //all white
} else {
backBuffer [ x ] = 0x0 ; //all black
}
}
flag_updating = true ; //make update run
2023-02-13 18:58:45 +00:00
}
2023-09-20 17:22:59 +00:00
void Image : : setBuffer_Image1 ( )
{
backBuffer [ 0 ] = 0b0101010101010101 ;
backBuffer [ 1 ] = 0b1010101010101010 ;
backBuffer [ 2 ] = 0b0101010101010101 ;
backBuffer [ 3 ] = 0b1010101010101010 ;
backBuffer [ 4 ] = 0b0101010101010101 ;
backBuffer [ 5 ] = 0b1010101010101010 ;
backBuffer [ 6 ] = 0b0101010101010101 ;
backBuffer [ 7 ] = 0b1010101010101010 ;
backBuffer [ 8 ] = 0b0101010101010101 ;
backBuffer [ 9 ] = 0b1010101010101010 ;
backBuffer [ 10 ] = 0b0101010101010101 ;
backBuffer [ 11 ] = 0b1010101010101010 ;
backBuffer [ 12 ] = 0b0101010101010101 ;
backBuffer [ 13 ] = 0b1010101010101010 ;
backBuffer [ 14 ] = 0b0101010101010101 ;
backBuffer [ 15 ] = 0b1010101010101010 ;
backBuffer [ 16 ] = 0b0101010101010101 ;
backBuffer [ 17 ] = 0b1010101010101010 ;
backBuffer [ 18 ] = 0b0101010101010101 ;
backBuffer [ 19 ] = 0b1010101010101010 ;
backBuffer [ 20 ] = 0b0101010101010101 ;
backBuffer [ 21 ] = 0b1010101010101010 ;
backBuffer [ 22 ] = 0b0101010101010101 ;
backBuffer [ 23 ] = 0b1010101010101010 ;
backBuffer [ 24 ] = 0b0101010101010101 ;
backBuffer [ 25 ] = 0b1010101010101010 ;
backBuffer [ 26 ] = 0b0101010101010101 ;
backBuffer [ 27 ] = 0b1010101010101010 ;
backBuffer [ 28 ] = 0b0101010101010101 ;
backBuffer [ 29 ] = 0b1010101010101010 ;
backBuffer [ 30 ] = 0b0101010101010101 ;
backBuffer [ 31 ] = 0b1010101010101010 ;
backBuffer [ 32 ] = 0b0101010101010101 ;
backBuffer [ 33 ] = 0b1010101010101010 ;
backBuffer [ 34 ] = 0b0101010101010101 ;
backBuffer [ 35 ] = 0b1010101010101010 ;
backBuffer [ 36 ] = 0b0101010101010101 ;
backBuffer [ 37 ] = 0b1010101010101010 ;
backBuffer [ 38 ] = 0b0101010101010101 ;
backBuffer [ 39 ] = 0b1010101010101010 ;
backBuffer [ 40 ] = 0b0101010101010101 ;
backBuffer [ 41 ] = 0b1010101010101010 ;
backBuffer [ 42 ] = 0b0101010101010101 ;
backBuffer [ 43 ] = 0b1010101010101010 ;
backBuffer [ 44 ] = 0b0101010101010101 ;
backBuffer [ 45 ] = 0b1010101010101010 ;
backBuffer [ 46 ] = 0b0101010101010101 ;
backBuffer [ 47 ] = 0b1010101010101010 ;
backBuffer [ 48 ] = 0b0101010101010101 ;
backBuffer [ 49 ] = 0b1010101010101010 ;
backBuffer [ 50 ] = 0b0101010101010101 ;
backBuffer [ 51 ] = 0b1010101010101010 ;
backBuffer [ 52 ] = 0b0101010101010101 ;
backBuffer [ 53 ] = 0b1010101010101010 ;
backBuffer [ 54 ] = 0b0101010101010101 ;
backBuffer [ 55 ] = 0b1010101010101010 ;
backBuffer [ 56 ] = 0b0101010101010101 ;
backBuffer [ 57 ] = 0b1010101010101010 ;
backBuffer [ 58 ] = 0b0101010101010101 ;
backBuffer [ 59 ] = 0b1010101010101010 ;
backBuffer [ 60 ] = 0b0101010101010101 ;
backBuffer [ 61 ] = 0b1010101010101010 ;
backBuffer [ 62 ] = 0b0101010101010101 ;
backBuffer [ 63 ] = 0b1010101010101010 ;
backBuffer [ 64 ] = 0b0101010101010101 ;
backBuffer [ 65 ] = 0b1010101010101010 ;
backBuffer [ 66 ] = 0b0101010101010101 ;
backBuffer [ 67 ] = 0b1010101010101010 ;
backBuffer [ 68 ] = 0b0101010101010101 ;
backBuffer [ 69 ] = 0b1010101010101010 ;
backBuffer [ 70 ] = 0b0101010101010101 ;
backBuffer [ 71 ] = 0b1010101010101010 ;
backBuffer [ 72 ] = 0b0101010101010101 ;
backBuffer [ 73 ] = 0b1010101010101010 ;
backBuffer [ 74 ] = 0b0101010101010101 ;
flag_updating = true ; //make update run
}
void Image : : setBuffer_Image2 ( )
{
backBuffer [ 0 ] = 0b1010101010101010 ;
backBuffer [ 1 ] = 0b0101010101010101 ;
backBuffer [ 2 ] = 0b1010101010101010 ;
backBuffer [ 3 ] = 0b0101010101010101 ;
backBuffer [ 4 ] = 0b1010101010101010 ;
backBuffer [ 5 ] = 0b0101010101010101 ;
backBuffer [ 6 ] = 0b1010101010101010 ;
backBuffer [ 7 ] = 0b0101010101010101 ;
backBuffer [ 8 ] = 0b1010101010101010 ;
backBuffer [ 9 ] = 0b0101010101010101 ;
backBuffer [ 10 ] = 0b1010101010101010 ;
backBuffer [ 11 ] = 0b0101010101010101 ;
backBuffer [ 12 ] = 0b1010101010101010 ;
backBuffer [ 13 ] = 0b0101010101010101 ;
backBuffer [ 14 ] = 0b1010101010101010 ;
backBuffer [ 15 ] = 0b0101010101010101 ;
backBuffer [ 16 ] = 0b1010101010101010 ;
backBuffer [ 17 ] = 0b0101010101010101 ;
backBuffer [ 18 ] = 0b1010101010101010 ;
backBuffer [ 19 ] = 0b0101010101010101 ;
backBuffer [ 20 ] = 0b1010101010101010 ;
backBuffer [ 21 ] = 0b0101010101010101 ;
backBuffer [ 22 ] = 0b1010101010101010 ;
backBuffer [ 23 ] = 0b0101010101010101 ;
backBuffer [ 24 ] = 0b1010101010101010 ;
backBuffer [ 25 ] = 0b0101010101010101 ;
backBuffer [ 26 ] = 0b1010101010101010 ;
backBuffer [ 27 ] = 0b0101010101010101 ;
backBuffer [ 28 ] = 0b1010101010101010 ;
backBuffer [ 29 ] = 0b0101010101010101 ;
backBuffer [ 30 ] = 0b1010101010101010 ;
backBuffer [ 31 ] = 0b0101010101010101 ;
backBuffer [ 32 ] = 0b1010101010101010 ;
backBuffer [ 33 ] = 0b0101010101010101 ;
backBuffer [ 34 ] = 0b1010101010101010 ;
backBuffer [ 35 ] = 0b0101010101010101 ;
backBuffer [ 36 ] = 0b1010101010101010 ;
backBuffer [ 37 ] = 0b0101010101010101 ;
backBuffer [ 38 ] = 0b1010101010101010 ;
backBuffer [ 39 ] = 0b0101010101010101 ;
backBuffer [ 40 ] = 0b1010101010101010 ;
backBuffer [ 41 ] = 0b0101010101010101 ;
backBuffer [ 42 ] = 0b1010101010101010 ;
backBuffer [ 43 ] = 0b0101010101010101 ;
backBuffer [ 44 ] = 0b1010101010101010 ;
backBuffer [ 45 ] = 0b0101010101010101 ;
backBuffer [ 46 ] = 0b1010101010101010 ;
backBuffer [ 47 ] = 0b0101010101010101 ;
backBuffer [ 48 ] = 0b1010101010101010 ;
backBuffer [ 49 ] = 0b0101010101010101 ;
backBuffer [ 50 ] = 0b1010101010101010 ;
backBuffer [ 51 ] = 0b0101010101010101 ;
backBuffer [ 52 ] = 0b1010101010101010 ;
backBuffer [ 53 ] = 0b0101010101010101 ;
backBuffer [ 54 ] = 0b1010101010101010 ;
backBuffer [ 55 ] = 0b0101010101010101 ;
backBuffer [ 56 ] = 0b1010101010101010 ;
backBuffer [ 57 ] = 0b0101010101010101 ;
backBuffer [ 58 ] = 0b1010101010101010 ;
backBuffer [ 59 ] = 0b0101010101010101 ;
backBuffer [ 60 ] = 0b1010101010101010 ;
backBuffer [ 61 ] = 0b0101010101010101 ;
backBuffer [ 62 ] = 0b1010101010101010 ;
backBuffer [ 63 ] = 0b0101010101010101 ;
backBuffer [ 64 ] = 0b1010101010101010 ;
backBuffer [ 65 ] = 0b0101010101010101 ;
backBuffer [ 66 ] = 0b1010101010101010 ;
backBuffer [ 67 ] = 0b0101010101010101 ;
backBuffer [ 68 ] = 0b1010101010101010 ;
backBuffer [ 69 ] = 0b0101010101010101 ;
backBuffer [ 70 ] = 0b1010101010101010 ;
backBuffer [ 71 ] = 0b0101010101010101 ;
backBuffer [ 72 ] = 0b1010101010101010 ;
backBuffer [ 73 ] = 0b0101010101010101 ;
backBuffer [ 74 ] = 0b1010101010101010 ;
flag_updating = true ; //make update run
}
void Image : : setBuffer_Image3 ( )
{
backBuffer [ 0 ] = 0b1010101010101010 ;
backBuffer [ 1 ] = 0b1010101010101010 ;
backBuffer [ 2 ] = 0b1010101010101010 ;
backBuffer [ 3 ] = 0b1010101010101010 ;
backBuffer [ 4 ] = 0b1010101010101010 ;
backBuffer [ 5 ] = 0b1010101010101010 ;
backBuffer [ 6 ] = 0b1010101010101010 ;
backBuffer [ 7 ] = 0b1010101010101010 ;
backBuffer [ 8 ] = 0b1010101010101010 ;
backBuffer [ 9 ] = 0b1010101010101010 ;
backBuffer [ 10 ] = 0b1010101010101010 ;
backBuffer [ 11 ] = 0b1010101010101010 ;
backBuffer [ 12 ] = 0b1010101010101010 ;
backBuffer [ 13 ] = 0b1010101010101010 ;
backBuffer [ 14 ] = 0b1010101010101010 ;
backBuffer [ 15 ] = 0b1010101010101010 ;
backBuffer [ 16 ] = 0b1010101010101010 ;
backBuffer [ 17 ] = 0b1010101010101010 ;
backBuffer [ 18 ] = 0b1010101010101010 ;
backBuffer [ 19 ] = 0b1010101010101010 ;
backBuffer [ 20 ] = 0b1010101010101010 ;
backBuffer [ 21 ] = 0b1010101010101010 ;
backBuffer [ 22 ] = 0b1010101010101010 ;
backBuffer [ 23 ] = 0b1010101010101010 ;
backBuffer [ 24 ] = 0b1010101010101010 ;
backBuffer [ 25 ] = 0b1010101010101010 ;
backBuffer [ 26 ] = 0b1010101010101010 ;
backBuffer [ 27 ] = 0b1010101010101010 ;
backBuffer [ 28 ] = 0b1010101010101010 ;
backBuffer [ 29 ] = 0b1010101010101010 ;
backBuffer [ 30 ] = 0b1010101010101010 ;
backBuffer [ 31 ] = 0b1010101010101010 ;
backBuffer [ 32 ] = 0b1010101010101010 ;
backBuffer [ 33 ] = 0b1010101010101010 ;
backBuffer [ 34 ] = 0b1010101010101010 ;
backBuffer [ 35 ] = 0b1010101010101010 ;
backBuffer [ 36 ] = 0b1010101010101010 ;
backBuffer [ 37 ] = 0b1010101010101010 ;
backBuffer [ 38 ] = 0b1010101010101010 ;
backBuffer [ 39 ] = 0b1010101010101010 ;
backBuffer [ 40 ] = 0b1010101010101010 ;
backBuffer [ 41 ] = 0b1010101010101010 ;
backBuffer [ 42 ] = 0b1010101010101010 ;
backBuffer [ 43 ] = 0b1010101010101010 ;
backBuffer [ 44 ] = 0b1010101010101010 ;
backBuffer [ 45 ] = 0b1010101010101010 ;
backBuffer [ 46 ] = 0b1010101010101010 ;
backBuffer [ 47 ] = 0b1010101010101010 ;
backBuffer [ 48 ] = 0b1010101010101010 ;
backBuffer [ 49 ] = 0b1010101010101010 ;
backBuffer [ 50 ] = 0b1010101010101010 ;
backBuffer [ 51 ] = 0b1010101010101010 ;
backBuffer [ 52 ] = 0b1010101010101010 ;
backBuffer [ 53 ] = 0b1010101010101010 ;
backBuffer [ 54 ] = 0b1010101010101010 ;
backBuffer [ 55 ] = 0b1010101010101010 ;
backBuffer [ 56 ] = 0b1010101010101010 ;
backBuffer [ 57 ] = 0b1010101010101010 ;
backBuffer [ 58 ] = 0b1010101010101010 ;
backBuffer [ 59 ] = 0b1010101010101010 ;
backBuffer [ 60 ] = 0b1010101010101010 ;
backBuffer [ 61 ] = 0b1010101010101010 ;
backBuffer [ 62 ] = 0b1010101010101010 ;
backBuffer [ 63 ] = 0b1010101010101010 ;
backBuffer [ 64 ] = 0b1010101010101010 ;
backBuffer [ 65 ] = 0b1010101010101010 ;
backBuffer [ 66 ] = 0b1010101010101010 ;
backBuffer [ 67 ] = 0b1010101010101010 ;
backBuffer [ 68 ] = 0b1010101010101010 ;
backBuffer [ 69 ] = 0b1010101010101010 ;
backBuffer [ 70 ] = 0b1010101010101010 ;
backBuffer [ 71 ] = 0b1010101010101010 ;
backBuffer [ 72 ] = 0b1010101010101010 ;
backBuffer [ 73 ] = 0b1010101010101010 ;
backBuffer [ 74 ] = 0b1010101010101010 ;
flag_updating = true ; //make update run
}
void Image : : setBuffer_Image4 ( )
{
backBuffer [ 0 ] = 0b0101010101010101 ;
backBuffer [ 1 ] = 0b0101010101010101 ;
backBuffer [ 2 ] = 0b0101010101010101 ;
backBuffer [ 3 ] = 0b0101010101010101 ;
backBuffer [ 4 ] = 0b0101010101010101 ;
backBuffer [ 5 ] = 0b0101010101010101 ;
backBuffer [ 6 ] = 0b0101010101010101 ;
backBuffer [ 7 ] = 0b0101010101010101 ;
backBuffer [ 8 ] = 0b0101010101010101 ;
backBuffer [ 9 ] = 0b0101010101010101 ;
backBuffer [ 10 ] = 0b0101010101010101 ;
backBuffer [ 11 ] = 0b0101010101010101 ;
backBuffer [ 12 ] = 0b0101010101010101 ;
backBuffer [ 13 ] = 0b0101010101010101 ;
backBuffer [ 14 ] = 0b0101010101010101 ;
backBuffer [ 15 ] = 0b0101010101010101 ;
backBuffer [ 16 ] = 0b0101010101010101 ;
backBuffer [ 17 ] = 0b0101010101010101 ;
backBuffer [ 18 ] = 0b0101010101010101 ;
backBuffer [ 19 ] = 0b0101010101010101 ;
backBuffer [ 20 ] = 0b0101010101010101 ;
backBuffer [ 21 ] = 0b0101010101010101 ;
backBuffer [ 22 ] = 0b0101010101010101 ;
backBuffer [ 23 ] = 0b0101010101010101 ;
backBuffer [ 24 ] = 0b0101010101010101 ;
backBuffer [ 25 ] = 0b0101010101010101 ;
backBuffer [ 26 ] = 0b0101010101010101 ;
backBuffer [ 27 ] = 0b0101010101010101 ;
backBuffer [ 28 ] = 0b0101010101010101 ;
backBuffer [ 29 ] = 0b0101010101010101 ;
backBuffer [ 30 ] = 0b0101010101010101 ;
backBuffer [ 31 ] = 0b0101010101010101 ;
backBuffer [ 32 ] = 0b0101010101010101 ;
backBuffer [ 33 ] = 0b0101010101010101 ;
backBuffer [ 34 ] = 0b0101010101010101 ;
backBuffer [ 35 ] = 0b0101010101010101 ;
backBuffer [ 36 ] = 0b0101010101010101 ;
backBuffer [ 37 ] = 0b0101010101010101 ;
backBuffer [ 38 ] = 0b0101010101010101 ;
backBuffer [ 39 ] = 0b0101010101010101 ;
backBuffer [ 40 ] = 0b0101010101010101 ;
backBuffer [ 41 ] = 0b0101010101010101 ;
backBuffer [ 42 ] = 0b0101010101010101 ;
backBuffer [ 43 ] = 0b0101010101010101 ;
backBuffer [ 44 ] = 0b0101010101010101 ;
backBuffer [ 45 ] = 0b0101010101010101 ;
backBuffer [ 46 ] = 0b0101010101010101 ;
backBuffer [ 47 ] = 0b0101010101010101 ;
backBuffer [ 48 ] = 0b0101010101010101 ;
backBuffer [ 49 ] = 0b0101010101010101 ;
backBuffer [ 50 ] = 0b0101010101010101 ;
backBuffer [ 51 ] = 0b0101010101010101 ;
backBuffer [ 52 ] = 0b0101010101010101 ;
backBuffer [ 53 ] = 0b0101010101010101 ;
backBuffer [ 54 ] = 0b0101010101010101 ;
backBuffer [ 55 ] = 0b0101010101010101 ;
backBuffer [ 56 ] = 0b0101010101010101 ;
backBuffer [ 57 ] = 0b0101010101010101 ;
backBuffer [ 58 ] = 0b0101010101010101 ;
backBuffer [ 59 ] = 0b0101010101010101 ;
backBuffer [ 60 ] = 0b0101010101010101 ;
backBuffer [ 61 ] = 0b0101010101010101 ;
backBuffer [ 62 ] = 0b0101010101010101 ;
backBuffer [ 63 ] = 0b0101010101010101 ;
backBuffer [ 64 ] = 0b0101010101010101 ;
backBuffer [ 65 ] = 0b0101010101010101 ;
backBuffer [ 66 ] = 0b0101010101010101 ;
backBuffer [ 67 ] = 0b0101010101010101 ;
backBuffer [ 68 ] = 0b0101010101010101 ;
backBuffer [ 69 ] = 0b0101010101010101 ;
backBuffer [ 70 ] = 0b0101010101010101 ;
backBuffer [ 71 ] = 0b0101010101010101 ;
backBuffer [ 72 ] = 0b0101010101010101 ;
backBuffer [ 73 ] = 0b0101010101010101 ;
backBuffer [ 74 ] = 0b0101010101010101 ;
flag_updating = true ; //make update run
}
2023-02-13 18:58:45 +00:00
void Image : : setBufferColumn ( uint8_t _colnum , uint16_t _rowdata )
{
if ( _colnum > = COLUMNS ) {
Serial . println ( " colnum too high " ) ;
} else {
backBuffer [ _colnum ] = _rowdata ; //all white
flag_updating = true ; //make update run
}
2023-02-08 20:00:15 +00:00
}
2023-02-08 20:29:10 +00:00
void Image : : setBuffer_random ( uint8_t randomness )
2023-02-08 20:00:15 +00:00
{
2023-02-08 20:29:10 +00:00
for ( uint8_t x = 0 ; x < getW ( ) ; x + + ) {
uint16_t randomnumber = 0 ;
for ( uint8_t y = 0 ; y < getH ( ) ; y + + ) {
if ( random ( 256 ) < randomness ) { //the higher the parameter the more white
randomnumber + = pow ( 2 , y ) ;
}
}
backBuffer [ x ] = randomnumber ;
//backBuffer[x]=(uint16_t)random(0x10000);
2023-02-08 20:00:15 +00:00
}
2023-02-08 20:29:10 +00:00
flag_updating = true ; //make update run
}
2023-02-11 17:51:33 +00:00
void Image : : resetOrder ( bool ascending ) {
for ( uint8_t i = 0 ; i < getW ( ) ; i + + ) { //fill with ascending numbers
2023-02-13 18:02:11 +00:00
if ( ascending ) {
orderArray [ i ] = i ;
} else {
orderArray [ i ] = ( getW ( ) - 1 ) - i ;
}
2023-02-11 17:51:33 +00:00
}
}
void Image : : shuffleOrder ( uint8_t iterations ) {
for ( uint8_t s = 0 ; s < iterations ; s + + ) { //shuffle iterations
uint8_t _r1 = random ( getW ( ) ) ;
uint8_t _r2 = random ( getW ( ) ) ;
uint8_t _backup = orderArray [ _r1 ] ;
//swap numbers
orderArray [ _r1 ] = orderArray [ _r2 ] ;
orderArray [ _r2 ] = _backup ;
}
for ( uint8_t i = 0 ; i < getW ( ) ; i + + ) { //fill with ascending numbers
Serial . print ( orderArray [ i ] ) ; Serial . print ( " " ) ;
}
Serial . println ( ) ;
}
UpdateReturn Image : : updateByColumn ( bool clearFirst , bool optimizeClear , bool optimizeSet )
2023-02-08 20:29:10 +00:00
{
2023-02-08 20:00:15 +00:00
if ( ! flag_updating ) {
2023-02-11 16:31:49 +00:00
return nochange ; //finished
2023-02-08 20:00:15 +00:00
}
2023-02-11 17:26:52 +00:00
if ( millis ( ) - lastUpdateMillis < updateDelay ) { //too early
2023-02-11 16:31:49 +00:00
return wait ; //not finished
2023-02-08 20:29:10 +00:00
}
2023-02-11 17:26:52 +00:00
unsigned long functionStartMillis = millis ( ) ;
2023-02-11 17:51:33 +00:00
2023-02-08 20:00:15 +00:00
uint8_t x = update_counter / 2 ;
2023-02-11 17:51:33 +00:00
bool setDot = ( update_counter % 2 = = 1 ) ;
if ( clearFirst ) {
x = update_counter % getW ( ) ;
setDot = ! ( update_counter / getW ( ) = = 0 ) ;
}
x = orderArray [ x ] ; //use custom order
2023-02-08 20:00:15 +00:00
2023-02-11 17:26:52 +00:00
if ( ! setDot ) { //even counter numbers are for clearing
uint16_t _colClear = frontBuffer [ x ] & ~ backBuffer [ x ] ; //Front & ~Back = Which bits have to be cleared
if ( ! optimizeClear | | _colClear > 0 ) { //at least on dot has to be cleared in this column
flipdot . setRow ( 0 ) ;
flipdot . selectColumnClear ( x ) ;
if ( ! flipdot . clearSelectedColumn ( ) ) {
Serial . println ( " Error clearing column! " ) ;
}
lastUpdateMillis = millis ( ) ;
frontBuffer [ x ] = 0 ;
2023-02-08 20:00:15 +00:00
}
2023-02-11 17:26:52 +00:00
} else { //odd counter numbers are for setting
uint16_t _colSet = backBuffer [ x ] & ~ frontBuffer [ x ] ;
if ( ! optimizeSet | | _colSet > 0 ) { //at least on dot has to be set in this column (if optimize is enabled)
flipdot . selectColumnSet ( x ) ; //lower column number is on the left
if ( ! optimizeSet ) {
flipdot . setRow ( backBuffer [ x ] ) ; //flip all set dots in this column
} else {
flipdot . setRow ( _colSet ) ; //flip only currently not set dots in this column that have to be set
}
if ( ! flipdot . setSelectedDot ( ) ) {
Serial . println ( " Error setting dots! " ) ;
}
lastUpdateMillis = millis ( ) ;
frontBuffer [ x ] = backBuffer [ x ] ; //flip current column in buffer
}
2023-02-08 20:00:15 +00:00
}
update_counter + + ; //next column
2023-02-11 17:26:52 +00:00
unsigned long _duration = millis ( ) - functionStartMillis ; //how long it took to shift data and flip dots in this update
2023-02-08 20:29:10 +00:00
updateDuration = max ( updateDuration , _duration ) ; //store maximum value
2023-02-08 20:00:15 +00:00
if ( update_counter / 2 > = getW ( ) ) { //reached last column
flag_updating = false ;
update_counter = 0 ;
2023-02-11 16:31:49 +00:00
return finished ; //finished
2023-02-08 20:00:15 +00:00
}
2023-02-11 16:31:49 +00:00
return updating ; //not finished
2023-02-08 20:00:15 +00:00
}
2023-02-08 19:17:58 +00:00
void Image : : loop_testDots ( ) {
static bool init = false ;
if ( ! init ) {
flipdot . setRow ( 0 ) ;
Serial . println ( " Clearing Display " ) ;
for ( int l = 0 ; l < COLUMNS ; l + + ) {
flipdot . selectColumnClear ( l % COLUMNS ) ;
if ( ! flipdot . clearSelectedColumn ( ) ) {
Serial . println ( " Error clearing column! " ) ;
} else {
Serial . println ( " Cleared " ) ;
}
delay ( 50 ) ;
}
init = true ;
Serial . println ( " Finished Clearing " ) ;
delay ( 1000 ) ;
}
Serial . println ( " Clearing " ) ;
flipdot . setRow ( 0 ) ;
flipdot . selectColumnClear ( 23 ) ;
if ( ! flipdot . clearSelectedColumn ( ) ) {
Serial . println ( " Error clearing column! " ) ;
}
delay ( 50 ) ;
flipdot . setRow ( 0 ) ;
flipdot . selectColumnClear ( 24 ) ;
if ( ! flipdot . clearSelectedColumn ( ) ) {
Serial . println ( " Error clearing column! " ) ;
}
delay ( 100 ) ;
Serial . println ( " Setting " ) ;
for ( int i = 23 ; i < 25 ; i + + ) {
flipdot . selectColumnSet ( i ) ; //lower column number is on the left
flipdot . setRow ( 0 ) ;
flipdot . setRow ( flipdot . getRow ( ) + pow ( 2 , 4 ) ) ; //low significant bits are lower rows (when connector at top)
flipdot . setRow ( flipdot . getRow ( ) + pow ( 2 , 5 ) ) ; //low significant bits are lower rows (when connector at top)
flipdot . setSelectedDot ( ) ;
delay ( 50 ) ;
}
delay ( 100 ) ;
countz + + ;
countz % = 14 ;
//init=false;
}
void Image : : loop_drawClearTest ( ) {
static bool init = false ;
if ( ! init ) {
flipdot . setRow ( 0 ) ;
Serial . println ( " Clearing Display " ) ;
for ( int l = 0 ; l < COLUMNS ; l + + ) {
flipdot . selectColumnClear ( l % COLUMNS ) ;
if ( ! flipdot . clearSelectedColumn ( ) ) {
Serial . println ( " Error clearing column! " ) ;
} else {
Serial . println ( " Cleared " ) ;
}
delay ( 20 ) ;
}
init = true ;
delay ( 1000 ) ;
}
Serial . print ( " count= " ) ;
Serial . print ( countz ) ; Serial . print ( " : " ) ;
//setting colX to 128, 32, 8,2 (or a combination of), then appling 12V to driver and GND to Clear, clears these colums
// this applies +12v to selected columns
//setting colX to 64,16,4,1 (or a combination of), then setting row shift registers to some setting sets the selected dots
// this applies GND to selected columns
//reset pin on annax board input should be used (not pulled to gnd for a short time) after dots have been flipped (to disable potentially activated transistors)
//cycle testing set dots
flipdot . selectColumnSet ( countz / ROWS ) ; //lower column number is on the left
flipdot . setRow ( pow ( 2 , ( countz ) % ROWS ) ) ; //low significant bits are lower rows (when connector at top)
/*Serial.print("Row="); Serial.print(row); Serial.print(" Col=");
for ( uint8_t i = 0 ; i < 7 ; i + + ) {
Serial . print ( " , " ) ; Serial . print ( col [ i ] ) ;
}
Serial . println ( ) ; */
//reset pin on ribbon cable high (12Vpullup/open), then low (via Transistor)
unsigned long starttime = micros ( ) ;
flipdot . setSelectedDot ( ) ;
unsigned long shiftduration = micros ( ) - starttime ;
Serial . println ( " " ) ;
Serial . print ( " Duration= " ) ; Serial . println ( shiftduration ) ;
countz + + ;
if ( countz > = ROWS * COLUMNS ) {
countz = 0 ;
init = false ;
}
}