This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
haas:fall2020:common:projects:led0 [2020/08/25 15:10] – [(1) breadboard] wedge | haas:fall2020:common:projects:led0 [2020/09/18 13:28] (current) – [The Circuit to Construct] wedge | ||
---|---|---|---|
Line 3: | Line 3: | ||
=====Objective===== | =====Objective===== | ||
- | To create a program that generates a unique pattern of lit LEDs on your pi based on constraints | + | To successfully interface an LED to your pi and control it via software (commands, provided program) |
- | {{page> | + | We also further utilize enforced time constraints, |
+ | |||
+ | =====Abstraction===== | ||
+ | {{page> | ||
=====Locational Awareness===== | =====Locational Awareness===== | ||
Line 30: | Line 33: | ||
<cli> | <cli> | ||
- | yourpi: | + | yourpi: |
| | ||
| BCM | wPi | | | BCM | wPi | | ||
Line 57: | Line 60: | ||
| BCM | wPi | | | BCM | wPi | | ||
| | ||
- | yourpi: | + | yourpi: |
</ | </ | ||
Line 91: | Line 94: | ||
{{ : | {{ : | ||
+ | |||
+ | <WRAP round info>We will be inserting the metal legs of various components in various holes on the breadboard, to connect our circuit together.</ | ||
+ | |||
+ | On the breadboard, there are 2 different pathways of connectivity. If you look along the top and bottom of the breadboard, do you see the red and blue strip running horizontal across the board? That means that ALL pins in that row are hooked together (all the pins along the blue line are hooked together with each other, all the pins along the red lines are hooked together with each other). We will be using that to to provide things like a common voltage (+) or a common ground (-) to components that need such things. | ||
+ | |||
+ | In the middle of the breadboard, separated by the valley in the plastic molding, are columns of connected pins (unique columns, also separate from the other side of the valley). Each group of those 5 pins is hooked together. | ||
+ | |||
+ | You'll notice occasional "by 5" counting off silkscreened on the breadboard, which can be used to try to keep things organized. | ||
+ | |||
+ | Here's a logical diagram of the breadboard layout: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Here's a good video overview of the functionality of a breadboard: | ||
+ | |||
+ | * https:// | ||
====(1) T-cobbler and data cable==== | ====(1) T-cobbler and data cable==== | ||
In your kit should be a T-shaped device (known as the " | In your kit should be a T-shaped device (known as the " | ||
Line 116: | Line 135: | ||
<WRAP round info> | <WRAP round info> | ||
- | ====male to male connector | + | ====male to male jumper |
+ | As a final piece of equipment you will need, locate and have a few male-to-male jumper wires handy for use in our circuit: | ||
+ | {{ : | ||
+ | =====The Circuit to Construct===== | ||
+ | With those components, you will want to place them onto your breadboard in a manner similar to this: | ||
- | =====Program===== | + | {{ : |
- | It is your task to write a program to interface with an LED (light emitting diode), a nice software-hardware connection, on your raspberry pi. | + | |
- | ====On your pi==== | + | Take note of how everything is being plugged in, and what connection |
- | Develop, test, and run this program on your pi. When done, submit it on lab46. | + | |
- | To utilize | + | Notice how the circuit runs from ground |
- | * **build-essential** (hopefully | + | Before |
- | * **wiringpi** | + | |
- | ===Installing wiringpi=== | + | ====Testing connectivity==== |
- | An exception to the usual package installation process, especially for those with a Raspberry Pi model 4B: when you install **wiringpi** | + | To verify whether everything is hooked up correctly (including |
+ | |||
+ | ===Set wiringPi pin 0 to OUTPUT mode=== | ||
+ | Remember in that big readout of all the gpio pins above? Take a look at the settings for wiringPi pin 0: | ||
<cli> | <cli> | ||
- | yourpi: | + | |
- | Oops - unable to determine board type... model: | + | | BCM | wPi | |
+ | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | ||
+ | | ||
+ | | ||
</ | </ | ||
- | What you will need to do is manually install an updated | + | Note that, currently wPi pin 0 is set to INPUT (with no voltage). We need to change that to OUTPUT, which you can do by doing the following: |
<cli> | <cli> | ||
- | yourpi: | + | yourpi: |
- | ... | + | |
- | yourpi: | + | |
- | ... | + | |
- | yourpi: | + | |
</ | </ | ||
- | ===The program (led0.c)=== | + | At which point that particular pin will be changed from IN to OUT: |
- | The program you will need is once again provided via a grabit on lab46, source code also included here for study: | + | |
- | <code c> | + | <cli> |
- | #include <stdio.h> // include support for C standard library input/ | + | +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+ |
- | #include <stdlib.h> // include support for general C standard library functionality | + | | BCM | wPi | |
- | # | + | |
+ | | ... | ||
+ | | 17 | 0 | GPIO. 0 | OUT | 0 | 11 | | ||
+ | </cli> | ||
- | int main (void) | + | Okay, output mode enabled, now to twiddle the bits off and on: |
- | { | + | |
- | ////////////////////////////////////////////////////////////////////////// | + | |
- | // | + | |
- | // Declare variables | + | |
- | // | + | |
- | int gpio_pin | + | |
- | ////////////////////////////////////////////////////////////////////////// | + | <cli> |
- | // | + | yourpi:~/src/desig/led0$ gpio write 0 1 ## activate voltage on wiringpi pin 0 (turn on) |
- | | + | yourpi: |
- | // | + | </ |
- | if (wiringPiSetup() == -1) | + | |
- | { | + | |
- | fprintf | + | |
- | | + | |
- | } | + | |
- | ////////////////////////////////////////////////////////////////////////// | + | If your LED is hooked up correctly, |
- | // | + | |
- | // Display usage information to the user | + | |
- | // | + | |
- | fprintf (stdout, " | + | |
- | ////////////////////////////////////////////////////////////////////////// | + | If you get no activity out of the LED, try reversing it and try again. |
- | // | + | |
- | // Initialize utilized GPIO pin to OUTPUT mode | + | |
- | // | + | |
- | pinMode (gpio_pin, OUTPUT); | + | |
- | ////////////////////////////////////////////////////////////////////////// | + | =====Program===== |
- | // | + | It is your task to compile, run, and understand a program to interface with an LED (light emitting diode), a nice software-hardware connection, |
- | // Repeat until interrupted (CTRL-c | + | |
- | // | + | |
- | while (1) | + | |
- | { | + | |
- | digitalWrite (gpio_pin, LOW); // set signal on gpio_pin LOW | + | |
- | delay (1000); // delay for 1000ms | + | |
- | digitalWrite (gpio_pin, HIGH); | + | |
- | delay (1000); | + | |
- | } | + | |
- | return (0); | + | The program files provided for this project are complete. You merely have to get it on your pi, compile it, and run it, with the appropriate circuitry hooked up to the specified places. You will want to make sure you UNDERSTAND what is going on. |
- | } | + | |
- | </ | + | |
- | The program for this project is complete. You merely have to get it on your pi, compile it, and run it, with the appropriate circuitry hooked up to the specified places. | + | In future projects you will start implementing more logic to attain further functionality. |
- | =====Specifications===== | + | |
- | Your program should: | + | |
- | * have valid, descriptive variable names of length //no shorter than// 4 symbols | + | ====Grabbing project resources |
- | * have consistent, well-defined indentation (no less than 4 spaces per level of indentation) | + | |
- | * all code within the same scope aligned to its indentation level | + | |
- | * have proximal comments explaining your rationale and what is going on, throughout your code | + | |
- | * perform the intended operation, outputting the correct/ | + | |
- | * at the end of your main() function, use a single return statement to conclude your code, return a 0 indicating successful operation | + | |
- | + | ||
- | =====Grabbing project resources===== | + | |
I have prepared a **grabit** for resources related to this project. To obtain: | I have prepared a **grabit** for resources related to this project. To obtain: | ||
Line 227: | Line 212: | ||
At which point you can change into the newly created and populated **led0** directory. | At which point you can change into the newly created and populated **led0** directory. | ||
+ | |||
+ | ====Getting project resources from lab46 to your pi==== | ||
+ | Okay, you've snagged the project files on lab46. Now, how to get them to your pi? | ||
+ | |||
+ | The same way you've been juggling project files already, by using your mercurial repository! | ||
+ | |||
+ | Using the **hg** tool, be sure to **add**, **commit**, and **push** successfully on lab46. | ||
+ | |||
+ | Then, over on your pi, use **hg** to **pull** and **update** the new changes into place. Then you can proceed. | ||
+ | |||
+ | ====On your pi==== | ||
+ | Study and run this program on your pi in conjunction with testing and verifying operation of your properly hooked up electronics circuit. When done, submit it on lab46. | ||
+ | |||
+ | To utilize the needed functionality for this project, you will need to ensure you have the following packages installed: | ||
+ | |||
+ | * **build-essential** (hopefully you took care of this in ntr0) | ||
+ | * **wiringpi** | ||
+ | |||
+ | ===Installing wiringpi=== | ||
+ | An exception to the usual package installation process, especially for those with a Raspberry Pi model 4B: when you install **wiringpi** the usual way, we may end up with errors when proceeding further, such as the following: | ||
+ | |||
+ | <cli> | ||
+ | yourpi: | ||
+ | Oops - unable to determine board type... model: 17 | ||
+ | </ | ||
+ | |||
+ | What you will need to do is manually install an updated (and out of database) version of the **wiringpi** package, as follows (looking out for errors along the way): | ||
+ | |||
+ | <cli> | ||
+ | yourpi: | ||
+ | ... | ||
+ | yourpi: | ||
+ | ... | ||
+ | yourpi: | ||
+ | </ | ||
=====Compiling===== | =====Compiling===== | ||
Line 250: | Line 270: | ||
* Track/ | * Track/ | ||
* Submit a copy of your source code to me using the **submit** tool. | * Submit a copy of your source code to me using the **submit** tool. | ||
+ | * Post required images and obtain needed confirmation to proceed from me on class channel on discord. | ||
To submit this program to me using the **submit** tool, run the following command at your lab46 prompt: | To submit this program to me using the **submit** tool, run the following command at your lab46 prompt: | ||
Line 267: | Line 288: | ||
< | < | ||
26: | 26: | ||
- | *:led0:post picture of unpowered layout to #desig and get approval [4/4] | + | *:led0:post picture of unpowered layout to #desig and get approval [6/6] |
- | *:led0:post picture to #desig by Sunday before deadline [2/2] | + | *:led0:post picture to #desig by Sunday before deadline [4/4] |
- | *:led0:post picture of powered LED to #desig [4/4] | + | *:led0:post picture of powered LED to #desig [6/6] |
- | *: | + | *: |
*:led0:code is pushed to lab46 repository [6/6] | *:led0:code is pushed to lab46 repository [6/6] | ||
- | *:led0:no negative compiler messages for program [6/6] | ||
</ | </ | ||