Caracterización de sensor de humedad utilizando LabVIEW y Arduino, se debe cargar el código en c al Arduino para que este se comunique con LabVIEW.
https://www.dropbox.com/s/b03y196e0izn4l0/Sensor%20de%20Humedad.rar?dl=0
Buscar este blog
viernes, 23 de diciembre de 2016
jueves, 22 de diciembre de 2016
Circuitos Hidráulicos
Conjunto de ejemplos de circuitos hidráulicos, es necesario instalar el programa "FluidSim" para poder correr las simulaciones.
https://www.dropbox.com/s/1vu1e1u6xzwlbr3/Circuitos%20Hidr%C3%A1ulicos.rar?dl=0
https://www.dropbox.com/s/1vu1e1u6xzwlbr3/Circuitos%20Hidr%C3%A1ulicos.rar?dl=0
Etiquetas:Progrmacion ,C++, Practicas programacion
FluidSim
Programa para comprobar el funcionamiento de una compuerta lógica
Programa de LabVIEW para comprobar el correcto funcionamiento de una compuerta lógica.
https://www.dropbox.com/s/ljc64pz7uttr9sj/Funcionamiento%20Compuerta.rar?dl=0
https://www.dropbox.com/s/ljc64pz7uttr9sj/Funcionamiento%20Compuerta.rar?dl=0
Etiquetas:Progrmacion ,C++, Practicas programacion
LabView
viernes, 3 de junio de 2016
Modelado de brazo robotico SCARA en MATLAB
- No correr todo el programa al mismo tiempo, hacerlo por partes.
- El tamaño de paso para este modelo es de 22.5°, si se desea otro valor modificar todos los cálculos en donde aparezca este valor.
% MODELADO DE BRAZO ROBOTICO SCARA
close all;
clear all;
clc;
%% Variables y constantes del brazo
syms x y z w
a1=101; % elemento uno
a2=59; % elemento dos
a3=60; % elemento tres
a4=102; % elemento cuatro, con actuador final
d1=15; % offset uno
d2=x; % offset dos variable
o1=y; % angulo uno
o2=z; % angulo dos
o3=w; % angulo tres, se dejo encero ya que no había actuador final, pero si hay debe tomarse en cuenta
%% Matriz de referencia
% S0=[cos(o1) -sin(o1) 0 0; sin(o1) cos(o1) 0 0; 0 0 1 a1; 0 0 0 1];
% S1=[1 0 0 a2; 0 1 0 0; 0 0 1 0; 0 0 0 1];
% S2=[cos(o2) -sin(o2) 0 0; sin(o2) cos(o2) 0 0; 0 0 1 d1; 0 0 0 1];
% S3=[cos(o3) -sin(o3) 0 a3; sin(o3) cos(o3) 0 0; 0 0 1 0; 0 0 0 1];
% S4=[0 1 0 0; 1 0 0 0; 0 0 -1 -d2; 0 0 0 1];
% S5=S0*S1*S2*S3*S4
%% Modelo del brazo en pose cero
% figure
% s0=[0,0,0];s1=[0,0,a1];s2=[a2,0,a1];s3=[a2,0,a1+d1];s4=[a2+a3,0,a1];s5=[a2+a3,0,a1+d1-(a4/2)];
% x0=[0,0];y0=[0,0];z0=[0,0];
% x1=[0,0];y1=[0,0];z1=[0,a1];
% x2=[0,a2];y2=[0,0];z2=[a1,a1];
% x3=[a2,a2];y3=[0,0];z3=[a1,a1+d1];
% x4=[a2,a2+a3];y4=[0,0];z4=[a1+d1,a1+d1];
% x5=[a2+a3,a2+a3];y5=[0,0];z5=[a1+d1,a1+d1-a4];
% plot3(x0,y0,z0,'b','linewidth',3),grid on,hold on;
% plot3(x1,y1,z1,'b','linewidth',3),grid on,hold on;
% plot3(x2,y2,z2,'b','linewidth',3),grid on,hold on;
% plot3(x3,y3,z3,'b','linewidth',3),grid on,hold on;
% plot3(x4,y4,z4,'b','linewidth',3),grid on,hold on;
% plot3(x5,y5,z5,'b','linewidth',3),grid on,hold on;
% xlabel('X0'),ylabel('Y0'),zlabel('Z0');
% title('BRAZO SCARA POSE CERO');
%% Mapeo de poses Establecidas
% N=1;
% n1=0;n2=0;
% for i=1 : 4
% Op1=i*(pi/4);
% m1=0;m2=0;
% for l=0 : 3
% fac2=m1+m2;
% m1=m1+1;
% if m1==3
% m2=2;
% else m2=0;
% end
% Op2=fac2*(pi/4);
% for m=0 : 2 : 6
% d2=2.5*m;
% Ap1=((180*(Op1))/pi)
% Ap2=((180*(Op2))/pi)
% S1=round(Ap1/22.5)*22.5; S2=round(Ap2/22.5)*22.5;
% o1=S1
% o2=S2
% o3=0;
% S0=[cosd(o1) -sind(o1) 0 0; sind(o1) cosd(o1) 0 0; 0 0 1 a1; 0 0 0 1];
% S1=[1 0 0 a2; 0 1 0 0; 0 0 1 0; 0 0 0 1];
% S2=[cosd(o2) -sind(o2) 0 0; sind(o2) cosd(o2) 0 0; 0 0 1 d1; 0 0 0 1];
% S3=[cosd(o3) -sind(o3) 0 a3; sind(o3) cosd(o3) 0 0; 0 0 1 0; 0 0 0 1];
% S4=[0 1 0 0; 1 0 0 0; 0 0 -1 -d2; 0 0 0 1];
% S5=S0*S1*S2*S3*S4
% x0=[0,0,0];y0=[0,0,0];z0=[0,0,0];
% x1=[0,0];y1=[0,0];z1=[0,a1];
% x2=[0,cosd(o1)*a2];y2=[0,sind(o1)*a2];z2=[a1,a1];
% x3=[cosd(o1)*a2,cosd(o1)*a2];y3=[sind(o1)*a2,sind(o1)*a2];z3=[a1,a1+d1];
% x4=[cosd(o1)*a2,(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y4=[sind(o1)*a2,(sind(o1)*a2)+(sind(o1+o2)*a3)];z4=[a1+d1,a1+d1];
% x5=[(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y5=[(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3)];z5=[a1+d1,a1+d1-d2,(a1+d1)+(a4-d2)];
% figure
% plot3(x0,y0,z0,'b','linewidth',3),grid on,hold on;
% plot3(x1,y1,z1,'b','linewidth',3),grid on,hold on;
% plot3(x2,y2,z2,'b','linewidth',3),grid on,hold on;
% plot3(x3,y3,z3,'b','linewidth',3),grid on,hold on;
% plot3(x4,y4,z4,'b','linewidth',3),grid on,hold on;
% plot3(x5,y5,z5,'b','linewidth',3),grid on,hold on;
% xlabel('X0'),ylabel('Y0'),zlabel('Z0');
% title(['BRAZO SCARA POSE ',num2str(N)]);
% Dyx=sqrt((((cosd(o1)*a2)+(cosd(o1+o2)*a3))^2)+(((sind(o1)*a2)+(sind(o1+o2)*a3))^2))
% Dxz=sqrt(((Dyx)^2)+((a1+d1-d2)^2))
% N=N+1
% end
% end
% end
%% Calculo de pose con vector final
% Xf=69; Yf=28; Zf=a1+d1-58; % cambiar estos valores para un vector final distinto
% N=0;
% for i=0 : 1 : 15
% Op1=i*22.5;
% for l=-7 : 1 : 7
% Op2=l*22.5;
% for m=a4 : -1 : 0
% d2=m;
% o1=(Op1);o2=(Op2);o3=0;
% S0=[cosd(o1) -sind(o1) 0 0; sind(o1) cosd(o1) 0 0; 0 0 1 a1; 0 0 0 1];
% S1=[1 0 0 a2; 0 1 0 0; 0 0 1 0; 0 0 0 1];
% S2=[cosd(o2) -sind(o2) 0 0; sind(o2) cosd(o2) 0 0; 0 0 1 d1; 0 0 0 1];
% S3=[cosd(o3) -sind(o3) 0 a3; sind(o3) cosd(o3) 0 0; 0 0 1 0; 0 0 0 1];
% S4=[0 1 0 0; 1 0 0 0; 0 0 -1 -d2; 0 0 0 1];
% S5=S0*S1*S2*S3*S4;
% Ex=abs(S5(1,4)-Xf); % Error en x
% Ey=abs(S5(2,4)-Yf); % Error en y
% Ez=abs(S5(3,4)-Zf); % Error en z
% Ep=abs((Ex+Ey+Ez)/3); % Error promedio
% fprintf('Ex= %5.3f, Ey= %5.3f, Ez= %5.3f, Eprom= %5.3f\n',Ex,Ey,Ez,Ep)
% N=N+1;
% if (Ex<3.5) && (Ey<3.5) && (Ez<=0) || (Ep<7) && (Ez<=0)
% Matriz=S5
% Angulo1=Op1
% Angulo2=Op2
% x0=[0,0,0];y0=[0,0,0];z0=[0,0,0];
% x1=[0,0];y1=[0,0];z1=[0,a1];
% x2=[0,cosd(o1)*a2];y2=[0,sind(o1)*a2];z2=[a1,a1];
% x3=[cosd(o1)*a2,cosd(o1)*a2];y3=[sind(o1)*a2,sind(o1)*a2];z3=[a1,a1+d1];
% x4=[cosd(o1)*a2,(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y4=[sind(o1)*a2,(sind(o1)*a2)+(sind(o1+o2)*a3)];z4=[a1+d1,a1+d1];
% x5=[(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y5=[(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3)];z5=[a1+d1,a1+d1-d2,(a1+d1)+(a4-d2)];
% figure
% plot3(x0,y0,z0,'b','linewidth',3),grid on,hold on;
% plot3(x1,y1,z1,'b','linewidth',3),grid on,hold on;
% plot3(x2,y2,z2,'b','linewidth',3),grid on,hold on;
% plot3(x3,y3,z3,'b','linewidth',3),grid on,hold on;
% plot3(x4,y4,z4,'b','linewidth',3),grid on,hold on;
% plot3(x5,y5,z5,'b','linewidth',3),grid on,hold on;
% xlabel('X0'),ylabel('Y0'),zlabel('Z0');
% title(['BRAZO SCARA POSE ',num2str(N)]);
% Dyx=sqrt((((cosd(o1)*a2)+(cosd(o1+o2)*a3))^2)+(((sind(o1)*a2)+(sind(o1+o2)*a3))^2))
% Dxz=sqrt(((Dyx)^2)+((a1+d1-d2)^2))
% q=1;
% break;
% end
% q=0;
% end
% if q==1
% break;
% end
% end
% if q==1
% break;
% end
% end
- El tamaño de paso para este modelo es de 22.5°, si se desea otro valor modificar todos los cálculos en donde aparezca este valor.
% MODELADO DE BRAZO ROBOTICO SCARA
close all;
clear all;
clc;
%% Variables y constantes del brazo
syms x y z w
a1=101; % elemento uno
a2=59; % elemento dos
a3=60; % elemento tres
a4=102; % elemento cuatro, con actuador final
d1=15; % offset uno
d2=x; % offset dos variable
o1=y; % angulo uno
o2=z; % angulo dos
o3=w; % angulo tres, se dejo encero ya que no había actuador final, pero si hay debe tomarse en cuenta
%% Matriz de referencia
% S0=[cos(o1) -sin(o1) 0 0; sin(o1) cos(o1) 0 0; 0 0 1 a1; 0 0 0 1];
% S1=[1 0 0 a2; 0 1 0 0; 0 0 1 0; 0 0 0 1];
% S2=[cos(o2) -sin(o2) 0 0; sin(o2) cos(o2) 0 0; 0 0 1 d1; 0 0 0 1];
% S3=[cos(o3) -sin(o3) 0 a3; sin(o3) cos(o3) 0 0; 0 0 1 0; 0 0 0 1];
% S4=[0 1 0 0; 1 0 0 0; 0 0 -1 -d2; 0 0 0 1];
% S5=S0*S1*S2*S3*S4
%% Modelo del brazo en pose cero
% figure
% s0=[0,0,0];s1=[0,0,a1];s2=[a2,0,a1];s3=[a2,0,a1+d1];s4=[a2+a3,0,a1];s5=[a2+a3,0,a1+d1-(a4/2)];
% x0=[0,0];y0=[0,0];z0=[0,0];
% x1=[0,0];y1=[0,0];z1=[0,a1];
% x2=[0,a2];y2=[0,0];z2=[a1,a1];
% x3=[a2,a2];y3=[0,0];z3=[a1,a1+d1];
% x4=[a2,a2+a3];y4=[0,0];z4=[a1+d1,a1+d1];
% x5=[a2+a3,a2+a3];y5=[0,0];z5=[a1+d1,a1+d1-a4];
% plot3(x0,y0,z0,'b','linewidth',3),grid on,hold on;
% plot3(x1,y1,z1,'b','linewidth',3),grid on,hold on;
% plot3(x2,y2,z2,'b','linewidth',3),grid on,hold on;
% plot3(x3,y3,z3,'b','linewidth',3),grid on,hold on;
% plot3(x4,y4,z4,'b','linewidth',3),grid on,hold on;
% plot3(x5,y5,z5,'b','linewidth',3),grid on,hold on;
% xlabel('X0'),ylabel('Y0'),zlabel('Z0');
% title('BRAZO SCARA POSE CERO');
%% Mapeo de poses Establecidas
% N=1;
% n1=0;n2=0;
% for i=1 : 4
% Op1=i*(pi/4);
% m1=0;m2=0;
% for l=0 : 3
% fac2=m1+m2;
% m1=m1+1;
% if m1==3
% m2=2;
% else m2=0;
% end
% Op2=fac2*(pi/4);
% for m=0 : 2 : 6
% d2=2.5*m;
% Ap1=((180*(Op1))/pi)
% Ap2=((180*(Op2))/pi)
% S1=round(Ap1/22.5)*22.5; S2=round(Ap2/22.5)*22.5;
% o1=S1
% o2=S2
% o3=0;
% S0=[cosd(o1) -sind(o1) 0 0; sind(o1) cosd(o1) 0 0; 0 0 1 a1; 0 0 0 1];
% S1=[1 0 0 a2; 0 1 0 0; 0 0 1 0; 0 0 0 1];
% S2=[cosd(o2) -sind(o2) 0 0; sind(o2) cosd(o2) 0 0; 0 0 1 d1; 0 0 0 1];
% S3=[cosd(o3) -sind(o3) 0 a3; sind(o3) cosd(o3) 0 0; 0 0 1 0; 0 0 0 1];
% S4=[0 1 0 0; 1 0 0 0; 0 0 -1 -d2; 0 0 0 1];
% S5=S0*S1*S2*S3*S4
% x0=[0,0,0];y0=[0,0,0];z0=[0,0,0];
% x1=[0,0];y1=[0,0];z1=[0,a1];
% x2=[0,cosd(o1)*a2];y2=[0,sind(o1)*a2];z2=[a1,a1];
% x3=[cosd(o1)*a2,cosd(o1)*a2];y3=[sind(o1)*a2,sind(o1)*a2];z3=[a1,a1+d1];
% x4=[cosd(o1)*a2,(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y4=[sind(o1)*a2,(sind(o1)*a2)+(sind(o1+o2)*a3)];z4=[a1+d1,a1+d1];
% x5=[(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y5=[(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3)];z5=[a1+d1,a1+d1-d2,(a1+d1)+(a4-d2)];
% figure
% plot3(x0,y0,z0,'b','linewidth',3),grid on,hold on;
% plot3(x1,y1,z1,'b','linewidth',3),grid on,hold on;
% plot3(x2,y2,z2,'b','linewidth',3),grid on,hold on;
% plot3(x3,y3,z3,'b','linewidth',3),grid on,hold on;
% plot3(x4,y4,z4,'b','linewidth',3),grid on,hold on;
% plot3(x5,y5,z5,'b','linewidth',3),grid on,hold on;
% xlabel('X0'),ylabel('Y0'),zlabel('Z0');
% title(['BRAZO SCARA POSE ',num2str(N)]);
% Dyx=sqrt((((cosd(o1)*a2)+(cosd(o1+o2)*a3))^2)+(((sind(o1)*a2)+(sind(o1+o2)*a3))^2))
% Dxz=sqrt(((Dyx)^2)+((a1+d1-d2)^2))
% N=N+1
% end
% end
% end
%% Calculo de pose con vector final
% Xf=69; Yf=28; Zf=a1+d1-58; % cambiar estos valores para un vector final distinto
% N=0;
% for i=0 : 1 : 15
% Op1=i*22.5;
% for l=-7 : 1 : 7
% Op2=l*22.5;
% for m=a4 : -1 : 0
% d2=m;
% o1=(Op1);o2=(Op2);o3=0;
% S0=[cosd(o1) -sind(o1) 0 0; sind(o1) cosd(o1) 0 0; 0 0 1 a1; 0 0 0 1];
% S1=[1 0 0 a2; 0 1 0 0; 0 0 1 0; 0 0 0 1];
% S2=[cosd(o2) -sind(o2) 0 0; sind(o2) cosd(o2) 0 0; 0 0 1 d1; 0 0 0 1];
% S3=[cosd(o3) -sind(o3) 0 a3; sind(o3) cosd(o3) 0 0; 0 0 1 0; 0 0 0 1];
% S4=[0 1 0 0; 1 0 0 0; 0 0 -1 -d2; 0 0 0 1];
% S5=S0*S1*S2*S3*S4;
% Ex=abs(S5(1,4)-Xf); % Error en x
% Ey=abs(S5(2,4)-Yf); % Error en y
% Ez=abs(S5(3,4)-Zf); % Error en z
% Ep=abs((Ex+Ey+Ez)/3); % Error promedio
% fprintf('Ex= %5.3f, Ey= %5.3f, Ez= %5.3f, Eprom= %5.3f\n',Ex,Ey,Ez,Ep)
% N=N+1;
% if (Ex<3.5) && (Ey<3.5) && (Ez<=0) || (Ep<7) && (Ez<=0)
% Matriz=S5
% Angulo1=Op1
% Angulo2=Op2
% x0=[0,0,0];y0=[0,0,0];z0=[0,0,0];
% x1=[0,0];y1=[0,0];z1=[0,a1];
% x2=[0,cosd(o1)*a2];y2=[0,sind(o1)*a2];z2=[a1,a1];
% x3=[cosd(o1)*a2,cosd(o1)*a2];y3=[sind(o1)*a2,sind(o1)*a2];z3=[a1,a1+d1];
% x4=[cosd(o1)*a2,(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y4=[sind(o1)*a2,(sind(o1)*a2)+(sind(o1+o2)*a3)];z4=[a1+d1,a1+d1];
% x5=[(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3),(cosd(o1)*a2)+(cosd(o1+o2)*a3)];y5=[(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3),(sind(o1)*a2)+(sind(o1+o2)*a3)];z5=[a1+d1,a1+d1-d2,(a1+d1)+(a4-d2)];
% figure
% plot3(x0,y0,z0,'b','linewidth',3),grid on,hold on;
% plot3(x1,y1,z1,'b','linewidth',3),grid on,hold on;
% plot3(x2,y2,z2,'b','linewidth',3),grid on,hold on;
% plot3(x3,y3,z3,'b','linewidth',3),grid on,hold on;
% plot3(x4,y4,z4,'b','linewidth',3),grid on,hold on;
% plot3(x5,y5,z5,'b','linewidth',3),grid on,hold on;
% xlabel('X0'),ylabel('Y0'),zlabel('Z0');
% title(['BRAZO SCARA POSE ',num2str(N)]);
% Dyx=sqrt((((cosd(o1)*a2)+(cosd(o1+o2)*a3))^2)+(((sind(o1)*a2)+(sind(o1+o2)*a3))^2))
% Dxz=sqrt(((Dyx)^2)+((a1+d1-d2)^2))
% q=1;
% break;
% end
% q=0;
% end
% if q==1
% break;
% end
% end
% if q==1
% break;
% end
% end
Etiquetas:Progrmacion ,C++, Practicas programacion
MATLAB
viernes, 13 de mayo de 2016
Control de apertura de pinzas con sensor de Fuerza
-- Control de apertura de pinzas montadas en servo motor HS322 para sostener objetos utilizando un sensor de fuerza FSR400.
#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#DEVICE adc=10 // CONFIGURACION DE LA ESCALA DEL ADC
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
VOID LONG_DELAY_US(LONG C); // FUNCIÓN DE DELAY EXACTO PARA EL MOTOR
INT BUTTON; // BOTON DE OPERACIÓN
INT16 T=0; // VQARIABLE DE TIEMPO
INT I, I2; // VARIABLES DE CICLOS
INT16 VAL; // VARIABLE DE LECTURA ACTUAL
VOID MAIN(){
// CONFIGURACIÓN DEL PUERTO A COMO ANALOGICO
SETUP_PORT_A(ALL_ANALOG); // TODO EL PUERTO A COMO ANALOGICO
SETUP_ADC(ADC_CLOCK_INTERNAL); // RELOG INTERNO DEL CONV. A/D
SET_ADC_CHANNEL(0); // SELECCIONA EL CANAL 0
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA CONFIGURACION INICIAL
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(300); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR INICIAL
WHILE(1){
BUTTON=INPUT_B(); // BOTON DE STOP PUERTO E
IF(BUTTON==0X00){ // REVISA EL BOTÓN
ABRE: // SECCIÓN PARA ABRIR PINZAS
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA BRIR LAS PINZAS
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(1050); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR OPEN
T=1050; // COLOCA LA VARIABLE T EN EL ULTIMO ANCHO DE PULSO
DELAY_MS(2000); // ESPERA DOS SEGUNDOS
} // CONDICION DE ABRIR PINZAS
ELSE IF(BUTTON==0X01 && T==1050){ // CONDICIÓN PARA CERRAR PINZAS
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA CERRAR LAS PINZAS
VAL=READ_ADC(); // SE ASIGNA A VAR LA LECTURA DEL CANAL 0
T=T-30; // DISMUNUYE EL VALOR DE T
IF(VAL<=740){ // CONDICIÓN DEL SENSOR
T=T-10; // AJUSTA LA VARIABLE DEL ANCHO DE PULSO
FOR(I2=0;I2<200;I2++){ // CICLOS DE AJUSTE
BUTTON=INPUT_B(); // BOTON DE STOP PUERTO E
IF(BUTTON==0X00){ // REVISA EL BOTÓN
GOTO ABRE; // VE A LA SECCIÓN DE ABRIR PINZAS
} // CONDICIÓN DE ABRIR LAS PINZAS
FOR(I=0;I<10;I++){ // CICLOS DE AJUSTE
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(T); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
}}} // CICLOS DE AJUSTE
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(200); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR CLOSE
} // CONDICIÓN DE CERRA PINZAS
} // WHILE
} //MAIN
// FUNCION DE DELAY EN US
VOID LONG_DELAY_US(LONG C){
CHAR i; // VARIABLE DE CONDICION
i=(CHAR)(C>>8); // IGUALA I A C EN 8 BITS
WHILE(I >= 1) { // CONDICION DE TIEMPO MINIMO
I--; // LA VARIABLE VA DISMINUYENDO
DELAY_US(253); // DELAY DE 253 US
RESTART_WDT(); // RESETEA EL CONTADOR DEL WATCHDOG
} // WHILE
DELAY_US((CHAR)C);
} //FUNCION DELAY US
#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#DEVICE adc=10 // CONFIGURACION DE LA ESCALA DEL ADC
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
VOID LONG_DELAY_US(LONG C); // FUNCIÓN DE DELAY EXACTO PARA EL MOTOR
INT BUTTON; // BOTON DE OPERACIÓN
INT16 T=0; // VQARIABLE DE TIEMPO
INT I, I2; // VARIABLES DE CICLOS
INT16 VAL; // VARIABLE DE LECTURA ACTUAL
VOID MAIN(){
// CONFIGURACIÓN DEL PUERTO A COMO ANALOGICO
SETUP_PORT_A(ALL_ANALOG); // TODO EL PUERTO A COMO ANALOGICO
SETUP_ADC(ADC_CLOCK_INTERNAL); // RELOG INTERNO DEL CONV. A/D
SET_ADC_CHANNEL(0); // SELECCIONA EL CANAL 0
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA CONFIGURACION INICIAL
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(300); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR INICIAL
WHILE(1){
BUTTON=INPUT_B(); // BOTON DE STOP PUERTO E
IF(BUTTON==0X00){ // REVISA EL BOTÓN
ABRE: // SECCIÓN PARA ABRIR PINZAS
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA BRIR LAS PINZAS
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(1050); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR OPEN
T=1050; // COLOCA LA VARIABLE T EN EL ULTIMO ANCHO DE PULSO
DELAY_MS(2000); // ESPERA DOS SEGUNDOS
} // CONDICION DE ABRIR PINZAS
ELSE IF(BUTTON==0X01 && T==1050){ // CONDICIÓN PARA CERRAR PINZAS
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA CERRAR LAS PINZAS
VAL=READ_ADC(); // SE ASIGNA A VAR LA LECTURA DEL CANAL 0
T=T-30; // DISMUNUYE EL VALOR DE T
IF(VAL<=740){ // CONDICIÓN DEL SENSOR
T=T-10; // AJUSTA LA VARIABLE DEL ANCHO DE PULSO
FOR(I2=0;I2<200;I2++){ // CICLOS DE AJUSTE
BUTTON=INPUT_B(); // BOTON DE STOP PUERTO E
IF(BUTTON==0X00){ // REVISA EL BOTÓN
GOTO ABRE; // VE A LA SECCIÓN DE ABRIR PINZAS
} // CONDICIÓN DE ABRIR LAS PINZAS
FOR(I=0;I<10;I++){ // CICLOS DE AJUSTE
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(T); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
}}} // CICLOS DE AJUSTE
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(200); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR CLOSE
} // CONDICIÓN DE CERRA PINZAS
} // WHILE
} //MAIN
// FUNCION DE DELAY EN US
VOID LONG_DELAY_US(LONG C){
CHAR i; // VARIABLE DE CONDICION
i=(CHAR)(C>>8); // IGUALA I A C EN 8 BITS
WHILE(I >= 1) { // CONDICION DE TIEMPO MINIMO
I--; // LA VARIABLE VA DISMINUYENDO
DELAY_US(253); // DELAY DE 253 US
RESTART_WDT(); // RESETEA EL CONTADOR DEL WATCHDOG
} // WHILE
DELAY_US((CHAR)C);
} //FUNCION DELAY US
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
Fución de contador con visualización en LCD
VOID DELAY(INT T); // ENCABEZADO DE LA FUNCIÓN
DELAY(10); // USO DELA FUNCIÓN PARA CONTAR 10 SEGUNDOS
// FUNCION DELAY EN S
VOID DELAY(INT T){ // T SON LOS SEGUNDOS QUE SE DESEA CONTAR
INT C=0;
FOR(C;C<(T+1);C++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",C);
LCD_PUTC("s ");
DELAY_MS(1000);
} // FOR
} // FUNCION DELAY
DELAY(10); // USO DELA FUNCIÓN PARA CONTAR 10 SEGUNDOS
// FUNCION DELAY EN S
VOID DELAY(INT T){ // T SON LOS SEGUNDOS QUE SE DESEA CONTAR
INT C=0;
FOR(C;C<(T+1);C++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",C);
LCD_PUTC("s ");
DELAY_MS(1000);
} // FOR
} // FUNCION DELAY
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
Secuencia de Movimiento para un servo HS322 con visualización en LCD y pulsación de un laser
#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
// DEFINICION DE LAS CONEXIONES DE LA LCD AL PIC
#DEFINE LCD_DB4 PIN_B4
#DEFINE LCD_DB5 PIN_B5
#DEFINE LCD_DB6 PIN_B6
#DEFINE LCD_DB7 PIN_B7
#DEFINE LCD_RS PIN_B2
#DEFINE LCD_E PIN_B3
#INCLUDE <lcd1.c>
INT N; // CONTADOR DEL CICLO DE 3
INT D; // CONTADOR DE REPETICIONES
INT L; // CONTADOR DEL LASER
INT I; // CONTADOR DE LOS PULSOS
INT ENC; // ENTRADA DEL ENCODER
VOID MAIN(){
LCD_INIT();
FOR(I=0;I<30;I++){
OUTPUT_C(0X00); // APAGA EL LASER
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN NEUTRO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_PUTC("\fSERVO NEUTRO");
} // FOR
WHILE(1){
FOR(N=1;N<4;N++){
OUTPUT_E(0X00); // APAGA EL LASER
LCD_PUTC("\fCICLO: "); // NUMERO DEL CICLO DE 3
PRINTF(LCD_PUTC,"%u",N);
DELAY_MS(1000);
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
LCD_PUTC("\fSECUENCIA P1"); // INICIA LA SECUENCIA DE LA PRACTICA 1
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SERVO: 0");
LCD_PUTC(", ENC: 0");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1050); // COLOCA EL SERVO EN 135°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:135, ");
LCD_PUTC("ED:157.5");
} // FOR
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\fREPETICIONES: ");
PRINTF(LCD_PUTC,"%u",D);
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:0, ");
LCD_PUTC("ED:0");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:180, ");
LCD_PUTC("ED:202.5");
} // FOR
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN 90°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:90, ");
LCD_PUTC("ED:67.5");
} // FOR
FOR(D=1;D<11;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\fREPETICIONES: ");
PRINTF(LCD_PUTC,"%u",D);
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:180, ");
LCD_PUTC("ED:202.5");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN 90°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:90, ");
LCD_PUTC("ED:67.5");
} // FOR
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2250); // COLOCA EL SERVO EN 15°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:15, ");
LCD_PUTC("ED:0");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2100); // COLOCA EL SERVO EN 30°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:30, ");
LCD_PUTC("ED:0");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1950); // COLOCA EL SERVO EN 45°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:45, ");
LCD_PUTC("ED:22.5");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1800); // COLOCA EL SERVO EN 60°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:60, ");
LCD_PUTC("ED:45");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
} // FOR DE CILO DE 3
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1050); // COLOCA EL SERVO EN 135°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:135, ");
LCD_PUTC("ED:157.5");
} // FOR
FOR(L=0;L<5;L++){
OUTPUT_E(0X01); // ENCIENDE EL LASER
LCD_GOTOXY(1,2);
LCD_PUTC("LASER PULSANDO"); // ESPLIEGA MENSAJE DE SALER PULANDO
DELAY_MS(500);
OUTPUT_E(0X00); // APAGA EL LASER
DELAY_MS(500);
} // FOR LASER
} // WHILE
} //MAIN
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
// DEFINICION DE LAS CONEXIONES DE LA LCD AL PIC
#DEFINE LCD_DB4 PIN_B4
#DEFINE LCD_DB5 PIN_B5
#DEFINE LCD_DB6 PIN_B6
#DEFINE LCD_DB7 PIN_B7
#DEFINE LCD_RS PIN_B2
#DEFINE LCD_E PIN_B3
#INCLUDE <lcd1.c>
INT N; // CONTADOR DEL CICLO DE 3
INT D; // CONTADOR DE REPETICIONES
INT L; // CONTADOR DEL LASER
INT I; // CONTADOR DE LOS PULSOS
INT ENC; // ENTRADA DEL ENCODER
VOID MAIN(){
LCD_INIT();
FOR(I=0;I<30;I++){
OUTPUT_C(0X00); // APAGA EL LASER
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN NEUTRO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_PUTC("\fSERVO NEUTRO");
} // FOR
WHILE(1){
FOR(N=1;N<4;N++){
OUTPUT_E(0X00); // APAGA EL LASER
LCD_PUTC("\fCICLO: "); // NUMERO DEL CICLO DE 3
PRINTF(LCD_PUTC,"%u",N);
DELAY_MS(1000);
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
LCD_PUTC("\fSECUENCIA P1"); // INICIA LA SECUENCIA DE LA PRACTICA 1
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SERVO: 0");
LCD_PUTC(", ENC: 0");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1050); // COLOCA EL SERVO EN 135°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:135, ");
LCD_PUTC("ED:157.5");
} // FOR
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\fREPETICIONES: ");
PRINTF(LCD_PUTC,"%u",D);
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:0, ");
LCD_PUTC("ED:0");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:180, ");
LCD_PUTC("ED:202.5");
} // FOR
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN 90°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:90, ");
LCD_PUTC("ED:67.5");
} // FOR
FOR(D=1;D<11;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\fREPETICIONES: ");
PRINTF(LCD_PUTC,"%u",D);
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:180, ");
LCD_PUTC("ED:202.5");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN 90°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:90, ");
LCD_PUTC("ED:67.5");
} // FOR
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2250); // COLOCA EL SERVO EN 15°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:15, ");
LCD_PUTC("ED:0");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2100); // COLOCA EL SERVO EN 30°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:30, ");
LCD_PUTC("ED:0");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1950); // COLOCA EL SERVO EN 45°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:45, ");
LCD_PUTC("ED:22.5");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1800); // COLOCA EL SERVO EN 60°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:60, ");
LCD_PUTC("ED:45");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
} // FOR DE CILO DE 3
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1050); // COLOCA EL SERVO EN 135°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:135, ");
LCD_PUTC("ED:157.5");
} // FOR
FOR(L=0;L<5;L++){
OUTPUT_E(0X01); // ENCIENDE EL LASER
LCD_GOTOXY(1,2);
LCD_PUTC("LASER PULSANDO"); // ESPLIEGA MENSAJE DE SALER PULANDO
DELAY_MS(500);
OUTPUT_E(0X00); // APAGA EL LASER
DELAY_MS(500);
} // FOR LASER
} // WHILE
} //MAIN
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
Control de LCD con PIC 16F877A
#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
VOID MAIN(){
lcd_init();
FOR(;;){
lcd_putc("\f ICH HABE WASSER");
delay_ms(200);
} // FOR
} //MAIN
lnk para descargar la librería de la LDC, lcd1.c: http://microstronic.blogspot.mx/2015/04/modulos-lcd.html
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B2
#define LCD_E PIN_B3
#include <lcd1.c>
VOID MAIN(){
lcd_init();
FOR(;;){
lcd_putc("\f ICH HABE WASSER");
delay_ms(200);
} // FOR
} //MAIN
lnk para descargar la librería de la LDC, lcd1.c: http://microstronic.blogspot.mx/2015/04/modulos-lcd.html
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
Lectura de un encoder rotativo acoplado a servo HS322
El tamaño de paso para este encoder en especifico es de 22.5 grados.
#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
// DEFINICION DE LAS CONEXIONES DE LA LCD AL PIC
#DEFINE LCD_DB4 PIN_B4
#DEFINE LCD_DB5 PIN_B5
#DEFINE LCD_DB6 PIN_B6
#DEFINE LCD_DB7 PIN_B7
#DEFINE LCD_RS PIN_B2
#DEFINE LCD_E PIN_B3
#INCLUDE <lcd1.c>
INT D; // CONTADOR DE REPETICIONES
INT I; // CONTADOR DE LOS PULSOS
INT ENC;
VOID MAIN(){
LCD_INIT();
while(1){
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\f");
FOR(I=0;I<20;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(200000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
ENC=INPUT_A(); // VALOR DE ENCODER IGUAL AL PUERTO A
// COMPARA EL VALOR DE ENC PARA DETERMINAR EL ANGULO
IF(ENC==0X00){ // COMPARA CON CERO
LCD_PUTC("\fENC:0");
} // IF
ELSE IF(ENC==0X01){ // COMPARA CON UNO
LCD_PUTC("\fED:22.5");
} // ELSE IF
ELSE IF(ENC==0X02){ // COMPARA CON DOS
LCD_PUTC("\fED:45");
} // ELSE IF
ELSE IF(ENC==0X03){ // COMPARA CON TRES
LCD_PUTC("\fED:67.5");
} // ELSE IF
ELSE IF(ENC==0X04){ // COMPARA CON CUATRO
LCD_PUTC("\fED:90");
} // ELSE IF
ELSE IF(ENC==0X05){ // COMPARA CON CINCO
LCD_PUTC("\fED:112.5");
} // ELSE IF
ELSE IF(ENC==0X06){ // COMPARA CON SEIS
LCD_PUTC("\fED:135");
} // ELSE IF
ELSE IF(ENC==0X07){ // COMPARA CON SIETE
LCD_PUTC("\fED:157.5");
} // ELSE IF
ELSE IF(ENC==0X08){ // COMPARA CON OCHO
LCD_PUTC("\fED:180");
} // ELSE IF
ELSE IF(ENC==0X09){ // COMPARA CON NUEVE
LCD_PUTC("\fED:202.5");
} // ELSE IF
ELSE IF(ENC==0X10){ // COMPARA CON DIES
LCD_PUTC("\fED:225");
} // ELSE IF
} // FOR
FOR(I=0;I<20;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(200000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
ENC=INPUT_A(); // VALOR DE ENCODER IGUAL AL PUERTO A
// COMPARA EL VALOR DE ENC PARA DETERMINAR EL ANGULO
IF(ENC==0X00){ // COMPARA CON CERO
LCD_PUTC("\fENC:0");
} // IF
ELSE IF(ENC==0X01){ // COMPARA CON UNO
LCD_PUTC("\fED:22.5");
} // ELSE IF
ELSE IF(ENC==0X02){ // COMPARA CON DOS
LCD_PUTC("\fED:45");
} // ELSE IF
ELSE IF(ENC==0X03){ // COMPARA CON TRES
LCD_PUTC("\fED:67.5");
} // ELSE IF
ELSE IF(ENC==0X04){ // COMPARA CON CUATRO
LCD_PUTC("\fED:90");
} // ELSE IF
ELSE IF(ENC==0X05){ // COMPARA CON CINCO
LCD_PUTC("\fED:112.5");
} // ELSE IF
ELSE IF(ENC==0X06){ // COMPARA CON SEIS
LCD_PUTC("\fED:135");
} // ELSE IF
ELSE IF(ENC==0X07){ // COMPARA CON SIETE
LCD_PUTC("\fED:157.5");
} // ELSE IF
ELSE IF(ENC==0X08){ // COMPARA CON OCHO
LCD_PUTC("\fED:180");
} // ELSE IF
ELSE IF(ENC==0X09){ // COMPARA CON NUEVE
LCD_PUTC("\fED:202.5");
} // ELSE IF
ELSE IF(ENC==0X10){ // COMPARA CON DIES
LCD_PUTC("\fED:225");
} // ELSE IF
} // FOR
} // FOR
} // WHILE
} //MAIN
#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
// DEFINICION DE LAS CONEXIONES DE LA LCD AL PIC
#DEFINE LCD_DB4 PIN_B4
#DEFINE LCD_DB5 PIN_B5
#DEFINE LCD_DB6 PIN_B6
#DEFINE LCD_DB7 PIN_B7
#DEFINE LCD_RS PIN_B2
#DEFINE LCD_E PIN_B3
#INCLUDE <lcd1.c>
INT D; // CONTADOR DE REPETICIONES
INT I; // CONTADOR DE LOS PULSOS
INT ENC;
VOID MAIN(){
LCD_INIT();
while(1){
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\f");
FOR(I=0;I<20;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(200000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
ENC=INPUT_A(); // VALOR DE ENCODER IGUAL AL PUERTO A
// COMPARA EL VALOR DE ENC PARA DETERMINAR EL ANGULO
IF(ENC==0X00){ // COMPARA CON CERO
LCD_PUTC("\fENC:0");
} // IF
ELSE IF(ENC==0X01){ // COMPARA CON UNO
LCD_PUTC("\fED:22.5");
} // ELSE IF
ELSE IF(ENC==0X02){ // COMPARA CON DOS
LCD_PUTC("\fED:45");
} // ELSE IF
ELSE IF(ENC==0X03){ // COMPARA CON TRES
LCD_PUTC("\fED:67.5");
} // ELSE IF
ELSE IF(ENC==0X04){ // COMPARA CON CUATRO
LCD_PUTC("\fED:90");
} // ELSE IF
ELSE IF(ENC==0X05){ // COMPARA CON CINCO
LCD_PUTC("\fED:112.5");
} // ELSE IF
ELSE IF(ENC==0X06){ // COMPARA CON SEIS
LCD_PUTC("\fED:135");
} // ELSE IF
ELSE IF(ENC==0X07){ // COMPARA CON SIETE
LCD_PUTC("\fED:157.5");
} // ELSE IF
ELSE IF(ENC==0X08){ // COMPARA CON OCHO
LCD_PUTC("\fED:180");
} // ELSE IF
ELSE IF(ENC==0X09){ // COMPARA CON NUEVE
LCD_PUTC("\fED:202.5");
} // ELSE IF
ELSE IF(ENC==0X10){ // COMPARA CON DIES
LCD_PUTC("\fED:225");
} // ELSE IF
} // FOR
FOR(I=0;I<20;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(200000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
ENC=INPUT_A(); // VALOR DE ENCODER IGUAL AL PUERTO A
// COMPARA EL VALOR DE ENC PARA DETERMINAR EL ANGULO
IF(ENC==0X00){ // COMPARA CON CERO
LCD_PUTC("\fENC:0");
} // IF
ELSE IF(ENC==0X01){ // COMPARA CON UNO
LCD_PUTC("\fED:22.5");
} // ELSE IF
ELSE IF(ENC==0X02){ // COMPARA CON DOS
LCD_PUTC("\fED:45");
} // ELSE IF
ELSE IF(ENC==0X03){ // COMPARA CON TRES
LCD_PUTC("\fED:67.5");
} // ELSE IF
ELSE IF(ENC==0X04){ // COMPARA CON CUATRO
LCD_PUTC("\fED:90");
} // ELSE IF
ELSE IF(ENC==0X05){ // COMPARA CON CINCO
LCD_PUTC("\fED:112.5");
} // ELSE IF
ELSE IF(ENC==0X06){ // COMPARA CON SEIS
LCD_PUTC("\fED:135");
} // ELSE IF
ELSE IF(ENC==0X07){ // COMPARA CON SIETE
LCD_PUTC("\fED:157.5");
} // ELSE IF
ELSE IF(ENC==0X08){ // COMPARA CON OCHO
LCD_PUTC("\fED:180");
} // ELSE IF
ELSE IF(ENC==0X09){ // COMPARA CON NUEVE
LCD_PUTC("\fED:202.5");
} // ELSE IF
ELSE IF(ENC==0X10){ // COMPARA CON DIES
LCD_PUTC("\fED:225");
} // ELSE IF
} // FOR
} // FOR
} // WHILE
} //MAIN
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
Función para el control de un servomotor HS322
Para el uso de la función solo restaría hacer la declaración de la misma en los encabezados del código, seria de la siguiente forma:
VOID SERVO(INT16 U, INT16 D);
VOID LONG_DELAY_US(LONG C);
La variable U es el ángulo de apertura t la variable D es el tiempo del pulso en cero se puede usar 20000, pero depende de la velocidad que se desee para el servo.
// FUNCION DE CONTROL DE SERVO
VOID SERVO(INT16 U, INT16 D){
INT I; // REPETICIONES DE LOS PULSOS
INT16 T; // VQARIABLE DE TIEMPO
T=2400-(U*10); // CALCULA EL TIEMPO DEL PULSO
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(T);
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(D); // DELAY DE APAGADO
} // FOR
} // FUNCION SERVO
-- JUNTAR CON DELAY US
// FUNCION DE DELAY EN US
VOID LONG_DELAY_US(LONG C){
CHAR i; // VARIABLE DE CONDICION
i=(CHAR)(C>>8); // IGUALA I A C EN 8 BITS
WHILE(I >= 1) { // CONDICION DE TIEMPO MINIMO
I--; // LA VARIABLE VA DISMINUYENDO
DELAY_US(253); // DELAY DE 253 US
RESTART_WDT(); // RESETEA EL CONTADOR DEL WATCHDOG
} // WHILE
DELAY_US((CHAR)C);
} //FUNCION DELAY US
VOID SERVO(INT16 U, INT16 D);
VOID LONG_DELAY_US(LONG C);
La variable U es el ángulo de apertura t la variable D es el tiempo del pulso en cero se puede usar 20000, pero depende de la velocidad que se desee para el servo.
// FUNCION DE CONTROL DE SERVO
VOID SERVO(INT16 U, INT16 D){
INT I; // REPETICIONES DE LOS PULSOS
INT16 T; // VQARIABLE DE TIEMPO
T=2400-(U*10); // CALCULA EL TIEMPO DEL PULSO
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(T);
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(D); // DELAY DE APAGADO
} // FOR
} // FUNCION SERVO
-- JUNTAR CON DELAY US
// FUNCION DE DELAY EN US
VOID LONG_DELAY_US(LONG C){
CHAR i; // VARIABLE DE CONDICION
i=(CHAR)(C>>8); // IGUALA I A C EN 8 BITS
WHILE(I >= 1) { // CONDICION DE TIEMPO MINIMO
I--; // LA VARIABLE VA DISMINUYENDO
DELAY_US(253); // DELAY DE 253 US
RESTART_WDT(); // RESETEA EL CONTADOR DEL WATCHDOG
} // WHILE
DELAY_US((CHAR)C);
} //FUNCION DELAY US
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
viernes, 11 de marzo de 2016
Controlador cable DB9 de STEREN
Llink : http://www.miklor.com/COM/UV_Drivers.php
Para windows 8 en adelante
Para windows 8 en adelante
lunes, 18 de enero de 2016
Control de voz con aplicaicon
La aplicación se creo en App inventor, se basa en programación por bloques, en you tube existen muchos vídeos tutoriales de como se utiliza, en este post solo se mostraran lo bloques utilizados y la apariencia de la aplicaron.
Bloques
Apariencia de la aplicación
Código de comunicaron con el PIC en C
Bloques
Código de comunicaron con el PIC en C
#INCLUDE <16F877.H> //
LIBRERIA DEL PIC A UTILIZAR
#FUSES XT, NOPROTECT, // CODIGO
NO PROTEGIDO
#USE DELAY(CLOCK=4000000) //
SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8,
PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID
LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
CHAR COMANDO; // COMANDO DE CONTROL
VOID MAIN(){
WHILE(TRUE){
COMANDO=GETC(); // LEE EL DATO
DEL BLUETOOTH
IF(COMANDO=='0'){ // MOTOR
APAGADO
OUTPUT_LOW(PIN_D0); // PON D0 EN
BAJO
OUTPUT_LOW(PIN_D1); // PON D1 EN BAJO
}// IF
ELSE IF(COMANDO=='1'){ // GIRA
MOTOR PARA ABRIR LA VENTANA
OUTPUT_HIGH(PIN_D0); // PON D0 EN ALTO
OUTPUT_LOW(PIN_D1); // PON D1 EN BAJO
}// ELSE IF
ELSE
IF(COMANDO=='2'){ // GIRA MOTOR PARA CERRAR VENTANA
OUTPUT_LOW(PIN_D0); // PON D0 EN BAJO
OUTPUT_HIGH(PIN_D1); // PON D1 EN ALTO
}// ELSE IF
ELSE IF(COMANDO=='a'){
// ENCIENDE FOCO DE LA SALA
OUTPUT_LOW(PIN_D2); // ON D2 EN BAJO
}// ELSE IF
ELSE IF(COMANDO=='b'){ // APAGA
FOCO DE LA SALA
OUTPUT_HIGH(PIN_D2); // PON D2 EN ALTO
}// ELSE IF
ELSE IF(COMANDO=='c'){ //
ENCIENDE FOCO DE LA COCINA
OUTPUT_LOW(PIN_D3); // PON D3 EN BAJO
}// ELSE IF
ELSE
IF(COMANDO=='d'){ // APAGA FOCO DE LA COCINA
OUTPUT_HIGH(PIN_D3); // PON D3 EN ALTO
}// ELSE IF
ELSE IF(COMANDO=='e'){ //
ENCIENDE FOCO DEL BAÑO
OUTPUT_LOW(PIN_C4); // PON D4 EN BAJO
}// ELSE IF
ELSE
IF(COMANDO=='f'){ // APAGA FOCO DEL BAÑO
OUTPUT_HIGH(PIN_C4); // PON D4 EN ALTO
}// ELSE IF
}// WHILE
}// MAIN
Etiquetas:Progrmacion ,C++, Practicas programacion
C (CCS)
Suscribirse a:
Entradas (Atom)