//#include // Control de 3 motores de paso /* D13 -> x.dir D12 -> x.step D11 -> y.dir D10 -> y.step D09 -> z.dir D08 -> z.step */ //Servo servo1; int sy = 11, sx = 6, sz = 5; // AnlogWrite function only works on 3, 5, 6, 9, 10, and 11. int dy = 13, dx = 12, dz = 8; int LEDpin=3; //Coordenadas int chip1x=0, chip2x=390, chip3x=300, chip4x=50; //Coordenadas en "X" desde el punto de origen int chip1y=0, chip2y=0, chip3y=600, chip4y=700; //Coordenadas en "y" desde el punto de origen long distancia=1500; //Distancia entre placa y placa // Funciones void move(int arg_axis, long arg_distance); void coger(); void dejar(); void setup() { pinMode(dx,OUTPUT); pinMode(dy,OUTPUT); pinMode(dz,OUTPUT); pinMode(sx,OUTPUT); pinMode(sy,OUTPUT); pinMode(sz,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(LEDpin,OUTPUT); // pinMode(3,OUTPUT); //servo1.attach(3); } void loop() { //Chip 1 coger(); move('X',distancia);// derecha--- distancia entre dispensador y placa =3360 delay(2000); dejar(); move('X',-distancia); //izquierda delay(2000); //Chip 2 move('X',chip2x); move('Y',chip2y); coger(); move('X',distancia); dejar(); move('X',-distancia); move('Y',-chip2y); move('X',-chip2x); //Chip 3 move('X',chip3x); move('Y',chip3y); coger(); move('X',distancia); dejar(); move('X',-distancia); move('Y',-chip3y); move('X',-chip3x); //Chip 4 move('X',chip4x); move('Y',chip4y); coger(); move('X',distancia); dejar(); move('X',-distancia); move('Y',-chip4y); move('X',-chip4x); } void coger() //baja y coge el chip { // servo1.write(10);//expulsar aire digitalWrite(3,HIGH); delay(3000); move('Z',300); //baja //servo1.write(170); //aspirar chip digitalWrite(3,LOW); delay(3000); move('Z',-300); //sube delay(1000); } void dejar() //baja y coge el chip { move('Z',275); //baja //servo1.write(10);//expulsar aire digitalWrite(3,HIGH); delay(3000); move('Z',-275); //sube // servo1.write(170); //aspirar chip digitalWrite(3,LOW); delay(2000); } void move(int arg_axis, long arg_distance) { int dir, stp; switch(arg_axis){ case 'X': dir = dx; //dx=11 stp = sx; //sx=13 break; case 'Y': dir = dy; stp = sy; break; case 'Z': dir = dz; stp = sz; break; } analogWrite(dir,0); if(arg_distance > 0){ digitalWrite(dir,HIGH); //derecha }else{ digitalWrite(dir,LOW); arg_distance = - arg_distance; //Izquierda } analogWrite(stp,200); delay(arg_distance*10); analogWrite(stp,0); }