Skip to content

Instantly share code, notes, and snippets.

@itrobotics
Last active June 7, 2018 16:33

Revisions

  1. itrobotics revised this gist Oct 5, 2016. 1 changed file with 73 additions and 8 deletions.
    81 changes: 73 additions & 8 deletions io_shiled_test.c
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,24 @@
    // blink.c
    //
    // Example program for bcm2835 library
    // Blinks a pin on an off every 0.5 secs
    //
    // After installing bcm2835, you can build this
    // with something like:
    // gcc -o blink blink.c -l bcm2835
    // sudo ./blink
    //
    // Or you can test it before installing with:
    // gcc -o blink -I ../../src ../../src/bcm2835.c blink.c
    // sudo ./blink
    //
    // Author: Mike McCauley
    // Copyright (C) 2011 Mike McCauley
    // $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $

    #include <bcm2835.h>
    #include <stdio.h>
    // Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17)
    #define LED1 5
    #define LED2 6
    #define LED3 13
    @@ -19,9 +38,13 @@

    int main(int argc, char **argv)
    {

    // If you call this, it will not actually access the GPIO
    // Use for testing
    // bcm2835_set_debug(1);
    int i;
    int value1,value2,value3,value4;
    int prev_state=0;
    int prev_state_relay=0;
    int led_array[]={LED2,LED4,LED3,LED5};
    int n=sizeof(led_array)/sizeof(led_array[0]);
    if (!bcm2835_init())
    @@ -37,18 +60,27 @@ int main(int argc, char **argv)
    bcm2835_gpio_fsel(BUZZER, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(BUZZER, LOW);

    bcm2835_gpio_fsel(RELAY, BCM2835_GPIO_FSEL_OUTP);

    //DIP. button setup as input
    bcm2835_gpio_fsel(DIP1, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(DIP2, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(BUTTON1, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(BUTTON2, BCM2835_GPIO_FSEL_INPT);

    //set pwm0, pwm1

    bcm2835_gpio_fsel(PWM0,BCM2835_GPIO_FSEL_ALT5); //set gpio for PWM0
    bcm2835_pwm_set_clock(1920); //set min frequence =19.2M/1920
    bcm2835_pwm_set_mode(0,1,1); //(channel,PWM0 MSEN enable , PWM0 enable)
    bcm2835_pwm_set_range(0,200); //set period=20ms

    for (i=0;i<n;i++) {
    bcm2835_gpio_fsel(led_array[i], BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(led_array[i], LOW);
    }
    i=0;
    // Blink

    while (1)
    {

    @@ -64,20 +96,53 @@ int main(int argc, char **argv)
    bcm2835_delay(100);
    bcm2835_gpio_write(led_array[i], LOW);

    i=(i+1)%n;


    //check led1
    if (value1==0 && value2==0)
    if (value1==0 && value2==0) {
    i=(i+1)%n;
    bcm2835_gpio_write(LED1, HIGH);
    else
    } else {
    i=(i-1)%n; if (i<0) i=n-1;
    bcm2835_gpio_write(LED1, LOW);

    }

    //check buzzer
    if (value3==0 && value4==0)
    if (value3==0 && value4==0) {
    bcm2835_gpio_write(BUZZER, HIGH);
    else

    } else {
    bcm2835_gpio_write(BUZZER, LOW);

    }

    //check relay
    if (value4==0) {
    bcm2835_gpio_write(LED1, HIGH);
    bcm2835_gpio_write(RELAY, LOW);


    } else if (value4==1) {
    bcm2835_gpio_write(LED1, LOW);
    bcm2835_gpio_write(RELAY, HIGH);

    }


    //check pwm0
    if (value3==0 && prev_state!=1) {
    bcm2835_pwm_set_mode(0,1,1);
    prev_state=1;
    bcm2835_pwm_set_data(0,20); //set pulse width
    } else if (value3==1 && prev_state!=0) {
    bcm2835_pwm_set_mode(0,1,1);
    bcm2835_pwm_set_data(0,5); //set pulse width
    prev_state=0;
    } else {

    bcm2835_pwm_set_mode(0,1,0);
    }

    bcm2835_delay(100);
    }
    bcm2835_close();
  2. itrobotics created this gist Oct 5, 2016.
    86 changes: 86 additions & 0 deletions io_shiled_test.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,86 @@
    #include <bcm2835.h>
    #include <stdio.h>
    #define LED1 5
    #define LED2 6
    #define LED3 13
    #define LED4 26
    #define LED5 12
    #define COM 22
    #define RELAY 27
    #define PWM0 18
    #define PWM1 19
    #define IR_TX 25
    #define IR_RX 17
    #define DIP1 20
    #define DIP2 21
    #define BUTTON1 24
    #define BUTTON2 23
    #define BUZZER 16

    int main(int argc, char **argv)
    {

    int i;
    int value1,value2,value3,value4;
    int led_array[]={LED2,LED4,LED3,LED5};
    int n=sizeof(led_array)/sizeof(led_array[0]);
    if (!bcm2835_init())
    return 1;



    // Set the p5in to be an output
    bcm2835_gpio_fsel(COM, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(COM, HIGH);

    bcm2835_gpio_fsel(LED1, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(BUZZER, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(BUZZER, LOW);

    //DIP. button setup as input
    bcm2835_gpio_fsel(DIP1, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(DIP2, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(BUTTON1, BCM2835_GPIO_FSEL_INPT);
    bcm2835_gpio_fsel(BUTTON2, BCM2835_GPIO_FSEL_INPT);

    for (i=0;i<n;i++) {
    bcm2835_gpio_fsel(led_array[i], BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_write(led_array[i], LOW);
    }
    i=0;
    // Blink
    while (1)
    {

    value1= bcm2835_gpio_lev(DIP1);
    value2= bcm2835_gpio_lev(DIP2);
    value3= bcm2835_gpio_lev(BUTTON1);
    value4= bcm2835_gpio_lev(BUTTON2);
    printf("DIP1=%d,DIP2=%d,BUTTON1=%d,BUTTON2=%d\n", value1,value2,value3,value4);


    // led blinking
    bcm2835_gpio_write(led_array[i], HIGH);
    bcm2835_delay(100);
    bcm2835_gpio_write(led_array[i], LOW);

    i=(i+1)%n;

    //check led1
    if (value1==0 && value2==0)
    bcm2835_gpio_write(LED1, HIGH);
    else
    bcm2835_gpio_write(LED1, LOW);

    //check buzzer
    if (value3==0 && value4==0)
    bcm2835_gpio_write(BUZZER, HIGH);
    else
    bcm2835_gpio_write(BUZZER, LOW);

    bcm2835_delay(100);
    }
    bcm2835_close();
    return 0;
    }