Projects > Advanced Holosight

Advanced Holosight

Holographic Displays are used more and more. They have been around in airplanes for ages and some car manufacturers are also using them now. I was wondering if it is able to build a really small one which I could use for Paintball e.g.
I hooked up a Nokia LCD to an Arduino Nano to display the remaining balls as a bargraph. Since I never used such a LCD before, there is more to come - for sure.

This is only a quick and dirty test of the display:

Code:

#include <ColorLCDShield.h>

LCDShield lcd;

int buttons[3] = {3, 4, 5};  
byte cont = 40; 
int menu = 0;
int submenu = 0;
int magsize = 20;
int schuss = 20;
int crosshair_style = 1;
int crosshair_color_cycle = 1;
int crosshair_color = GREEN;

String dispschuss;


void setup()
{ 
  for (int i=0; i<3; i++)
  {
    pinMode(buttons[i], INPUT);  
    digitalWrite(buttons[i], HIGH);  
  }
  
  lcd.init(PHILLIPS);  
  lcd.contrast(cont);  
  lcd.clear(BLACK);  

}

void loop()
{
int bgcolor;
int fcolor;
 
if (schuss<0) {schuss=magsize;}
    
 if (menu==0){
  if (crosshair_style == 1)  {
  lcd.setRect(63, 63, 65, 65, 1, crosshair_color);
  lcd.setCircle(64, 64, 10, crosshair_color);  
  }
  if (crosshair_style == 2)  {
  lcd.setRect(63, 63, 65, 65, 1, crosshair_color);
  lcd.setRect(58, 58, 70, 70, 0,  crosshair_color);  
  }
  if (crosshair_style == 3)  {
  lcd.setRect(63, 63, 65, 65, 1, crosshair_color);
  lcd.setRect(58, 58, 70, 70, 0,  crosshair_color);  
  }
  dispschuss = "";
  dispschuss += schuss;
  dispschuss += "/";
  dispschuss += magsize;
  dispschuss += " .43 Pballs  ";
  char charBuf[50];
  dispschuss.toCharArray(charBuf, 50); 
  lcd.setStr(charBuf, 112, 1, WHITE, BLACK); 
  lcd.setRect(0, 0, 12, 130, 1, BLACK);
  lcd.setRect(12, 5, 13, 125, 1, RED);
  float breitefloat = (120.0/(float)magsize)*(float)schuss;
  int breite = (int)breitefloat;
  lcd.setRect(6, 5, 12, breite+5, 1, BLUE);
  }
 
  
 if (menu==1){
  lcd.setStr("preferences:", 3, 10, WHITE, BLACK);
  lcd.setRect(20, 5, 21, 125, 1, BLUE);
  if (submenu==1){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("crosshair", 23, 10, fcolor, bgcolor);
  if (submenu==2){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("magazin size", 43, 10, fcolor, bgcolor);
  if (submenu==3){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("back", 63, 10, fcolor, bgcolor);
  }
    
    
 if (menu==2){
  lcd.setStr("crosshair setup:", 3, 5, WHITE, BLACK);
  lcd.setRect(20, 5, 21, 125, 1, BLUE);
  if (submenu==1){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("color", 23, 10, fcolor, bgcolor);
  if (submenu==2){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("appearance", 43, 10, fcolor, bgcolor);
  if (submenu==3){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("back", 63, 10, fcolor, bgcolor);
    
  if (crosshair_style == 1)  {
  lcd.setRect(63+40, 63, 65+40, 65, 1, crosshair_color);
  lcd.setCircle(64+40, 64, 10, crosshair_color);  
  }
  if (crosshair_style == 2)  {
  lcd.setRect(63+40, 63, 65+40, 65, 1, crosshair_color);
  lcd.setRect(58+40, 58, 70+40, 70, 0, crosshair_color);  
  }
  if (crosshair_style == 3)  {
  lcd.setRect(63+40, 63, 65+40, 65, 1, crosshair_color); 
  }
  }
      

 if (menu==3){
  lcd.setStr("magazine setup:", 3, 8, WHITE, BLACK);
  lcd.setRect(20, 5, 21, 125, 1, BLUE);
  if (submenu==1){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("decrease size", 23, 10, fcolor, bgcolor);
  if (submenu==2){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("increase size", 43, 10, fcolor, bgcolor);
  if (submenu==3){bgcolor=WHITE; fcolor=BLACK;}else{bgcolor=BLACK; fcolor=WHITE;}
  lcd.setStr("back", 63, 10, fcolor, bgcolor);
  String magdisp;
  magdisp = "size: ";
  magdisp += magsize;
  char charBuf[50];
  magdisp.toCharArray(charBuf, 50); 
  lcd.setStr(charBuf, 93, 35, WHITE, BLACK);
  }
  
  while(digitalRead(buttons[0])&&digitalRead(buttons[1])&&digitalRead(buttons[2]))
    ;  
  if (!digitalRead(buttons[0])) 
  {
  submenu--;   
  }
  else if (!digitalRead(buttons[1])) 
  {
  lcd.clear(BLACK);
  if (menu==0){menu=1; submenu=0;}
  
  if (menu==1 & submenu==1){menu=2; submenu=0;}
  if (menu==1 & submenu==2){menu=3; submenu=0;}
  if (menu==1 & submenu==3){menu=0; submenu=0;}
 
  
  if (menu==2 & submenu==3){menu=1; submenu=0;}
  if (menu==2 & submenu==2){if(crosshair_style==3){crosshair_style=1;}else{crosshair_style++;}}
  if (menu==2 & submenu==1){if(crosshair_color_cycle==5){crosshair_color_cycle=1;}else{crosshair_color_cycle++;}  if(crosshair_color_cycle==1){crosshair_color = GREEN;}if(crosshair_color_cycle==2){crosshair_color = BLUE;}if(crosshair_color_cycle==3){crosshair_color = RED;}if(crosshair_color_cycle==4){crosshair_color = YELLOW;}if(crosshair_color_cycle==5){crosshair_color = WHITE;}}
  

  if (menu==3 & submenu==3){menu=1; submenu=0;}
  if (menu==3 & submenu==1){magsize--; schuss=magsize;}
  if (menu==3 & submenu==2){magsize++; schuss=magsize;}
  }
  else if (!digitalRead(buttons[2])) 
  {
  submenu++;
  if (menu==0){schuss--;} 
  }
  lcd.contrast(cont); 
  delay(100); 
}