Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - dgg006

#11
Hola.
Necesito algo parecido a este proyecto
http://www.pablin.com.ar/electron/circuito/computer/leer_lpt/index.htm
Pero tiene que ser en C y para Linux.
No les pido que me escriban un código, pero aunque sea los "comandos" a utilizar...

Gracias
#12
Cita de: mit en  7 Junio 2011, 15:28 PM
Para tu problema de que te toma 3 y no 03 es porque lo estas tratando como numero, igual ya lo sabias, sin embargo puede ser que lo trates como una cadena, por lo tanto te lo tomara tal cual.
Otra solución es que trabajes tus variables como byte;
int byte1=0x02;

Espero te sirva de algo.
Saludos
Pero yo necesito sumar y restar esos byte, si se quiere enviar el encender al pin1 y el pin 3, la dire es 0x05
#13
Buenas.
Esto talves es algo facil. (para ustedes) pero yo no estoy encontrando mucha info del tema, mas bien, no se ni como buscar.

Les cuento lo que necesito.

Tengo que guardar en una variable el "pin" que quiero activar del puerto paralelo, ya casi esta resuelto, pero me falta una pequeña parte.

Ej: Para activar el pin 1 y 2, la dire que tengo q enviar es 0x03
Como tengo q manejar los pines de manera independiente, la parte "matematica" ya esta echa, y la guarda en una variable (en el ej seria el 03).
y el 0x va siempre
En sintesis, presiso que de el 0x y una variable (03) me de como resultado 0x03


Otra cosa..
el resultado no me da 03, me da 3.
Tendria que incluir un if al concatenar, que si el resultado es menor que 10, agregue un 0 antes del resultado.
Gracias y ojala me entiendan y ayuden
#14
Hola, sigo con este proyecto que me va a sacar canas verdes  :P
La cosa es asi, tengo este codigo:
#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#define puerto 0x378

int main ()
{
    int resul;
    int estado=-1;
    int infinito=0;

    FILE *texto;
    texto = fopen ("Cocina.txt","r");
    fscanf (texto, "%d",&resul);
    fclose (texto);

    while (infinito == 0)
    {
        switch (resul)
        {
            case 0:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 0)
            {
                unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror("Se ha encontrado el siguiente error: "); //manejo de errores
exit(1); //salida con error
}

p = 0x00; //puerto 0. Apaga todos los bits
outb(p,puerto);
            }
                    estado=0;
                    break;
            case 1:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 1)
            {
                unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror("Se ha encontrado el siguiente error: "); //manejo de errores
exit(1); //salida con error
}

p = 0x01; //puerto 1
outb(p,puerto); //envia el valor en binario al puerto
            }
                    estado=1;
                    break;
        }
    }
}

Lo que hace es leer un TXT llamado Cocina, si dentro hay un 1, enciende el pin 2 del paralelo, si hay un 0, lo apaga.
Para esto funciona, pero cual es el problema?, La cosa es que va a haber mas de un TXT, y tiene que controlar cada pin de forma independiente, ej: Si esta la cocina encendida, y quiero encender la habitacion, o que esten las 2 encendidas y quiero apagar una.
Buscando en internet, encontre este otro codigo:
#include<stdio.h>
#include<stdlib.h>
#include<sys/io.h> //esta librería permite el manejo de puertos en linux con lenguaje C
#define puerto 0x378 //definimos el puerto a utilizar

int main (void)
{
  int seleccion,seleccion_sal,salida[8],valor_sal=0,i,k;
  for(i=0;i<=8;i++)
    salida[i]=0;

  i=0;
  while(seleccion!=4)
  {
      printf("nSeleccione la opcion deseada:nt1- Activar salidant2- Desactivar salidant3- Estado de salidasnt4- Salirn Seleccion: ");
      scanf("%d",&seleccion);
      printf("Usted selecciono la opcion %i n",seleccion);
      switch(seleccion)
      {
        case 1:
            valor_sal=0;
            printf("Seleccione la salida a Activar (0 para cancelar): ");
            scanf("%d",&seleccion_sal);
            if(seleccion_sal==0)
                break;
            if(seleccion_sal<0 || seleccion_sal>8)
            {
                printf("tLa salida seleccionada no existe");
                break;
            }
            salida[seleccion_sal-1]=1;
            i=1;
            for(k=0;k<8;k++)
            {
                printf("t %d",i);
                if (salida[k]==1)
                    valor_sal = valor_sal + i;
                i=i*2;
            }
            ioperm(0x0378,1,1);
            outb(valor_sal,0x0378);
            printf("nEl valor de Salida es: %i",valor_sal);
            break;
        case 2:
            valor_sal=0;
            printf("Seleccione la salida a Desactivar:");
            scanf("%d",&seleccion_sal);
            if(seleccion_sal<1 || seleccion_sal>8)
            {
                printf("tLa salida seleccionada no existe");
                break;
            }
            salida[seleccion_sal-1]=0;
            i=1;
            for(k=0;k<8;k++)
            {
                printf("t %d",i);
                if (salida[k]==1)
                    valor_sal = valor_sal + i;
                i=i*2;
            }

            ioperm(0x0378,1,1);
            outb(valor_sal,0x0378);
            printf("nEl valor de Salida es: %i",valor_sal);
            break;
        case 3:
            printf("n%d",valor_sal);
            for(i=0;i<8;i++)
            {
                printf("nEstado de salida %i: ",(i+1));
                if (salida[i]==1)
                    printf("Activada");
                if (salida[i]==0)
                    printf("Desactivada");
             }
            printf("n");
            break;
        case 4:
            break;
        default:
            printf("Seleccion Invalidan");
            break;
      }
}
exit(0);
}

De una forma, este hace algo de lo que quiero, y tengo que lograr entender lo que hace para poder juntarlo con mi codigo.
Talves es algo basico, pero no tengo nada de experiencia en programacion, de verdad que necesito una ayuda.
Desde ya Gracias!!
#15
Lo que se me habia ocurrido, pero no he tenido tiempo de ponerme a pensar como hacerlo, es desde el PHP.
Osea,
1) Trato de escribir en Cocina.txt
2) Si NO puedo escribir en Cocina.txt (porque esta ocupado)
3) Reintento

Si eso esta dentro d un bucle, no tendria porque mostrar error, y en algún momento lo va a lograr.... Tengo que ver como se hace..

Ya que estamos, quería hacer otra pregunta,
En el paralelo, va a haber 3 o 4 cosas conectadas, como hago para "activar" de a una individualmente???
Todavía no he buscado demasiado del tema, pero por lo que he visto, mandan la orden en binario a todos los puertos.
Ejemplo:
Cocina: "Encendida"
Habitación: "Apagada"
Baño: "Encendido"

Si con este programa solo quiero prender o apagar la Cocina, como hago para que los demás queden como están?
Espero haberme explicado :S
#16
Me interesa TOTALMENTE lo que me decís.
He tenido errores en ocasiones.

Quien escribe ese TXT en una pagina en PHP, y claro, si tenes la mala suerte de clickear en el momento de la lectura del programa en C, me tira un error.
Podes explicarme como lo soluciono?
#17
Cita de: dakomt en 28 Mayo 2011, 17:24 PM
una corazonada..... añade un salto de linea a los printf... es decir...

printf ("Apagado\n");

printf ("Encendido\n");

LITERALMENTE!!!
Me la quiero cortar!!
Podes creer que era eso!! WTF
No lo vi necesario, para que una nueva linea si antes borro la pantalla.
Un millón de gracias!!

Ahora solo me falta incluirle a este código los comandos para controlar el paralelo.
Ya me verán preguntando por ak :P
Otra ves gracias!
#18
PHP / Como Hacer boton Logout?
28 Mayo 2011, 17:35 PM
Hola,
Estoy empezando con PHP.
Comencé una pagina de prueba, y para la seguridad utilice PHP_AUTH_USER y PHP_AUTH_PW.
El tema es el siguiente.
Todo perfecto con el logueo, pero no puedo hacer que se cierre "sesión" hasta que no se cierra el navegador.
Me gustaría incluir un boton logout.
Encontre esto:
<?php
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
"Debes ingresar un login ID y password validos para acceder a este recurso\n";
    exit;
}
 
if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
    (
$_POST['SeenBefore'] == && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authenticate();
} else {
    echo 
"<p>Bienvenido: " htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
    echo 
"Anterior: " htmlspecialchars($_REQUEST['OldAuth']);
    echo 
"<form action='' method='post'>\n";
    echo 
"<input type='hidden' name='SeenBefore' value='1' />\n";
    echo 
"<input type='hidden' name='OldAuth' value=\"" htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
    echo 
"<input type='submit' value='Re Authenticate' />\n";
    echo 
"</form></p>\n";
}
?>


y aunque no hace exactamente un deslogueo, si hace algo parecido, pienso que se puede modificar este código para lograrlo.
Podrán darme una mano con eso?
Cabe aclarar, que no estoy estudiando en ningún lado, estoy tratando de aprender por mis medios, por lo que sean bien explicativos con sus respuestas.
Gracias
#19
Gracias por la pronta respuesta, pero si te fijas, ya lo había aclarado, ese codigo tal como esta funciona en windows
#20
Hola,
Primero que nada me presento.
Mi nombre es Delmo Gonzalez... dgg006 en Internet..
Estoy estudiando informática, y este año tenemos que entregar un proyecto.


Una pequeña parte del proyecto que elegimos, consta de un programa basico, que busque cambios continuamente en un TXT. y haga una accion segun el contenido.
Logré (con esfuerzo, porque no 100% novato en esto) escribir este codigo:


#include <stdio.h>

int main ()
{
    int resul;
    int estado=-1;
    int infinito=0;

    FILE *texto;
    texto = fopen ("Cocina.txt","r");
    fscanf (texto, "%d",&resul);
    fclose (texto);

    while (infinito == 0)
    {
        switch (resul)
        {
            case 0:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 0)
            {
                system("cls");
                printf ("Apagado");
            }
                    estado=0;
                    break;
            case 1:
            texto = fopen ("Cocina.txt","r");
            fscanf (texto, "%d",&resul);
            fclose (texto);
            if (estado != 1)
            {
                system("cls");
                printf ("Encendido");
            }
                    estado=1;
                    break;
        }
    }
}


En windows, funciona perfecto, pero la idea es hacerlo correr en linux server. Cuando lo compilo ahí, compila sin errores, pero NO HACE NADA!!
Queda en negro.
En que estoy fallando? Algo falta para que funcione en linux?
(los system("cls"), hay que cambiarlos por system("clear") para que funcione en linux)
Les comento lo que tiene que hacer este programa.
Lee dentro del TXT.
Si hay un 1, muestra Encendido.
Si hay un 0, muestra Apagado.
Todo dentro de un bucle infinito!!!

A futuro, en lugar de mostrar encendido o apagado, tiene que activar o desactivar un relay en el puerto paralelo, pero supongo que esos códigos irán luego dentro de este. Por algo se empieza.
Gracias y espero sus respuestas