Corning Community College
ENGR1050 C for Engineers
Buttons and multi-colored LEDs, oh my!
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.
Taking our knowledge of LEDs and buttons:
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
You will want to go here to edit and fill in the various sections of the document:
The switch used has three connection pins:
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.
[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.
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.
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.
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
To be successful in this project, the following criteria (or their equivalent) must be met:
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.
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]