Table of Contents

Corning Community College

ENGR1050 C for Engineers

PROJECT: Press The Button (PTB2)

OBJECTIVE

Buttons and multi-colored LEDs, oh my!

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

Taking our knowledge of LEDs and buttons:

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:

PTB2

switch

The switch used has three connection pins:

  • Connect the central pin to 3.3V, using a 10 KΩ resistor in series
  • Connect one of the outer pins to a GPIO pin, using a 10 KΩ resistor in series. This pin serves as the ground

button

Your button(s) should produce an input for the RED, GREEN, and BLUE LEDs. All the buttons should be set to input mode since they're input devices. With that information, I would code the button to the corresponding LED. So Red button to the red LED, blue to blue, and green to green. The switch also should be set to input, just like the buttons are. Each button must also be connected to a 3.3v pin. There are 2 on the t-cobbler, I would recommend dividing your wires between the 2 and not just using one.

multicolor LED

[ptb2] The multicolor LED should output the colors RED, GREEN, and BLUE. With that information , I would personally color code the buttons associated with the specific color desired when the button is pressed. Meaning have a RED button cap for when you want the multicolor LED to output RED, and so on for each color. This just makes it easier to test your code. The circuit of the multicolor LED should have a 3.3 V running through the longest leg of the LED. Then there will be a 220k ohm resistor for each of the other legs that are wired to three different gpio pins. The gpio pins serve as a ground, so a separate ground wire is not needed.

if-else

The if else statement essentially means that “ if this condition is true do the following thing, else do this thing instead”. If the condition inside the parentheses evaluates to true , the code inside the if block will execute.

An easy way to write an if statement that executes when our button is pressed, is just to simply combine functions:

if(digitalRead(BUTTON)){
   //some code here//
}

With this method, there is no need to write out a full expression. You can simply evaluate within the if statement.

staying within a range

In this project, we want to stay within a range from 0 to 100, and cycle to the other end of the range when exceeded. One way to do this is to use the modulus operator to take the remainder of our expression divided by our upper range + one factor, i.e.

(10*direction)%110; // 110, since we're jumping by 10s. 

Another way to do this would be to add an if statement each time the variable is changed, i.e.

value = 110; 
if(value>100)
   value = 0;

Because there's only one statement being executed after the if statement, there is no need to add curly brackets.

Using this method, we can also make sure we stay in the positives with an additional if statement:

if(value>100)
   value = 0; 
if(value<0)
   value = 100; 

Now when we go below 0 or above 100, we will cycle to the other side of the range. It is important to add these if statements directly after the value is changed, to ensure the out-of-bounds value doesn't get used in any code executions.

 

STRATEGY

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

SET REDVAL, GRNVAL, BLUVAL TO ZERO
REPEAT INFINITELY:
    SHOULD THE INCREMENT POSITION ON THE SWITCH BE SET:
        SET DIRECTION TO POSITIVE ONE
    OTHERWISE:
        SET DIRECTION TO NEGATIVE ONE

    SHOULD THE RED BUTTON BE PRESSED:
        ADJUST REDVAL BY (TEN TIMES DIRECTION)

    SHOULD THE GREEN BUTTON BE PRESSED:
        ADJUST GRNVAL BY (TEN TIMES DIRECTION)

    SHOULD THE BLUE BUTTON BE PRESSED:
        ADJUST BLUVAL BY (TEN TIMES DIRECTION)

    ACTIVATE MULTICOLOR LED TO RGB VALUES CURRENTLY SET
    
    DELAY AT LEAST FIFTY MILLISECONDS

COMMENT: INFINITE REPEAT BLOCK CONCLUDES

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:

65:ptb2:final tally of results (65/65)
*:ptb2:used grabit to obtain project by the Sunday prior to duedate [6/6]
*:ptb2:clean compile, no compiler messages [7/7]
*:ptb2:switch is read and adjusts color level direction [13/13]
*:ptb2:each button adjusts its pertinent color level [13/13]
*:ptb2:multicolor LED displays current set RGB levels [13/13]
*:ptb2:code tracked in lab46 semester repo [13/13]

Pertaining to the collaborative authoring of project documentation

Additionally