コード例 #1
0
ファイル: main.c プロジェクト: centurysys/RIOT
int main(void)
{
    puts("PIR motion sensor test application\n");
    printf("Initializing PIR sensor at GPIO_%ld... ", (long)PIR_GPIO);
    if (pir_init(&dev, PIR_GPIO) == 0) {
        puts("[OK]\n");
    }
    else {
        puts("[Failed]");
        return 1;
    }

#if TEST_PIR_POLLING
    puts("Printing sensor state every second.");
    while (1) {
        printf("Status: %s\n", pir_get_status(&dev) == PIR_STATUS_LO ? "lo" : "hi");
        vtimer_usleep(1000 * 1000);
    }
#else
   thread_create(
           pir_handler_stack, sizeof(pir_handler_stack), THREAD_PRIORITY_MAIN - 1,
           CREATE_WOUT_YIELD | CREATE_STACKTEST,
           pir_handler, NULL, "pir_handler");
#endif
    return 0;
}
コード例 #2
0
ファイル: pir.c プロジェクト: JMR-b/RIOT
static void pir_send_msg(pir_t *dev, pir_event_t event)
{
    DEBUG("pir_send_msg\n");
    msg_t m = { .type = event, .content.ptr = (char*) dev, };

    int ret = msg_send_int(&m, dev->msg_thread_pid);
    DEBUG("pir_send_msg: msg_send_int: %i\n", ret);
    switch (ret) {
        case 0:
            DEBUG("pir_send_msg: msg_thread_pid not receptive, event is lost");
            break;
        case 1:
            DEBUG("pir_send_msg: OK");
            break;
        case -1:
            DEBUG("pir_send_msg: msg_thread_pid is gone, clearing it");
            dev->msg_thread_pid = KERNEL_PID_UNDEF;
            break;
    }
}

static void pir_callback(void *arg)
{
    DEBUG("pir_callback: %p\n", arg);
    pir_t *dev = (pir_t*) arg;
    if (dev->msg_thread_pid != KERNEL_PID_UNDEF) {
        pir_send_msg(dev, pir_get_status(dev));
    }
}
コード例 #3
0
ファイル: main.c プロジェクト: LudwigKnuepfer/riot-tools
int main(void)
{
    puts("PIR motion sensor test application\n");

    printf("Initializing red LED at GPIO_%i...        ", GPIO_LED_RED);
    led_red = GPIO_LED_RED;
    if (gpio_init_out(led_red, GPIO_NOPULL) == 0) {
        puts("[OK]\n");
    }
    else {
        puts("[Failed]");
        return 1;
    }
    gpio_clear(led_red);

    printf("Initializing green LED at GPIO_%i...        ", GPIO_LED_GREEN);
    led_green = GPIO_LED_GREEN;
    if (gpio_init_out(led_green, GPIO_NOPULL) == 0) {
        puts("[OK]\n");
    }
    else {
        puts("[Failed]");
        return 1;
    }
    gpio_clear(led_green);

    printf("Initializing PIR sensor at GPIO_%i... ", PIR_GPIO);
    if (pir_init(&pir, PIR_GPIO) == 0) {
        puts("[OK]\n");
    }
    else {
        puts("[Failed]");
        return 1;
    }

   kernel_pid_t pir_handler_pid = thread_create(
           pir_handler_stack, sizeof(pir_handler_stack), PRIORITY_MAIN - 1,
           CREATE_WOUT_YIELD | CREATE_STACKTEST,
           pir_handler, NULL, "pir_handler");

#if TEST_PIR_POLLING
    puts("Checking sensor state every half second.");
    pir_event_t status_old;
    while (1) {
        pir_event_t status = pir_get_status(&pir);
        if (status != status_old) {
            msg_t m = { .type = status, .content.ptr = (void*)&pir, }; 
            msg_send(&m, pir_handler_pid, 0);
        }
        status_old = status;
        vtimer_usleep(1000 * 500);
    }
#endif
    return 0;
}