Table of Contents

Corning Community College

ENGR1050 C for Engineers

PROJECT: Press The Button (PTB0)

OBJECTIVE

We continue our explorations of the electronics kit, this time by encountering our first interactions with input devices, in the form of the button.

PROCESS

Do note, the productive way to go about this project involves taking the following steps:

If you start too late, and do not ask questions, and do not have enough time and don't know what is going on, you are not doing the project correctly.

TASK

After exploring, assembling, and testing the intended circuit (1 button, 1 red LED, 1 green LED, 1 speaker- all independently connected to the pi via separate GPIO pins), adapt the provided C code to provide software control to coordinate button presses with speaker activations, and have the also independently-connected LEDs light up or turn off to mark whether the button is pressed/speaker is activated or not.

Green means button is pressed/speaker is active.

Red means button is not pressed/speaker is inactive.

GRABIT

To assist with consistency across all implementations, data files for use with this project are available on lab46 via the grabit tool. Be sure to obtain it and ensure your implementation properly works with the provided data.

lab46:~/src/SEMESTER/DESIG$ grabit DESIG PROJECT

EDIT

You will want to go here to edit and fill in the various sections of the document:

PTB0

LED

The RED and GREEN LED's have to have 3.3V, 220ohm resistors, and be grounded.

GPIO MODE SETTING

The GPIO mode setting you have plays a critical role in making sure the circuit functions properly. Using commands such as gpio mode (WPI) in/out will control whether or pin is an input or output. gpio write (WPI) 0/1 will control if the pin you select receives voltage. 0 being none, 1 meaning it will receive voltage.

GPIO COMMAND-LINE TESTING

We can test our pin outputs directly from the command line, before writing code.

After identifying the pin number with GPIO readall, we can then use commands such as GPIO mode PIN# OUTPUT and GPIO write PIN# 1 and observe the result on our circuit. If we set the GPIO pin connected to our red LED to high, and the red LED doesn't turn on, we know something is wrong.

SPEAKER

Active speaker has one leg longer than the other. It also has a closed bottom while the active speaker has an open bottom. The long lead is the positive connection. The active speaker behaves in an on or off state. The tone cannot be altered.

For this project, the intent is to use a passive speaker and alter the tone. The passive speaker has the green PCB on the bottom. Many folks had trouble with the passive speaker, so substituted with the active speaker. transister 8050

The transistor will be acting as a solenoid to control the continuity between the negative lead on the speaker, and ground. The reason we will be using the transistor to control ground is because the speaker needs 5 volts which can only come from the constant 5v pin. The output pin that controls speaker activation will be the “trigger wire” for the transistor to make continuity between the speaker and ground.

CODING THE SPEAKER

The active speaker simply needs to be toggled on or off to work.

digitalWrite (GPIO_PIN, STATE) 

Where:

  • GPIO_PIN = the wiringPi pin number or the name you declared for that pin
  • STATE = HIGH or LOW to either enable or disable the GPIO_PIN

The passive speaker needs to also be given a tone, in Hz, to function.

softToneWrite (GPIO_PIN, TONE)

Where:

  • GPIO_PIN = the wiringPi pin number or the name you declared for that pin
  • TONE = Frequencyof tone to use, or the name you declared for that variable
GPIO MODE SETTING

To initialize our GPIO pins, we use the pinMode() function with the first argument being the pin number, and the second argument being the state (input or output).

As an example, to initialize the pin our red LED is on to OUTPUT, after we've defined REDLED as the corresponding pin number, we would do this:

pinMode (REDLED, OUTPUT); 

We also want to initialize our inputs, which has already been done for us in this snippet here:

 
pinMode (BUTTON, INPUT); 

Underneath that we find pullUpDnControl(). We don't need to worry about this, but this essentially allows our input to be accurate. Without this, we may not detect input from the button properly.

BUTTON

The button itself be connected to a wire from the 3.3V pin through a 10k ohm resistor, a wire from a gpio pin through a 10k ohm resistor, and a wire leading to the ground pin. In the code, define the button according to the GPIO pin its connected to. The following code will be used if its connected to GPIO5:

#define BUTTON       21

The button should already be set to input in the code because when you are pressing the button, you are inputting information into the program. The state of the button should already be defined in the code to rely on whether the button is being pushed or not.

state     = digitalRead (BUTTON);

if you wanted to make an if statement that is in effect when the button is being pushed, you can use the following:

if (state  == LOW) { 

Then you can use an else, which will only take effect when the button is not being pushed. The entire outline of the code should look like:

 if (state == LOW){
functions when button is pressed}
else {
functions to do when button isnt pressed } 
GPIO MODE SETTING
VERIFYING CORRECT CIRCUIT CONNECTION

At every stage of building our circuit, it's useful to make sure that things are hooked up properly before writing our code.

One example of this would be plugging our LEDs to 3.3v instead of a GPIO pin, just to make sure they turn on.

We can also make sure our buzzer works by connecting the middle leg of the transistor to 3.3v (with the correct resistor in our circuit).

 

STRATEGY

The general flow of the process (one way of going about it, anyway) can be described as follows:

REPEAT:
    SHOULD THE BUTTON BE PRESSED:
        ACTIVATE THE GREEN LED
        DEACTIVATE THE RED LED
        ACTIVATE THE SPEAKER -> MAKE NOISE
    OTHERWISE:
        DEACTIVATE THE GREEN LED
        ACTIVATE THE RED LED
        DEACTIVATE THE SPEAKER -> SILENCE
    
    DELAY AT LEAST FIFTY MILLISECONDS

SUBMISSION

To be successful in this project, the following criteria (or their equivalent) must be met:

Submit Tool Usage

Let's say you have completed work on the project, and are ready to submit, you would do the following (assuming you have a program called uom0.c):

lab46:~/src/SEMESTER/DESIG/PROJECT$ make submit

You should get some sort of confirmation indicating successful submission if all went according to plan. If not, check for typos and or locational mismatches.

RUBRIC

I'll be evaluating the project based on the following criteria:

52:ptb0:final tally of results (52/52)
*:ptb0:used grabit to obtain project by the Sunday prior to duedate [5/5]
*:ptb0:clean compile, no compiler messages [6/6]
*:ptb0:speaker and button each hooked to unique GPIOs [9/9]
*:ptb0:speaker only makes noise on activation [9/9]
*:ptb0:button state is read, on press code activates speaker [9/9]
*:ptb0:button state (ON, OFF) is indicated by two LEDs [9/9]
*:ptb0:code tracked in lab46 semester repo [5/5]

Pertaining to the collaborative authoring of project documentation

Additionally