Post Reply 
Flickering screen (no user interaction)
12-20-2019, 02:08 PM (This post was last modified: 12-20-2019 08:43 PM by wmattias.)
Post: #23
RE: Flickering screen (no user interaction)
Hi!

Thanks Cyrille! I hope you can find a fix or remedy! I think it's really an excellent calculator in a class of its own, but the flickering is very difficult to deal with.

BTW: I updated the program:
- Added a WARNING for people with EPILEPSY. I just found out online that this kind of flickering could potentially trigger a seizure in certain people (~3% epileptics).
- I numbered the test cases and added a few new ones.
- I find it interesting that Test "T8" doesn't appear to flicker (single interleaved pixel) but that "T9" definitely flickers (Double/Triple/Quadruple interleaved pixels).

/Mattias

Code:

EXPORT ScreenTest()
BEGIN

RECT();
TEXTOUT_P("WARNING", 130, 48);
TEXTOUT_P("DO NOT VIEW THIS TEST IF YOU ARE", 30, 48+32);
TEXTOUT_P("EPILEPTIC", 130, 48+80);
TEXTOUT_P("THE FLICKERING MAY TRIGGER A SEIZURE", 10, 48+128);
WAIT(-1);


// Multiple Horizantal Lines in Light Blue + White
RECT();
C:=RGB(200,200,255);
FOR Y FROM 0 TO 239 STEP 2 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T1: Flicker", 140, 110);
WAIT(-1);

// Multiple Horizontal Lines in Light+Darker Blue
RECT();
C:=RGB(100,100,200);
FOR Y FROM 0 TO 239 STEP 2 DO
  LINE_P(0,Y,320,Y,C);
END;
C:=RGB(200,200,255);
FOR Y FROM 1 TO 239 STEP 2 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T2: Flicker", 140, 110);
WAIT(-1);

// Single Horiz Line
C:=#DDDDDDh;
RECT();
LINE_P(0,120,320,120,C);
TEXTOUT_P("T3: Line Flickers", 20, 180);
WAIT(-1);

// Graph Example
C:=#DDDDDDh;
C:=RGB(192,192,192);
RECT();
FOR Y FROM 0 TO 239 STEP 5 DO
  LINE_P(0,Y,320,Y,C);
END;
FOR X FROM 0 TO 319 STEP 5 DO
  LINE_P(X,0,X,240,C);
END;
LINE_P(0,120,320,120,0);
LINE_P(160,0,160,240,0);
TEXTOUT_P("T4: Grid Flickers", 20, 180);
WAIT(-1);

// Multiple Horizontal Lines in Fully Saturated Blue
RECT();
C:=RGB(0,0,255);
FOR Y FROM 0 TO 239 STEP 2 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T5: No Flicker", 130, 110);
WAIT(-1);

// Solid Light Blue
C:=RGB(200,200,255);
RECT();
FOR Y FROM 0 TO 239 STEP 1 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T6: No Flicker", 130, 110);
WAIT(-1);

// Split Screen
RECT();
FOR Y FROM 0 TO 239 STEP 2 DO
  LINE_P(0,Y,160,Y,C);
  LINE_P(161,Y,319,Y,#000000);
END;
TEXTOUT_P("T7: Flicker", 40, 110);
TEXTOUT_P("T7: No Flicker", 200, 110);
WAIT(-1);

// White pixels surrounded by Blue
// BBBBBBB
// B B B B
// BBBBBBB
// B B B B
// BBBBBBB
C:=RGB(200,200,255);
RECT();
FOR X FROM 0 TO 319 STEP 2 DO
  LINE_P(X,0,X,240,C);
END;
FOR Y FROM 0 TO 239 STEP 2 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T7: Flicker", 140, 110);
WAIT(-1);

// White/Blue Pixels (Diagonal Lines)
//  B B B 
// B B B B
//  B B B 
RECT();
C:=#DDDDDDh;
C:=RGB(200,200,255);
FOR Y FROM 0 TO 239 STEP 1 DO
  IF even(Y) THEN X0:=0; ELSE X0:=1; END;
  FOR X FROM X0 TO 319 STEP 2 DO
    PIXON_P(X,Y,C);
  END;
END;
TEXTOUT_P("T8: No Flicker", 130, 110);
WAIT(-1);

// White/Blue Pixels (Increasing Spacing)
// BB  BB  BB 
//   BB  BB 
// BB  BB  BB 
RECT();
C:=RGB(200,200,255);
FOR Y FROM 0 TO 239 STEP 1 DO
  IF even(Y) THEN X0:=0; ELSE X0:=1; END;
  FOR X FROM (0+X0) TO 80 STEP 2 DO
    PIXON_P(X,Y,C);
  END;
  IF even(Y) THEN X0:=0; ELSE X0:=2; END;
  FOR X FROM (80+X0) TO 159 STEP 4 DO
    PIXON_P(X,Y,C);
    PIXON_P(X+1,Y,C);
  END;
  IF even(Y) THEN X0:=0; ELSE X0:=3; END;
  FOR X FROM (160+X0) TO 239 STEP 6 DO
    PIXON_P(X,Y,C);
    PIXON_P(X+1,Y,C);
    PIXON_P(X+2,Y,C);
  END;
  IF even(Y) THEN X0:=0; ELSE X0:=4; END;
  FOR X FROM (240+X0) TO 319 STEP 8 DO
    PIXON_P(X,Y,C);
    PIXON_P(X+1,Y,C);
    PIXON_P(X+2,Y,C);
    PIXON_P(X+3,Y,C);
  END;
END;
TEXTOUT_P("T9: 3 of 4 Flicker", 0, 0);
WAIT(-1);

// White/Blue Pixels (Increasing Spacing)
// BB  BB  BB 
//   BB  BB 
// BB  BB  BB 
RECT();
C:=RGB(0,0,0);
FOR Y FROM 0 TO 239 STEP 1 DO
  IF even(Y) THEN X0:=0; ELSE X0:=1; END;
  FOR X FROM (0+X0) TO 80 STEP 2 DO
    PIXON_P(X,Y,C);
  END;
  IF even(Y) THEN X0:=0; ELSE X0:=2; END;
  FOR X FROM (80+X0) TO 159 STEP 4 DO
    PIXON_P(X,Y,C);
    PIXON_P(X+1,Y,C);
  END;
  IF even(Y) THEN X0:=0; ELSE X0:=3; END;
  FOR X FROM (160+X0) TO 239 STEP 6 DO
    PIXON_P(X,Y,C);
    PIXON_P(X+1,Y,C);
    PIXON_P(X+2,Y,C);
  END;
  IF even(Y) THEN X0:=0; ELSE X0:=4; END;
  FOR X FROM (240+X0) TO 319 STEP 8 DO
    PIXON_P(X,Y,C);
    PIXON_P(X+1,Y,C);
    PIXON_P(X+2,Y,C);
    PIXON_P(X+3,Y,C);
  END;
END;
TEXTOUT_P("T10: No Flicker", 0, 0);
WAIT(-1);

// Color Comparison
RECT();
Y:=20;
LINE_P(0,Y,320,Y,#DDDDDDh); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(192,192,192)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(128,128,128)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(64,64,64)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(0,0,0)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(100,100,200)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(192,192,192)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(255,200,200)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(200,255,200)); Y:=Y+10;
LINE_P(0,Y,320,Y,RGB(200,200,255)); Y:=Y+10;
TEXTOUT_P("T11: Some Lines Flicker", 20, 220);
WAIT(-1);

// Spacing Comparison
RECT();
C:=RGB(192,192,192);
Y:=20;
FOR I FROM 0 TO 9 DO
  FOR N FROM 0 TO I DO
    LINE_P(0,Y+N,320,Y+N,C);
  END;
  Y:=Y+10;
END;
LINE_P(0,179,320,179,0);
FOR Y FROM 180 TO 240 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T12: Some Flicker", 20, 140);
WAIT(-1);

// 2 Grey + 1 White
RECT();
C:=RGB(192,192,192);
FOR Y FROM 0 TO 239 STEP 3 DO
  LINE_P(0,Y,320,Y,C);
  LINE_P(0,Y+1,320,Y+1,C);
END;
TEXTOUT_P("T13: Flicker", 0, 0);
WAIT(-1);

// 2 Grey + 2 White
RECT();
C:=RGB(192,192,192);
FOR Y FROM 0 TO 239 STEP 4 DO
  LINE_P(0,Y,320,Y,C);
  LINE_P(0,Y+1,320,Y+1,C);
END;
TEXTOUT_P("T14: Light Flicker?", 0, 0);
WAIT(-1);

// 3 Grey + 1 White
RECT();
C:=RGB(192,192,192);
FOR Y FROM 0 TO 239 STEP 4 DO
  LINE_P(0,Y,320,Y,C);
  LINE_P(0,Y+1,320,Y+1,C);
  LINE_P(0,Y+2,320,Y+2,C);
END;
TEXTOUT_P("T15: Flicker", 0, 0);
WAIT(-1);

// Some Color Tests
RECT();
A:=RGB(64,64,64);
B:=RGB(96,96,96);
C:=RGB(128,128,128);
D:=RGB(160,160,160);
FOR Y FROM 0 TO 239 STEP 2 DO
  LINE_P(0,  Y, 79,Y, A);
  LINE_P(80, Y,159,Y, B);
  LINE_P(160,Y,239,Y, C);
  LINE_P(240,Y,319,Y, D);
END;
TEXTOUT_P("T18: Flicker", 0, 0);
WAIT(-1);

// Dark Grey Test
RECT();
C:=RGB(64,64,64);
FOR Y FROM 0 TO 239 STEP 4 DO
  LINE_P(0,Y,320,Y,C);
END;
TEXTOUT_P("T19: Light Flicker", 0, 0);
WAIT(-1);

RECT();
TEXTOUT_P("Test Finished", 120, 110);
FREEZE;
END;
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: Flickering screen (no user interaction) - wmattias - 12-20-2019 02:08 PM



User(s) browsing this thread: 1 Guest(s)