{ RoboLinex 1.5 Programa de control de dispositivos RCX de Lego en entorno grfico. Copyright (C) 2003 Prodel S.A Programador: Daniel Pascual Dominguez Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU según es publicada por la Free Software Foundation, bien de la versión 2 de dicha Licencia o bien (según su elección) de cualquier versión posterior. Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la Licencia Pública General de GNU para más detalles. Debería haber recibido una copia de la Licencia Pública General junto con este programa. Si no ha sido así, escriba a la Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU. } unit Unit9; interface uses {$IFDEF LINUX} Libc, {$ENDIF} Qt {Windows}, {Messages} SysUtils, Variants, Classes, QGraphics, QControls, QForms, QDialogs, QExtCtrls, QStdCtrls,Unit2,unit4,Unit6,fpuertos, Unit8, QButtons; type Tpilot33 = class(TForm) Image2: TImage; Image3: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Image1: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; BitBtn1: TBitBtn; Image8: TImage; enviando: TLabel; procedure Image2Click(Sender: TObject); procedure Image3Click(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image6Click(Sender: TObject); procedure Image7Click(Sender: TObject); procedure Image4Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure Image8Click(Sender: TObject); private { Private declarations } SaveDialog1: TSaveDialog; public { Public declarations } salida1:Tfsalidas; salida2:Tfsalidas; salida3:Tfsalidas; salida4:Tfsalidas; salida5:Tfsalidas; salida6:Tfsalidas; sensor:Tfentradas; sensor1:Tfentradas; tipoejecucion:tejecucion; procedure mandardatos; procedure inicializar; end; var pilot33: Tpilot33; implementation uses Unit7, Unit1, ppruebas, ffunciones; {$R *.xfm} procedure Tpilot33.inicializar; begin show; tipoejecucion:=normal; image4.picture:=NIL; Application.CreateForm(Tfentradas, sensor1); Application.CreateForm(Tfsalidas, salida6); Application.CreateForm(Tfsalidas, salida5); Application.CreateForm(Tfsalidas, salida4); Application.CreateForm(Tfentradas, sensor); Application.CreateForm(Tfsalidas, salida3); Application.CreateForm(Tfsalidas, salida2); Application.CreateForm(Tfsalidas, salida1); sensor1.inicializar(0,pilot33.Left+505+20,pilot33.top+240,'7',3,0,'2'); sensor1.Show; sensor1.selecentrada.show; salida6.inicializar(0,pilot33.Left+440+20,pilot33.top+240,2,2,1,'C',3); salida6.Show; salida6.fpotencia.Show; salida5.inicializar(0,pilot33.Left+375+20,pilot33.top+240,3,2,1,'B',3); salida5.Show; salida5.fpotencia.Show; salida4.inicializar(0,pilot33.Left+310+20,pilot33.top+240,1,2,1,'A',5); salida4.Show; salida4.fpotencia.Show; sensor.inicializar(0,pilot33.Left+245,pilot33.top+240,'4',3,0,'1'); sensor.Show; sensor.selecentrada.show; salida3.inicializar(0,pilot33.Left+180,pilot33.top+240,2,2,1,'C',3); salida3.Show; salida3.fpotencia.Show; salida2.inicializar(0,pilot33.Left+115,pilot33.top+240,3,2,1,'B',3); salida2.fpotencia.Show; salida2.Show; salida1.inicializar(0,pilot33.Left+50,pilot33.top+240,1,2,1,'A',5); salida1.Show; salida1.fpotencia.Show; end; procedure Tpilot33.mandardatos(); var fichero: textfile; cadena:PChar; dire,cadena1,cad:string; //fichero: tpersistent; begin dire:= GetCurrentDir; assignfile(fichero,dire+'/programa.nqc'); // showmessage(dire); rewrite(fichero); writeln(fichero,''); writeln(fichero,'task main()'); writeln(fichero,'{'); writeln(fichero,pilot33.sensor.dar_comando_ini); writeln(fichero,pilot33.sensor1.dar_comando_ini); writeln(fichero,'start programa;'); writeln(fichero,'}'); writeln(fichero,'task programa()'); writeln(fichero,'{'); if tipoejecucion=continua then begin writeln(fichero,'while (1==1)'); writeln(fichero,'{'); end; writeln(fichero,pilot33.salida1.dar_comando); writeln(fichero,pilot33.salida1.dar_potencia); writeln(fichero,pilot33.salida2.dar_comando); writeln(fichero,pilot33.salida2.dar_potencia); writeln(fichero,pilot33.salida3.dar_comando); writeln(fichero,pilot33.salida3.dar_potencia); writeln(fichero,pilot33.sensor.dar_comando); writeln(fichero,pilot33.sensor.dar_comando_fin); writeln(fichero,pilot33.sensor.dar_comando_clear); writeln(fichero,pilot33.salida4.dar_comando); writeln(fichero,pilot33.salida4.dar_potencia); writeln(fichero,pilot33.salida5.dar_comando); writeln(fichero,pilot33.salida5.dar_potencia); writeln(fichero,pilot33.salida6.dar_comando); writeln(fichero,pilot33.salida6.dar_potencia); writeln(fichero,pilot33.sensor1.dar_comando); writeln(fichero,pilot33.sensor1.dar_comando_fin); writeln(fichero,'Off(OUT_A);'); writeln(fichero,'Off(OUT_B);'); writeln(fichero,'Off(OUT_C);'); if tipoejecucion=continua then writeln(fichero,'}'); writeln(fichero,'}'); // if tipoejecucion=continua then // writeln(fichero,'Start main;'); closefile(fichero); cadena:=PChar('/usr/bin/nqc -S'+puertoactivo+' -d '+dire+'/programa.nqc'); Libc.system(cadena); // showmessage(cadena); end; procedure Tpilot33.Image2Click(Sender: TObject); begin salida1.Visible:=false; salida2.Visible:=false; salida3.Visible:=false; salida4.Visible:=false; salida5.Visible:=false; salida6.Visible:=false; sensor.Visible:=false; sensor1.Visible:=false; salida1.fpotencia.visible:=false; salida2.fpotencia.visible:=false; salida3.fpotencia.visible:=false; salida4.fpotencia.visible:=false; salida5.fpotencia.visible:=false; salida6.fpotencia.visible:=false; sensor.selecentrada.Visible:=false; sensor1.selecentrada.Visible:=false; showmessage(''+ 'Haga un clic en la flecha de ACTIVAR para descargar el programa sobre el bloque RCX. Posteriormente, presione el botón de RUN del RCX para comenzar a ejecutar el programa.'+#13#10+ 'El programa se almacenará en uno delos campos de almacenamiento disponibles, indicado en el RCX. Podemos cambiar el campo de almacenamiento, presionando el botón PRGM del bloque RCX. Una vez descargado el programa,'+#13#10+ ' se muestra el número del campo de almacenamiento.'+#13#10+ 'Si hay algún problema durante la descarga del programa, aparece una ventana de error, indicando la posible causa del mismo.'+#13#10+ #13#10+ 'El boton con la flecha y la barra nos sirve para cambiar entre modalidad simple o continua.'+#13#10+ 'Modalidad simple:'+#13#10+ 'Una vez descargado el programa y después de activarlo, pulsando la tecla RUN del RCX, el programa sólo se ejecuta una vez.'+#13#10+ 'Modalidad continua:'+#13#10+ 'Una vez descargado el programa y después de activarlo, pulsando la tecla RUN del RCX, el programa se ejecuta cíclicamente.'); salida1.Visible:=true; salida2.Visible:=true; salida3.Visible:=true; salida4.Visible:=true; salida5.Visible:=true; salida6.Visible:=true; sensor.Visible:=true; sensor1.Visible:=true; salida1.fpotencia.visible:=true; salida2.fpotencia.visible:=true; salida3.fpotencia.visible:=true; salida4.fpotencia.visible:=true; salida5.fpotencia.visible:=true; salida6.fpotencia.visible:=true; sensor.selecentrada.Visible:=true; sensor1.selecentrada.Visible:=true; end; procedure Tpilot33.Image3Click(Sender: TObject); begin hide; sensor.selecentrada.Hide; // freeandnil(sensor.selecentrada); //freeandnil(sensor); sensor.hide; sensor1.selecentrada.Hide; //freeandnil(sensor1.selecentrada); //freeandnil(sensor1); sensor1.hide; salida1.hide; salida2.hide; salida3.hide; salida4.hide; salida5.hide; salida6.hide; salida6.fpotencia.hide; salida5.fpotencia.hide; salida4.fpotencia.hide; salida3.fpotencia.hide; salida2.fpotencia.hide; salida1.fpotencia.hide; end; procedure Tpilot33.Image1Click(Sender: TObject); var resp:boolean; begin resp:=fprincipal.probar_comunicacion; enviando.Visible:=true; Application.ProcessMessages; if resp=true then begin mandardatos; enviando.Visible:=false; Application.ProcessMessages; salida1.Visible:=false; salida2.Visible:=false; salida3.Visible:=false; salida4.Visible:=false; salida5.Visible:=false; salida6.Visible:=false; sensor.Visible:=false; sensor1.Visible:=false; salida1.fpotencia.visible:=false; salida2.fpotencia.visible:=false; salida3.fpotencia.visible:=false; salida4.fpotencia.visible:=false; salida5.fpotencia.visible:=false; salida6.fpotencia.visible:=false; sensor.selecentrada.Visible:=false; sensor1.selecentrada.Visible:=false; showmessage('Datos enviados'); salida1.Visible:=true; salida2.Visible:=true; salida3.Visible:=true; salida4.Visible:=true; salida5.Visible:=true; salida6.Visible:=true; sensor.Visible:=true; sensor1.Visible:=true; salida1.fpotencia.visible:=true; salida2.fpotencia.visible:=true; salida3.fpotencia.visible:=true; salida4.fpotencia.visible:=true; salida5.fpotencia.visible:=true; salida6.fpotencia.visible:=true; sensor.selecentrada.Visible:=true; sensor1.selecentrada.Visible:=true; end else begin salida1.Visible:=false; salida2.Visible:=false; salida3.Visible:=false; salida4.Visible:=false; salida5.Visible:=false; salida6.Visible:=false; sensor.Visible:=false; sensor1.Visible:=false; salida1.fpotencia.visible:=false; salida2.fpotencia.visible:=false; salida3.fpotencia.visible:=false; salida4.fpotencia.visible:=false; salida5.fpotencia.visible:=false; salida6.fpotencia.visible:=false; sensor.selecentrada.Visible:=false; sensor1.selecentrada.Visible:=false; showmessage('¡¡ERROR !! No se pudo establecer la comunicación con el'+ ' RCX, compruebe que la configuración del puerto sea correcta, que los cables'+ ' esten bien conectados y que el RCX este encendido.'+#13#10+ ' Si todo es correcto es posible que su RCX no tenga instalado el firmware'+ ' adecuado, si es así seleccione la opcion bajar firmware.'); enviando.Visible:=false; Application.ProcessMessages; salida1.Visible:=true; salida2.Visible:=true; salida3.Visible:=true; salida4.Visible:=true; salida5.Visible:=true; salida6.Visible:=true; sensor.Visible:=true; sensor1.Visible:=true; salida1.fpotencia.visible:=true; salida2.fpotencia.visible:=true; salida3.fpotencia.visible:=true; salida4.fpotencia.visible:=true; salida5.fpotencia.visible:=true; salida6.fpotencia.visible:=true; sensor.selecentrada.Visible:=true; sensor1.selecentrada.Visible:=true; end; end; procedure Tpilot33.Image7Click(Sender: TObject); var fichero: textfile; cadena:PChar; dire,cadena1,cad:string; tcom:TComponent; tw:twidgetcontrol; begin Application.CreateForm(Tpruebas, pruebas); pruebas.tipo:=1; pruebas.Parent:=pilot33; pilot33.salida1.Visible:=false; pilot33.salida1.fpotencia.Visible:=false; pilot33.salida2.Visible:=false; pilot33.salida2.fpotencia.Visible:=false; pilot33.salida3.Visible:=false; pilot33.salida3.fpotencia.Visible:=false; pilot33.salida4.Visible:=false; pilot33.salida4.fpotencia.Visible:=false; pilot33.salida5.Visible:=false; pilot33.salida5.fpotencia.Visible:=false; pilot33.salida6.Visible:=false; pilot33.salida6.fpotencia.Visible:=false; pilot33.sensor1.Visible:=false; pilot33.sensor1.selecentrada.Visible:=false; pilot33.sensor.Visible:=false; pilot33.sensor.selecentrada.Visible:=false; pruebas.Show; end; procedure Tpilot33.Image6Click(Sender: TObject); var fichero: textfile; cadena:PChar; dire,cadena1,cad:string; sest,sposix,sposiy,sini,ssimpl,stipo,spot,spote:integer; ssalid,sentrada:string; stipoc:string[2]; begin Application.CreateForm(Tpruebas, pruebas); pruebas.tipo:=2; pruebas.Parent:=pilot33; pilot33.salida1.Visible:=false; pilot33.salida1.fpotencia.Visible:=false; pilot33.salida2.Visible:=false; pilot33.salida2.fpotencia.Visible:=false; pilot33.salida3.Visible:=false; pilot33.salida3.fpotencia.Visible:=false; pilot33.salida4.Visible:=false; pilot33.salida4.fpotencia.Visible:=false; pilot33.salida5.Visible:=false; pilot33.salida5.fpotencia.Visible:=false; pilot33.salida6.Visible:=false; pilot33.salida6.fpotencia.Visible:=false; pilot33.sensor1.Visible:=false; pilot33.sensor1.selecentrada.Visible:=false; pilot33.sensor.Visible:=false; pilot33.sensor.selecentrada.Visible:=false; pilot33.sensor.selecentrada.Visible:=false; pruebas.show; end; procedure Tpilot33.Image4Click(Sender: TObject); begin if tipoejecucion=normal then begin image4.Picture:=image5.picture; tipoejecucion:=continua; end else begin image4.picture:=NIL; tipoejecucion:=normal; end; end; procedure Tpilot33.FormShow(Sender: TObject); begin tipoejecucion:=normal; end; procedure Tpilot33.BitBtn1Click(Sender: TObject); begin funciones.show; end; procedure Tpilot33.Image8Click(Sender: TObject); begin salida1.Visible:=false; salida2.Visible:=false; salida3.Visible:=false; salida4.Visible:=false; salida5.Visible:=false; salida6.Visible:=false; sensor.Visible:=false; sensor1.Visible:=false; salida1.fpotencia.visible:=false; salida2.fpotencia.visible:=false; salida3.fpotencia.visible:=false; salida4.fpotencia.visible:=false; salida5.fpotencia.visible:=false; salida6.fpotencia.visible:=false; sensor.selecentrada.Visible:=false; sensor1.selecentrada.Visible:=false; showmessage('Impresora sin configurar en el sistema'); salida1.Visible:=true; salida2.Visible:=true; salida3.Visible:=true; salida4.Visible:=true; salida5.Visible:=true; salida6.Visible:=true; sensor.Visible:=true; sensor1.Visible:=true; salida1.fpotencia.visible:=true; salida2.fpotencia.visible:=true; salida3.fpotencia.visible:=true; salida4.fpotencia.visible:=true; salida5.fpotencia.visible:=true; salida6.fpotencia.visible:=true; sensor.selecentrada.Visible:=true; sensor1.selecentrada.Visible:=true; end; end.