Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Test GPIO door functionality

Abierto
#3 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
30/100
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
bash, linux, rust

Línea de trabajo

No se indica ningún archivo del repositorio ni ninguna prueba. Empieza revisando el fragmento de Rust GPIO y el comportamiento de /sys/class/gpio de Beagle para los pines 87 y 89, y luego ejecuta la secuencia de apertura/cierre de la puerta en la placa. Se considera completado cuando se confirme que los pines corresponden a lo descrito y que el motor bloquea y desbloquea la puerta de forma fiable.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I made a branch in my fork with some test code, but it looks like you should be able to do this:

use gpio::{GpioOut};
use std::{thread, time};

/*
On the board,
    Pin 87 -> Motor Rev
    Pin 89 -> Motor Fwd
*/

/*
Here's how you'd do it in BASH

ON:
    # echo 89 > /sys/class/gpio/export
    # echo out > /sys/class/gpio/gpio49/direction
    # echo 1 > /sys/class/gpio/gpio49/value
*/
fn door_open() {
    // Motor Forward for 0.5 seconds.
    gpio89.set_value(value).expect("could not set gpio89");
    thread::sleep(time::Duration::from_millis(500));
    value = !value;
    gpio89.set_value(value).expect("could not set gpio89");
}

fn door_close() {
    // Motor backwards for 0.5 seconds.
    gpio87.set_value(value).expect("could not set gpio87");
    thread::sleep(time::Duration::from_millis(500));
    value = !value;
    gpio87.set_value(value).expect("could not set gpio87");
}

fn yeet_door() {
    // Let's try to open GPIO 87 and 89.
    let mut gpio87 = gpio::sysfs::SysFsGpioInput::open(87).unwrap();
    let mut gpio89 = gpio::sysfs::SysFsGpioOutput::open(89).unwrap();

    // GPIO87 and 89 will be toggled every 0.5 sec in the background by a different thread
    // This should cause the door to lock and unlock.
    let mut value = false;
    thread::spawn(move || loop {
        // Motor Forward for 0.5 seconds.
        gpio89.set_value(value).expect("could not set gpio89");
        thread::sleep(time::Duration::from_millis(500));
        value = !value;
        gpio89.set_value(value).expect("could not set gpio89");
        thread::sleep(time::Duration::from_millis(3000)); // Leave it in that state for 3 secs
        // Motor backwards for 0.5 seconds.
        gpio87.set_value(value).expect("could not set gpio87");
        thread::sleep(time::Duration::from_millis(500));
        value = !value;
        gpio87.set_value(value).expect("could not set gpio87");
        thread::sleep(time::Duration::from_millis(3000)); // Leave it in that state for 3 secs
    });
}

This needs to be tested, though. I haven't gotten a chance. The Beagle appears to be intelligent about its GPIO pin assignment in the OS, so pin 87 should actually be 87, and standard pin assignment libraries should work.

Lenguaje dominante
Rust
Estrellas
1
Forks
5
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de ComputerScienceHouse/gatekeeper-door

Todos los issues de ComputerScienceHouse/gatekeeper-door

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.