Powered By Blogger

miércoles, 3 de mayo de 2017

Calculadora Decimal-Binario y Binario-Decimal En Visual Studio 2015 y C#

Este programa convierte un número en formato decimal (exclusivamente números positivos) a su correspondiente en sistema base 2 (sistema binario) o viceversa dada la expresión en sistema binario el programa muestra el correspondiente en formato decimal.

No trabaja números con punto flotante ni tipos de datos sin signo.

La calculadora está hecha en Visual Studio 2015, en la plataforma Windows Form en el lenguaje de programación de C#.

Pasos:

1. Crear un nuevo proyecto
2. Agregar dos componentes labels, texboxs, buttons respectivamente.
3. El formulario debería de verse mas o menos asi:


5. Finalmente procederemos a agregar el código que se encargará de realizar las operaciones de conversión

5.1 Agregaremos dos variables públicas globales:

public
        string dateInBinary=null;
        int dateInDecimal=0;

5.2 Dentro del evento del button1 agregaremos el siguiente código:

            int i = 0;
            string currentCharacter = null;
            int finalValue=0;

            if (textBox1.Text == null)
            {

            }
            else
            {
                dateInBinary = textBox1.Text; 
                for (; i < dateInBinary.Length ; i++)
                {
                    currentCharacter = dateInBinary.Substring(i, 1);                    
                    if (currentCharacter == "1")
                    {                                                                       
                        finalValue = finalValue + Convert.ToInt32(Math.Pow(2f, ((dateInBinary.Length-1)- i)));
                    }
                }
                textBox2.Text = finalValue.ToString();
            }

5.3 Finalmente para el button2 agregaremos el siguiente código:

            string inputNumber = null;
            string residuo = null;
            string finalBinary = null;
            int aux = 0;
            int result = 0;
            int i = 0;

            if (textBox2.Text == null)
            {

            }
            else
            {
                inputNumber = textBox2.Text;
                dateInDecimal = int.Parse(inputNumber);
                aux = dateInDecimal;                
                while (result != 1)
                {
                    result = aux / 2;
                    if ((aux % 2) == 1)
                    {
                        residuo = residuo + "1";
                    }
                    if((aux % 2) == 0)
                    {
                        residuo = residuo + "0";
                    }
                    aux = result;
                }
                residuo = residuo + 1;

                for (i = residuo.Length - 1; i >= 0; i--)
                {
                    finalBinary = finalBinary+residuo.Substring(i, 1);
                }
                textBox1.Text = finalBinary;                               
            }

6. Y listo ahora podemos guardar los cambios y probar nuestra aplicación.

Nota: Es importante aclarar que solo funciona una operación a la vez por lo tanto hay que tener cuidado con la manipulación de los datos o se generará un error. Es un programa bastante simple, hay otras formas de realizarlo esto es solo un ejemplo.

Comenten si les fue útil, si tienen duda de igual manera estoy a sus ordenes!!!

lunes, 1 de mayo de 2017

Cargar Escenas En Unity 5

Es importante señalar que las instrucciones que se presentan a continuación pueden variar en función de la versión de Unity que manejes.

Para Unity 5:

1. En primer lugar es necesario importar el espacio de trabajo de las bibliotecas en el script, esto se logra agregando la siguiente línea de código:

using UnityEngine.SceneManagement;

2. Dependiendo de la parte de codigo en la que quieramos cargar nuestra escena agregaremos:

SceneManager.LoadScene("Main_Menu"); //Carga escena por nombre

O bien

SceneManager.LoadScene(0); //Cargar escena por index

Nota: Recuerden que el nombre de la escena en el código debe ser exactamente el mismo que el arrojado por el editor, caso contrario generará un error.
También es necesario recordar que antes de probar el juego necesitamos cargar las escenas que comprende nuestro proyecto en el menu File -> BuildSettings, de igual manera en caso contrario el programa generará un error.


Para este ejemplo, crearemos dos escenas y al dar clic en un Button cambiaremos de escenas.


Crearemos una escena y la llamaremos:  MainScene

Dentro de esta escena crearemos un Cube modificando su componente transform como se muestra a continuación:





También crearemos un Button modificado sus propiedades como se muestra a continuación:





Crearemos un script en C# al que llamaremos ChangeOfScene y agregaremos el código que se muestra en la siguiente imagen:




Agregaremos el script al Button, y en este modificaremos su componente Button (Script) añadiendo un evento de OnClick()



Arrastraremos el componente Button a la caja de texto del componente OnClick



Seleccionaremos el método publico de nuestro script llamado loadNewSceneByName()




Ahora crearemos una segunda escena y la llamaremos Scene0

Agregaremos algunos componentes (Cube,Sphere) modificando sus propiedades de transform como se muestra a continuación:





De igual manera agregaremos un Button y modificaremos sus propiedades como se muestra a continuación:





Ahora bien repetiremos los pasos 5,6 y para el paso 7 seleccionaremos el método publico loadNewSceneByIndex()





Abriremos la escena denominada MainScene 

Iremos al menu File->BuildSetttings y daremos clic en Add Open Scenes

Sin cerrar la ventana de BuildSetttings abriremos la escena denominada Scene0 y de igual manera daremos clic en Add Open Scenes, aqui deberemos tener algo similar a la siguiente imagen:





Guardaremos el proyecto y finalmente podemos probarlo






Espero les sirva, comenten, cualquier duda estoy a sus ordenes!!!

Aquí les proporciono un link con el proyecto para descargar.
https://www.dropbox.com/sh/we2gbkpvjr3zo7x/AACo8J93-I8potJpSy2Hiufka?dl=0

viernes, 3 de abril de 2015

Display De 7 Segmentos Cátodo Común Con PIC18F4620

Las siguientes capturas de pantallas muestran el control de un display de 7 segmentos CC mediante el cual al activar el state logic se visualizara los números del 0-9 y enseguida las letra de la A-E y al activar el otro logic state el orden es inverso es decir primero se visualizaran las letra A-E y los números del 0-9 en orden descendente.







Encendido De 8 Led`s Con PIC18F4620

En este programa controlaremos el encendido de 8 led mediante un PIC y para ello primero apagaremos todos los led`s de forma que después de cierto tiempo previamente establecido en mili-segundos durante la compilación de código fuente, encenderemos los 4 primero led`s y los apagaremos al mismo tiempo que encenderemos los 4 últimos led`s todo esto se ejecutara de manera indefinida.






PIC18F4620 Y LCD De 16*2

En este programa utilizaremos un LCD de 16 caracteres por 2 lineas (16*2) para mostrar diferentes textos con diferentes efectos.
En este caso el programa realiza la escritura letra por letra de la palabra HOLA MUNDO en la primera linea y ESTi UAEH en la segunda linea empezando desde el ultimo carácter y posteriormente realiza el corrimiento hacia la derecha de HOLA MUNDO finalizando con el corrimiento a la izquierda de la palabra HOLA MUNDO (1ª linea) ESTi UAEH (2ª linea) en un ciclo infinito.










Hola Mundo Con PIC18F4620 Y Display 16 Segmentos Anodo Comun

Versión 1: "Solo Texto"


A continuación se expone el programa que realiza la escritura de la oración HOLA MUNDO en 5 display de 16 segmentos ac (Anodo Comun), esto se realiza mediante el uso de la Multiplexeacion y la activación de cada uno de los pines del display para llevar el control de que letra deberá desplegarse en cada display.






Versión 2: "Texto Con Corrimiento" 


Finalmente adjunto imágenes de la segunda versión de este mismo programa, en la cual ahora se muestra el texto HOLA MUNDO y se procede a hacer el corrimiento de cada letra en cada uno de los display en un ciclo infinito.









Código:

A petición de un usuario aquí muestro mi código, el programa fue trabajado en Mikro C, esta es el código del programa de la versión 1 "Texto sin corrimiento":
 
int i;
int k=0;
void main() {
adcon1=0b11111111;
trisc=0;
trisd=0;
trisa=1;
trisb=1;
porta=0;
portb=0;
portc=0;
portd=0;


do{
k=0;
k++;


for (i=0; i<60; i++){
k=0;
portb=0b00000010;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00000100;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b00010000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}


trisc=0;
trisd=0;
trisa=1;
porta=0b11111111;
portb=0b00000000;
portc=0b00000000;
portd=0b00000000;
delay_ms(1500);


for (i=0; i<60; i++){
portb=0b00000010;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00000100;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b00010000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b00100000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}

trisc=0;
trisd=0;
trisa=1;
porta=0b11111111;
portb=0b00000000;
portc=0b00000000;
portd=0b00000000;


delay_ms(1500);


}
while(k<400);


}


Finalmente esta es la Versión 2 "Texto con corrimiento":

int i;
int k=0;
void main() {
adcon1=0b11111111;
trisc=0;
trisd=0;
trisa=1;
trisb=1;
porta=0;
portb=0;
portc=0;
portd=0;


do{
k=0;
k++;


for (i=0; i<60; i++){
k=0;
portb=0b00000010;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00000100;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b00010000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}


for (i=0; i<60; i++){
k=0;
portb=0b00000100;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00001000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00010000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b00100000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}



for (i=0; i<60; i++){
k=0;
portb=0b00001000;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00010000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00100000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b01000000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}



for (i=0; i<60; i++){
k=0;
portb=0b00010000;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b00100000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b01000000;
portc=0b00001111;
portd=0b11111111;
delay_ms(2);



portb=0b10000000;
portc=0b00110000;
portd=0b01110111;
delay_ms(2);
}



for (i=0; i<60; i++){
k=0;
portb=0b00100000;
portc=0b00110011;
portd=0b01110111;
delay_ms(2);



portb=0b01000000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);


portb=0b00000000;
portc=0b11111111;
portd=0b11111111;
delay_ms(2);
}


//HOLA CON CORRIDA



for (i=0; i<60; i++){
portb=0b00000010;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00000100;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00001000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b00010000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b00100000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}



for (i=0; i<60; i++){
portb=0b00000100;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00001000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00010000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b00100000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b01000000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}


for (i=0; i<60; i++){
portb=0b00001000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00010000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b00100000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b01000000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);


portb=0b10000000;
portc=0b00000000;
portd=0b11111111;
delay_ms(2);
}




for (i=0; i<60; i++){
portb=0b00010000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b00100000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b01000000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


portb=0b10000000;
portc=0b10000011;
portd=0b01110111;
delay_ms(2);

}


for (i=0; i<60; i++){
portb=0b00100000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


portb=0b01000000;
portc=0b00000011;
portd=0b11111111;
delay_ms(2);


portb=0b10000000;
portc=0b00110011;
portd=0b11101110;
delay_ms(2);


}


for (i=0; i<60; i++){
portb=0b01000000;
portc=0b00110011;
portd=0b11111010;
delay_ms(2);


}


delay_ms(1500);


}
while(k<400);


}

Espero les sea de utilidad...



jueves, 2 de abril de 2015

Control De Motores DC Con PIC y Puente H en Mikro C

Este es un programa sencillo que permite controlar dos motores mediante el uso de un PIC previamente programado en MikroC.

La función que realiza es la siguiente:
1) Giro de ambos motores a derecha
2) Detiene el movimiento de ambos motores
3) Giro de ambos motores a izquierda
4) Giro del primer motor y detiene el segundo
5) Detiene el primer motor y giro del segundo

El entorno de simulación es ISIS de Proteus v8.0, el compilador es MikroC Pro.



A continuación se muestra el esquema de las conexiones:


Finalmente la captura de pantalla de la simulación ejecutándose.

Nota: Dado que la velocidad de giro de los motores es alta, la impresión de pantalla puede parecer idénticas; sin embargo, es conveniente observar los estados de cada elemento para constatar que nuestra simulación es la correcta, y con esto me refiero a los cuadros azules o rojos que aparecen a ejecutar la simulación y que nos sirven de auxiliar para saber que estado tiene cada componente en cada etapa.