Skip to content

Instantly share code, notes, and snippets.

@pingud98
Created December 26, 2013 23:43
Show Gist options
  • Save pingud98/8140271 to your computer and use it in GitHub Desktop.
Save pingud98/8140271 to your computer and use it in GitHub Desktop.
laser alphabet: the alphabet for my primitive laser projector
int delayone = 2;
int delaytwo = 1;
int delaythree = 1;
int delayfour = 1;
int xPinOne = 3;
int laserPin = 4;
int xPinTwo = 5;
int yPinOne = 6;
int yPinTwo = 9;
int zPinOne = 10;
int zPinTwo = 11;
//int
int ledPin = 9; // LED connected to digital pin 9
byte incomingByte;
int currentX = 0;
int currentY = 0;
//byte imager[32768];
void setup() {
pinMode(laserPin, OUTPUT);
lasermove(0,0);
// nothing happens in setup
//lasermove(currentX,currentY);
laser(0);
//Serial.begin(115200);
Serial.println("init complete");
}
void loop() {
directmove(0,0,0);
for (int megaletter = int('a'); megaletter < (int('z')+1); megaletter++){
drawletter(char(megaletter), 9);
}
}
void drawletter(char alphabeat, int loops)
{for (int passes = 0; passes <loops; passes++) {
switch(alphabeat){
case 'a':
directmove(0,0,0);
directmove(500,250,1);
directmove(0,500,1);
directmove(500,250,1);
directmove(0,0,1);
directmove(250,500,0);
directmove(250,0,1);
//directmove(250,500,1);
break;
case 'b':
directmove(0,0,0);
directmove(500,0,1);
directmove(490,50,1);
directmove(480,200,1);
directmove(450,250,1);
directmove(400,500,1);
directmove(350,400,1);
directmove(300,200,1);
directmove(250,0,1);
directmove(200,250,1);
directmove(100,500,1);
directmove(50,450,1);
directmove(0,0,1);
break;
case 'c':
directmove(400,500,0);
directmove(450,400,1);
directmove(500,250,1);
directmove(450,0,1);
directmove(50,0,1);
directmove(0,250,1);
directmove(50,500,1);
break;
case 'd':
directmove(500,0,0);
directmove(0,0,1);
directmove(100,350,1);
directmove(250,500,1);
directmove(400,250,1);
directmove(500,0,1);
break;
case 'e':
directmove(500,500,0);
directmove(500,0,1);
directmove(250,0,1);
directmove(250,450,1);
directmove(250,0,1);
directmove(0,0,1);
directmove(0,500,1);
directmove(0,0,1);
directmove(500,0,1);
directmove(500,500,1);
break;
case 'f':
directmove(500,500,0);
directmove(500,0,1);
directmove(300,0,1);
directmove(300,250,1);
directmove(300,0,1);
directmove(0,0,1);
directmove(500,0,1);
directmove(500,500,1);
break;
case 'g':
directmove(400,500,0);
directmove(450,400,1);
directmove(500,250,1);
directmove(450,0,1);
directmove(50,0,1);
directmove(0,250,1);
directmove(0,450,1);
directmove(150,450,1);
directmove(150,300,1);
directmove(150,500,1);
directmove(150,300,1);
break;
case 'h':
directmove(0,0,0);
directmove(500,0,1);
directmove(500,500,0);
directmove(0,500,1);
directmove(250,500,0);
directmove(250,0,1);
directmove(250,500,1);
break;
case 'i':
directmove(500,200,0);
directmove(500,200,1);
directmove(500,300,1);
directmove(500,250,1);
directmove(0,250,1);
directmove(0,200,1);
directmove(0,300,1);
directmove(0,250,1);
directmove(500,250,1);
break;
case 'j':
directmove(500,0,0);
directmove(500,500,1);
directmove(200,500,1);
directmove(0,250,1);
//directmove(100,0,1);
break;
case 'k':
directmove(500,0,0);
directmove(0,0,1);
directmove(250,0,1);
directmove(400,500,1);
directmove(250,0,1);
directmove(100,500,1);
directmove(250,0,1);
directmove(500,0,1);
break;
case 'l':
directmove(500,0,0);
directmove(0,0,1);
directmove(0,300,1);
directmove(0,0,1);
directmove(500,0,1);
break;
case 'm':
directmove(500,120,1);
directmove(250,240,1);
directmove(500,360,1);
directmove(0,480,1);
directmove(500,360,1);
directmove(250,240,1);
directmove(500,120,1);
directmove(0,0,1);
break;
case 'n':
directmove(0,0,0);
directmove(500,0,1);
directmove(0,500,1);
directmove(500,500,1);
directmove(0,500,1);
directmove(500,0,1);
break;
case 'o':
directmove(50,50,0);
directmove(450,50,1);
directmove(450,450,1);
directmove(50,450,1);
directmove(50,50,1);
break;
case 'p':
directmove(0,0,0);
directmove(500,0,1);
directmove(500,450,1);
directmove(300,450,1);
directmove(300,0,1);
directmove(0,0,1);
break;
case 'q':
directmove(50,50,0);
directmove(450,50,1);
directmove(450,450,1);
directmove(50,450,1);
directmove(100,300,0);
directmove(0,500,1);
directmove(50,450,1);
directmove(50,50,1);
break;
case 'r':
directmove(0,0,0);
directmove(500,0,1);
directmove(500,450,1);
directmove(450,500,1);
directmove(300,450,1);
directmove(300,0,1);
directmove(0,500,1);
directmove(300,0,1);
directmove(0,0,1);
break;
case 's':
directmove(500,500,0);
directmove(500,0,1);
directmove(250,0,1);
directmove(250,500,1);
directmove(0,500,1);
directmove(0,0,1);
directmove(500,500,0);
break;
case 't':
directmove(500,0,0);
directmove(500,500,1);
directmove(500,250,1);
directmove(0,250,1);
directmove(500,250,1);
directmove(500,0,1);
break;
case 'u':
directmove(500,0,0);
directmove(0,0,1);
directmove(0,500,1);
directmove(500,500,1);
directmove(500,0,0);
break;
case 'v':
directmove(500,0,0);
directmove(0,250,1);
directmove(500,500,1);
break;
case 'w':
directmove(500,0,0);
directmove(0,100,1);
directmove(300,250,1);
directmove(0,400,1);
directmove(500,500,1);
break;
case 'x':
directmove(500,0,0);
directmove(0,500,1);
directmove(500,500,0);
directmove(0,0,1);
break;
case 'y':
directmove(0,250,0);
directmove(250,250,1);
directmove(500,0,1);
directmove(250,250,1);
directmove(500,500,1);
directmove(250,250,1);
directmove(0,250,0);
break;
case 'z':
directmove(500,0,0);
directmove(500,500,1);
directmove(0,0,1);
directmove(0,500,1);
break;
case ' ':
directmove(0,0,0);
default:
directmove(0,0,0);
break;
}}}
void directmove(int targetx, int targety, int laserstate)
{
int deltax = 0;
float xincrement = 0;
int deltay = 0;
float yincrement = 0;
int sumdelta = 0;
int numsteps = 0;
float truexposn = 0;
float trueyposn = 0;
truexposn = float(currentX);
trueyposn = float(currentY);
deltax = targetx - currentX;
deltay = targety - currentY;
sumdelta = deltax + deltay;
//Serial.println(deltax);
//Serial.println(deltay);
// currentX = startx;
// currentY = starty;
// lasermove(currentX, currentY);
numsteps = max((max(currentX,targetx)-min(currentX,targetx)),(max(currentY,targety)-min(currentY,targety)));
//Serial.println(numsteps);
xincrement = float(deltax) / float(numsteps);
yincrement = float(deltay) / float(numsteps);
//Serial.println(xincrement);
//Serial.println(yincrement);
if (laserstate == 1){
delay(delayone);
laser(1);
delay(delaytwo);
}
for (int thisstep = 0; thisstep<numsteps; thisstep++)
{
truexposn = truexposn + xincrement;
trueyposn = trueyposn + yincrement;
lasermove(int(truexposn), int(trueyposn));
}
currentX = targetx;
currentY = targety;
//delay(delaythree);
laser(0);
//delay(40);
}
void laser(int onoff)
{
if (onoff == 1){
digitalWrite(laserPin, HIGH);
}
else
{
digitalWrite(laserPin, LOW);
}
}
void lasermove(int xcoord, int ycoord)
{
xposn(xcoord);
yposn(ycoord);
//delay(5);
delayMicroseconds(delayfour);
}
void xposn(int xcoord) {
xcoord = 500-xcoord;
//limit the x movement to max range as determined
if (xcoord > 500)
{
xcoord = 500;
}
if (xcoord <= 255)
{
analogWrite(zPinTwo, 0);
analogWrite(zPinOne, 255-xcoord);
}
else
{
analogWrite(zPinOne, 0);
analogWrite(zPinTwo, xcoord-255);
}
}
void yposn(int ycoord){
ycoord = 500 - ycoord;
if (ycoord > 500)
{
ycoord = 500;
}
if (ycoord <= 255)
{
analogWrite(yPinTwo, 0);
analogWrite(yPinOne, 255-ycoord);
//analogWrite(yPinTwo, 255-ycoord);
}
else
{
analogWrite(yPinOne, 0);
analogWrite(yPinTwo, ycoord-255);
//analogWrite(yPinOne, ycoord-255);
}
}
void lefthandedsquare(){
//right handed square
for (int i = 0; i<500; i=i+1)
{lasermove(i,0);
}
for (int i = 0; i<500; i=i+1)
{lasermove(500,i);
}
for (int i = 500; i>0; i=i-1)
{lasermove(i,500);
}
for (int i = 500; i>0; i=i-1)
{lasermove(0,i);
} }
void righthandedsquare(){
//left handed square
for (int i = 0; i<500; i=i+1)
{lasermove(0,i);
}
for (int i = 0; i<500; i=i+1)
{lasermove(i,500);
}
for (int i = 500; i>0; i=i-1)
{lasermove(500,i);
}
for (int i = 500; i>0; i=i-1)
{lasermove(i,0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment