element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Members
    Members
    • Benefits of Membership
    • Achievement Levels
    • Members Area
    • Personal Blogs
    • Feedback and Support
    • What's New on element14
  • Learn
    Learn
    • Learning Center
    • eBooks
    • STEM Academy
    • Webinars, Training and Events
    • More
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • More
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • More
  • Products
    Products
    • Arduino
    • Dev Tools
    • Manufacturers
    • Raspberry Pi
    • RoadTests & Reviews
    • Avnet Boards Community
    • More
  • Store
    Store
    • Visit Your Store
    • Choose Another Store
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
Technical Library
  • Products
  • Dev Tools
  • Technical Library
  • More
  • Cancel
Technical Library
Forum Gertboard test suite
  • Blog
  • Forum
  • Documents
  • Events
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Technical Library requires membership for participation - click to join
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 3 replies
  • Subscribers 45 subscribers
  • Views 127 views
  • Users 0 members are here
  • How To
  • center
  • learning
Related

Gertboard test suite

Former Member
Former Member over 7 years ago

Hello, sorry if my question seem stupid, but I have only two days experience with Rasperry and Gertboard .I' using Raspbian.

Well I'm working with the Gert's demo program "leds". By using the file make file, source code and objet code I have got with the command " make all" the executable "leds".

Launching this with the command " sudo ./leds " it work as expected.

But if I try to  launch the executable "leds" by double cliking on the program's icon. nothing happen. I think this is due to the problem that using GPIO require to be Supervisor (sudo).

Could I put on the source code one or more instruction just to tell the program that I'm the boss and it must work by double clickin on it ?

Thank you a lot for any help.

Giovanni Siccardi-Imperia -Italy

sigi@uno.it

---------------------------------------------------------SOURCE CODE LISTING-----------------------------------------------------------------------------------

// WARNING : to get this program working properly on Raspberry pi B+

 

// it has been necessary to change every occurence of GPIO 21

 

//to GPIO 27, due to the different pin connections

 

// from Raspberry Pi to Raspberry Pi B+

 

//------------------------------------------------------------------

 

//+++++++++++++++++++++++++++++++

 

//-------------------------------------------------------------------

 

//

 

// Gertboard test suite

 

//

 

// These program walks the LEDs

 

//

 

//

 

// This file is part of gertboard test suite.

 

//

 

//

 

// Copyright (C) Gert Jan van Loo & Myra VanInwegen 2012

 

// No rights reserved

 

// You may treat this program as if it was in the public domain

 

//

 

// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

 

// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

 

// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

 

// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE

 

// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

 

// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

 

// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

 

// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

 

// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

 

// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

 

// POSSIBILITY OF SUCH DAMAGE.

 

//

 

//

 

// Try to strike a balance between keep code simple for

 

// novice programmers but still have reasonable quality code

 

//

 

#include "gb_common.h"

 

// Use defines for the LEDS. In the GPIO code, GPIO pins n is controlled

 

// by bit n. The idea is here is that for example L1 will refer

 

// to the first LED, which is controlled by GPIO25 (because we will

 

// put a strap between GP25 anb B1). This gives a more intuitive

 

// name to use for the LEDs in the patterns.

 

//

 

// For novice users: don't worry about the complexity

 

// The compiler will optimise out all constant expressions and you

 

// will end up with a single constant value in your table.

 

#define L1 (1<<25)

 

#define L2 (1<<24)

 

#define L3 (1<<23)

 

#define L4 (1<<22)

 

#define L5 (1<<27)

 

#define L6 (1<<18)

 

#define L7 (1<<17)

 

#define L8 (1<<11)

 

#define L9 (1<<10)

 

#define L10 (1<<9)

 

#define L11 (1<<8)

 

#define L12 (1<<7)

 

#define ALL_LEDS (L1|L2|L3|L4|L5|L6|L7|L8|L9|L10|L11|L12)

 

// LEDs test GPIO mapping:

 

// Function Mode

 

// GPIO0= unused

 

// GPIO1= unused

 

// GPIO4= unused

 

// GPIO7= LED Output

 

// GPIO8= LED Output

 

// GPIO9= LED Output

 

// GPIO10= LED Output

 

// GPIO11= LED Output

 

// GPIO14= unused (preset to be UART)

 

// GPIO15= unused (preset to be UART)

 

// GPIO17= LED Output

 

// GPIO18= LED Output

 

// GPIO27= LED Output

 

// GPIO22= LED Output

 

// GPIO23= LED Output

 

// GPIO24= LED Output

 

// GPIO25= LED Output

 

void setup_gpio(void)

 

{

 

INP_GPIO(7); OUT_GPIO(7);

 

INP_GPIO(8); OUT_GPIO(8);

 

INP_GPIO(9); OUT_GPIO(9);

 

INP_GPIO(10); OUT_GPIO(10);

 

INP_GPIO(11); OUT_GPIO(11);

 

// 14 and 15 are already set to UART mode

 

// by Linux. Best if we don't touch them

 

INP_GPIO(17); OUT_GPIO(17);

 

INP_GPIO(18); OUT_GPIO(18);

 

INP_GPIO(27); OUT_GPIO(27);

 

INP_GPIO(22); OUT_GPIO(22);

 

INP_GPIO(23); OUT_GPIO(23);

 

INP_GPIO(24); OUT_GPIO(24);

 

INP_GPIO(25); OUT_GPIO(25);

 

} // setup_gpio

 

//

 

// Define the various patterns.

 

// The idea here is that each number in the arrays below specifies

 

// a collection of LEDs to turn on. The last element in each array is

 

// -1 so we can run through the patter with a a loop and detect when

 

// we are at the last item in the pattern. pattern0 and pattern1

 

// have only one LED on at a time. pattern2 starts with one on

 

// then turns on 2 of themm then 3, etc. Since each LED is controlled by

 

// a bit, we | (or) them together to turn on more than one LED as a time.

 

//

 

static int pattern0[] =

 

{L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, -1 };

 

static int pattern1[] =

 

{L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12,

 

L12, L11, L10, L9, L8, L7, L6, L5, L4, L3, L2, L1, -1 };

 

static int pattern2[] =

 

{0x0,

 

L1,

 

L1|L2,

 

L1|L2|L3,

 

L1|L2|L3|L4,

 

L1|L2|L3|L4|L5,

 

L1|L2|L3|L4|L5|L6,

 

L1|L2|L3|L4|L5|L6|L7,

 

L1|L2|L3|L4|L5|L6|L7|L8,

 

L1|L2|L3|L4|L5|L6|L7|L8|L9,

 

L1|L2|L3|L4|L5|L6|L7|L8|L9|L10,

 

L1|L2|L3|L4|L5|L6|L7|L8|L9|L10|L11,

 

L1|L2|L3|L4|L5|L6|L7|L8|L9|L10|L11|L12,

 

L2|L3|L4|L5|L6|L7|L8|L9|L10|L11|L12,

 

L3|L4|L5|L6|L7|L8|L9|L10|L11|L12,

 

L4|L5|L6|L7|L8|L9|L10|L11|L12,

 

L5|L6|L7|L8|L9|L10|L11|L12,

 

L6|L7|L8|L9|L10|L11|L12,

 

L7|L8|L9|L10|L11|L12,

 

L8|L9|L10|L11|L12,

 

L9|L10|L11|L12,

 

L10|L11|L12,

 

L11|L12,

 

L12,

 

-1};

 

// Local (to this file) variables

 

static int *pattern = pattern0; // current pattern

 

static int step = 0; // which pattern element we are showing

 

void show_LEDs(int value)

 

{

 

// first turn off all LEDs - GPIO_CLR0 selects which output pins

 

// will be set up 0

 

GPIO_CLR0 = ALL_LEDS;

 

// now light up the ones for this value - GPIO_SET0 selects which

 

// output pins will be set up 1

 

GPIO_SET0 = value;

 

} // set_pattern

 

void leds_off(void)

 

{

 

GPIO_CLR0 = ALL_LEDS;

 

}

 

//

 

// Start anew with one of the available patterns

 

//

 

void start_new_pattern(int p)

 

{

 

switch (p)

 

{

 

case 0 : pattern = pattern0; break;

 

case 1 : pattern = pattern1; break;

 

case 2 : pattern = pattern2; break;

 

default: return;

 

}

 

step = 0;

 

// show the LEDs for the first item in the new pattern

 

show_LEDs(pattern[step]);

 

} // start_new_pattern

 

//

 

// Do single pattern step

 

// return 1 on last pattern

 

// return 0 on all others

 

//

 

int led_step()

 

{

 

step++;

 

if (pattern[step]==-1) // we're at end of this pattern, start over

 

step=0;

 

show_LEDs(pattern[step]);

 

return pattern[step+1]== -1 ? 1 : 0; // are we at last value?

 

} // led_step

 

//

 

// Quick play all patterns

 

//

 

int main(void)

 

{ int p,r,last;

 

printf ("These are the connections for the LEDs test:\n");

 

printf ("jumpers in every out location (U3-out-B1, U3-out-B2, etc)\n");

 

printf ("GP25 in J2 --- B1 in J3\n");

 

printf ("GP24 in J2 --- B2 in J3\n");

 

printf ("GP23 in J2 --- B3 in J3\n");

 

printf ("GP22 in J2 --- B4 in J3\n");

 

printf ("GP27 in J2 --- B5 in J3\n");

 

printf ("GP18 in J2 --- B6 in J3\n");

 

printf ("GP17 in J2 --- B7 in J3\n");

 

printf ("GP11 in J2 --- B8 in J3\n");

 

printf ("GP10 in J2 --- B9 in J3\n");

 

printf ("GP9 in J2 --- B10 in J3\n");

 

printf ("GP8 in J2 --- B11 in J3\n");

 

printf ("GP7 in J2 --- B12 in J3\n");

 

printf ("(If you don't have enough straps and jumpers you can install\n");

 

printf ("just a few of them, then run again later with the next batch.)\n");

 

printf ("When ready hit enter.\n");

 

(void) getchar();

 

printf ("/////////////////////////////////////////////////////////////////////////////////////////////\n");

 

printf ("WARNING : to get this program working properly on Raspberry pi B+\n");

 

printf ("it has been necessary to change every occurence of GPIO 21\n");

 

printf ("to GPIO 27, due to the different pin connections \n");

 

printf (" from Raspberry Pi to Raspberry Pi B+\n");

 

printf ("/////////////////////////////////////////////////////////////////////////////////////////////\n");

 

printf ("When ready hit enter.\n");

 

(void) getchar();

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

  

 

// Map the I/O sections

 

setup_io();

 

// Set 12 GPIO pins to output mode

 

setup_gpio();

 

/* for testing purposes...

 

GPIO_SET0 = 0x180;

 

(void) getchar();

 

GPIO_CLR0 = 0x100;

 

(void) getchar();

 

*/

 

for (p=0; p<3; p++)

 

{

 

// run pattern several times

 

start_new_pattern(p);

 

for (r=0; r<2; r++)

 

{ do {

 

last = led_step();

 

long_wait(3);

 

} while (!last);

 

} // run the pattern 2 times

 

} // loop over patterns

 

leds_off();

 

restore_io();

 

} // main

  • Reply
  • Cancel
  • Cancel
  • mvnieuw
    0 mvnieuw over 7 years ago

    Hi Giovanni,

     

    Did you set the program as executable:

    sudo chmod +x filename

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 7 years ago in reply to mvnieuw

    Thank you Marco for your answer.The problem is that I'm an absolute dummy beginner with Linux.

    Could you be so kind to explain where I have to set the program as executable.

    In the source code ? Or when I make the file ?Or from console ?

    I try to learn this interesting new (for me) world of Linux, but this is only the third day of study.

    I'm used to work with Visual Studio, but   my background is of no help in this case.

    Thank you a lot for your willingness.

    Giovanni Siccardi

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • mvnieuw
    0 mvnieuw over 7 years ago in reply to Former Member

    Hi Giovanni,

     

    I am not sure if that was the correct answer. Just try out the following.

     

    linux is not that difficult, the commands are slightly different ;-)

     

    Open a terminal (console) window

    go to the folder, use the cd command, make sure to use forward slashes inside the console (where windows uses backslashes)

    sudo chmod +x ./leds

     

    What this command does is to mark the file as executable which makes it possible to run it.

    See if this works, if not please let me know and I will dig further into this. It has been a long time since I connected my B model.

    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
Element14

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2022 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • Facebook
  • Twitter
  • linkedin
  • YouTube