Skip to content

Instantly share code, notes, and snippets.

@pingud98
Created December 26, 2013 23:42
Show Gist options
  • Save pingud98/8140253 to your computer and use it in GitHub Desktop.
Save pingud98/8140253 to your computer and use it in GitHub Desktop.
Arduino 2 axis laser projector 'Hello World' code
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(34,31, 0);
directmove(26,122,1);
directmove(24,74, 0);
directmove(75,75,1);
directmove(69,37, 0);
directmove(68,122,1);
directmove(130,43, 0);
directmove(89,43,1);
directmove(89,43, 0);
directmove(89,121,1);
directmove(89,121, 0);
directmove(145,121,1);
directmove(91,71, 0);
directmove(121,71,1);
directmove(155,43, 0);
directmove(158,122,1);
directmove(156,122, 0);
directmove(189,121,1);
directmove(206,38, 0);
directmove(206,152,1);
directmove(206,152, 0);
directmove(282,151,1);
directmove(328,35, 0);
directmove(294,94,1);
directmove(294,93, 0);
directmove(328,166,1);
directmove(328,166, 0);
directmove(359,165,1);
directmove(359,164, 0);
directmove(363,45,1);
directmove(363,45, 0);
directmove(328,37,1);
directmove(24,172, 0);
directmove(46,481,1);
directmove(46,481, 0);
directmove(84,246,1);
directmove(84,246, 0);
directmove(127,477,1);
directmove(127,477, 0);
directmove(164,174,1);
directmove(233,198, 0);
directmove(181,201,1);
directmove(181,201, 0);
directmove(166,287,1);
directmove(166,287, 0);
directmove(162,465,1);
directmove(162,465, 0);
directmove(185,465,1);
directmove(185,465, 0);
directmove(236,200,1);
directmove(247,223, 0);
directmove(210,457,1);
directmove(248,226, 0);
directmove(290,213,1);
directmove(290,213, 0);
directmove(298,266,1);
directmove(298,266, 0);
directmove(240,283,1);
directmove(259,279, 0);
directmove(322,491,1);
directmove(317,215, 0);
directmove(324,452,1);
directmove(324,452, 0);
directmove(373,441,1);
directmove(388,223, 0);
directmove(388,472,1);
directmove(388,472, 0);
directmove(432,452,1);
directmove(432,452, 0);
directmove(393,230,1);
directmove(449,214, 0);
directmove(459,385,1);
directmove(476,207, 0);
directmove(461,385,1);
directmove(451,218, 0);
directmove(477,211,1);
directmove(466,404, 0);
directmove(466,404,1);
directmove(460,404, 0);
directmove(460,404,1);
directmove(460,404, 0);
directmove(460,404,1);
directmove(462,412, 0);
directmove(462,412,1);
directmove(460,412, 0);
directmove(460,412,1);
directmove(460,402, 0);
directmove(460,402,1);
directmove(464,404, 0);
directmove(464,404,1);
directmove(464,414, 0);
directmove(464,414,1);
directmove(462,412, 0);
directmove(462,412,1);
directmove(457,412, 0);
directmove(457,412,1);
directmove(457,409, 0);
directmove(457,409,1);
directmove(457,405, 0);
directmove(457,405,1);
directmove(463,404, 0);
directmove(463,404,1);
directmove(468,410, 0);
directmove(468,410,1);
directmove(466,411, 0);
directmove(466,411,1);
directmove(462,411, 0);
directmove(462,411,1);
directmove(463,409, 0);
directmove(463,409,1);
directmove(466,409, 0);
directmove(466,409,1);
directmove(470,417, 0);
directmove(470,417,1);
directmove(464,410, 0);
directmove(464,410,1);
directmove(462,408, 0);
directmove(462,408,1);
directmove(466,408, 0);
directmove(466,409,1);
directmove(468,409, 0);
directmove(468,409,1);
directmove(408,71, 0);
directmove(421,73,1);
directmove(451,79, 0);
directmove(469,75,1);
directmove(398,98, 0);
directmove(405,105,1);
directmove(405,105, 0);
directmove(422,117,1);
directmove(422,117, 0);
directmove(440,118,1);
directmove(440,118, 0);
directmove(457,111,1);
directmove(457,111, 0);
directmove(469,100,1);
directmove(420,40, 0);
directmove(407,54,1);
directmove(407,54, 0);
directmove(398,71,1);
directmove(398,71, 0);
directmove(390,103,1);
directmove(390,103, 0);
directmove(405,139,1);
directmove(405,139, 0);
directmove(434,139,1);
directmove(434,139, 0);
directmove(463,138,1);
directmove(463,138, 0);
directmove(471,128,1);
directmove(471,128, 0);
directmove(481,102,1);
directmove(481,102, 0);
directmove(481,67,1);
directmove(481,67, 0);
directmove(458,44,1);
directmove(458,44, 0);
directmove(421,44,1);
directmove(413,80, 0);
directmove(414,84,1);
directmove(463,86, 0);
directmove(462,90,1);
directmove(442,89, 0);
directmove(425,102,1);
directmove(425,102, 0);
directmove(440,108,1);
directmove(411,160, 0);
directmove(411,160,1);
}
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(100);
laser(1);
delay(2);
}
for (int thisstep = 0; thisstep<numsteps; thisstep++)
{
truexposn = truexposn + xincrement;
trueyposn = trueyposn + yincrement;
lasermove(int(truexposn), int(trueyposn));
}
currentX = targetx;
currentY = targety;
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(35);
}
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