juanalain97 / tp

contador de personas
0 stars 0 forks source link

Correcciones #1

Open DamRCorba opened 1 year ago

DamRCorba commented 1 year ago

Hola, como estas?

No esta mal, pero el repo no esta cumpliendo con el formato. Te recuerdo que tenes que subirlo con formato Markdown. Tenes como hacerlo en los videos de explicacion de Git y el video de explicacion del TP.

Por otro lado me queda la duda con el estado 0 y el estado 1-29. Segun entiendo no afectaria al funcionamiento/accion. Es decir, no hacen nada diferente, o si?

Me esta faltando un estado de inicio donde se configuren los limites.

En cuanto al sensor optico, esta bien para la memoria descriptiva. Pero entiendo que necesistas dos. Uno dentro y otro fuera y dependiendo cual se activa primero podes decir si entra o sale. Vamos a suponer que no hay personas entrando y saliendo en forma simultanea.

Saludos

juanalain97 commented 8 months ago

buenas profe , ya le agregue todo lo q me pidio, x favor reviselo, espero q este bien xq tengo q preparar otro recuperatorio tambien..


De: Damian Corbalan @.> Enviado: lunes, 19 de febrero de 2024 12:24 Para: juanalain97/tp @.> Cc: juanalain97 @.>; Comment @.> Asunto: Re: [juanalain97/tp] Correcciones (Issue #1)

Hola Juan, como estas?

Veo un par de problemas en tu código. Te pido que por favor revises todo lo que te estoy escribiendo aqui. Ademas, te pido que revises las clases donde esta todo este contenido.

Las correcciones de lo que enviaste son:

Para empezar estas declarando la variable "contadorPersonas" en el main. Esa variable la inicializas en 0 y no volves a modificar su valor en ningun lado y eso estaria mal.

El motivo por el que esta mal es porque las funciones de estado reciben a la variable como "pasaje por valor", osea una copia de ese valor, y toman la decisión, que siempre es 0 y por lo tanto "disponible", y eso esta generando el primer problema, lo tenes que cambiar en tu código. A continuación te voy a explicar como es:

Acá tenes que usar pasaje por referencia. Entonces tus prototipos te quedarian así:

EstadoBanco estadoDisponible(int contadorPersonas); EstadoBanco estadoNoDisponible(int contadorPersonas);

En el llamado a la función en el main deberias hacer:

estadoActual = estadoDisponible(&contadorPersonas);

y en las funciones de estado usarías el valor apuntado osea:

if(*contadorPersonas < 30) { .... }

Esto lo tenes que modificar en tu código. Si o si tenes que modificarlo y agregarlo porque si no no funciona. Por favor revisa la forma en que lo hiciste porque es una falla de concepto.

Por otro lado te falta el incremento y decremento de las personas, que eso lo tenes que hacer leyendo la entrada del micro para saber si sale o si entra y ademas la activación o no de un rele para abrir la puerta o no.

Ahí es donde esta tu mayor confusión. Tenes que usar la definición como se hizo en el ejemplo del control de temperatura. Particularmente la del Rele para la puerta. Y, como se explico en las clases de avr, a los sensores como entrada. Tambien lo tenes en las presentaciones de presi en el git de la catedra.

Esto te quedaria de la siguente forma:

Para la el rele que controla la puerta:

// Definiciones de puertos para el Rele que abre tu puerta

define RELE_PORT avr_GPIO_C

define RELE_PIN avr_GPIO_PIN_0

define RELE avr_GPIOC_OUT_0

Para los sensores de entrada:

// Definiciones de puertos para el Relay

define SENSOR_PORT avr_GPIO_D

define SENSOR_ IN_PIN avr_GPIO_PIN_0

define SENSOR_IN avr_GPIOD_IN_0

define SENSOR_ OUT_PIN avr_GPIO_PIN_1

define SENSOR_OUT avr_GPIOC_IN_0

Esto lo tenes que escribir en tu archivo conf.h

Asimismo, tambien te falta tu función de init_mcu, la cual no estas desarrollando y deberia ser la encargada de configurar los pines como entrada o salida. Sin esto no funciona nada.

La misma tiene que ser de la siguiente:

void init_mcu(void){ GpioInitStructure_AVR rele, sensor;

rele.port = RELE_PORT; rele.pines = RELE_PIN; rele.modo = avr_GPIO_mode_Output; init_gpio(rele);

sensor.port = SENSOR_PORT ; sensor.pines = SENSOR_IN_PIN | SENSOR_OUT_PIN ; sensor.modo = avr_GPIO_mode_Input; init_gpio(sensor);

RELE = 0;

}

Esta función la tenes que agregar al archivo de estados.c

Con esto solo resta hacer la logica de si entra o sale. Si entra tiene que incrementar "contadorPersonas" y si sale tiene que decrementar a contadorPersonas. En caso que el estado quede en "indisponible" no tiene que permitir que la puerta se abra si alguien quiere entrar, pero si, si alguien quiere salir.

Para preguntar por los sensores tenes que hacer lo siguiente:

if(SENSOR_IN){ // alguien quiere entrar // si puede incremento *contadorPersonas // si no puede RELE=0;

} if(SENSOR_OUT){ // alguien quiere salir // decremento *contadorPersonas }

Esa evaluación la tenes que hacer dentro de las funciones de estado, ojo que cada una tiene su logica. Una de ellas es cuando esta disponible y la otra cuando no lo esta. Por lo tanto NO son iguales.

Te pido por favor que lo revises, sin esto no se puede avanzar.

— Reply to this email directly, view it on GitHubhttps://github.com/juanalain97/tp/issues/1#issuecomment-1952684580, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BCVLETA7TVKVVUOL4YPGR3LYUNVC5AVCNFSM6AAAAAA5NAWMQGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNJSGY4DINJYGA. You are receiving this because you commented.Message ID: @.***>

DamRCorba commented 8 months ago

Hola Juan, Esta bastante mejor, aunque seguís sin cumplir el ultimo punto de mi anterior corrección. Fijate que te habia escrito lo siguiente: Esa evaluación la tenes que hacer dentro de las funciones de estado, ojo que cada una tiene su lógica. Una de ellas es cuando esta disponible y la otra cuando no lo esta. Por lo tanto NO son iguales.

Ademas tenes que corregir:

#include "mylib.h" // esta libreria no existe -> BORRAR
// Agregar
typedef enum {
DISPONIBLE,
NO_DISPONIBLE
} EstadoBanco ;
EstadoBanco estadoDisponible(int *contadorPersonas);
EstadoBanco estadoNoDisponible(int *contadorPersonas);

Las funciones tienen que ser:

EstadoBanco estadoDisponible(int *contadorPersonas) {
    if (*contadorPersonas < 30) {
        // Lógica para el estado disponible
        if (SENSOR_IN) {
            (*contadorPersonas)++;
        } else if (SENSOR_OUT) {
            if (*contadorPersonas > 0) {
                (*contadorPersonas)--;
            }
        }
        RELE = 1; // Abrir la puerta
        return DISPONIBLE;
    } else {
        return NO_DISPONIBLE;
    }
}

EstadoBanco estadoNoDisponible(int *contadorPersonas) {
    if (*contadorPersonas >= 30) {
         if (SENSOR_OUT) {        
            (*contadorPersonas)--;
            return DISPONIBLE;            
        } else {
           RELE = 0; // Abrir la puerta
           return NO_DISPONIBLE;
         }
    } else {
        return DISPONIBLE;
    }
}
juanalain97 commented 8 months ago

buen dia profe, ahi lo arregle x favor mirelo


De: Damian Corbalan @.> Enviado: martes, 20 de febrero de 2024 18:57 Para: juanalain97/tp @.> Cc: juanalain97 @.>; Comment @.> Asunto: Re: [juanalain97/tp] Correcciones (Issue #1)

Hola Juan, Esta bastante mejor, aunque seguís sin cumplir el ultimo punto de mi anterior corrección. Fijate que te habia escrito lo siguiente: Esa evaluación la tenes que hacer dentro de las funciones de estado, ojo que cada una tiene su lógica. Una de ellas es cuando esta disponible y la otra cuando no lo esta. Por lo tanto NO son iguales.

Ademas tenes que corregir:

include // NO SE USA CON MICROS -> BORRAR

include "conf.h" // ESTE SI VA

include "estados.c" // NO SE INCLUYEN LOS ARCHIVOS C

Los archivos.c no se incluyen, el mismo proyecto o las opciones de compilación del mismo se encargan de su compilación. La inclusión de archivos.c no se usa.

include "mylib.h" // esta libreria no existe -> BORRAR

// Agregar typedef enum { DISPONIBLE, NO_DISPONIBLE } EstadoBanco ; EstadoBanco estadoDisponible(int contadorPersonas); EstadoBanco estadoNoDisponible(int contadorPersonas);

Las funciones tienen que ser:

EstadoBanco estadoDisponible(int contadorPersonas) { if (contadorPersonas < 30) { // Lógica para el estado disponible if (SENSOR_IN) { (contadorPersonas)++; } else if (SENSOR_OUT) { if (contadorPersonas > 0) { (*contadorPersonas)--; } } RELE = 1; // Abrir la puerta return DISPONIBLE; } else { return NO_DISPONIBLE; } }

EstadoBanco estadoNoDisponible(int contadorPersonas) { if (contadorPersonas >= 30) { if (SENSOR_OUT) { (*contadorPersonas)--; return DISPONIBLE; } else { RELE = 0; // Abrir la puerta return NO_DISPONIBLE; } } else { return DISPONIBLE; } }

— Reply to this email directly, view it on GitHubhttps://github.com/juanalain97/tp/issues/1#issuecomment-1955186483, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BCVLETGVK6H5PEBDMT5APQDYUUL3TAVCNFSM6AAAAAA5NAWMQGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNJVGE4DMNBYGM. You are receiving this because you commented.Message ID: @.***>

DamRCorba commented 8 months ago

Ahora si Juan, TP aprobado.

juanalain97 commented 8 months ago

X fin profe, muchas gracias, alguno mas hizo el tp? Xq vi q eramos re pocos alumnos

Obtener Outlook para Androidhttps://aka.ms/AAb9ysg


From: Damian Corbalan @.> Sent: Wednesday, February 21, 2024 3:08:16 PM To: juanalain97/tp @.> Cc: juanalain97 @.>; Comment @.> Subject: Re: [juanalain97/tp] Correcciones (Issue #1)

Ahora si Juan, TP aprobado.

— Reply to this email directly, view it on GitHubhttps://github.com/juanalain97/tp/issues/1#issuecomment-1957570611, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BCVLETCCJOZAJRTNNYYA3CTYUYZZBAVCNFSM6AAAAAA5NAWMQGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNJXGU3TANRRGE. You are receiving this because you commented.Message ID: @.***>