<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://socialledge.com/sjsu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Preet</id>
		<title>Embedded Systems Learning Academy - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://socialledge.com/sjsu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Preet"/>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php/Special:Contributions/Preet"/>
		<updated>2026-04-19T14:13:55Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.1</generator>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F24:_Dodge_Cars&amp;diff=72499</id>
		<title>F24: Dodge Cars</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F24:_Dodge_Cars&amp;diff=72499"/>
				<updated>2024-10-29T02:21:00Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;=== Grading Criteria === &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; *  How well is Software &amp;amp; Hardware Design described? *  How well can this report be used to reproduce this project? *  Code Quali...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
Parking Frenzy&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Parking Frenzy is car parking video game. The player will be able to move the car in right or left direction, the road itself will be descending towards the car and will also consist of obstacles such as other vehicles. The road will have lanes through which the car must navigate to ultimately be able to slot itself into the right parking spot alongside the road. The parking spots will be randomly generated along the edge of the LED matrix and the player must navigate the car into the spot at the right time or else it will result in a crash. The difficulty of the game will increase as the player reaches a certain amount of points. The difficulty will increase in terms of the speed of the car and the number of obstacles. The final score of the player will be displayed at the end of every game. a speaker attached to the board will generate the game sounds.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Shreyas&lt;br /&gt;
**   &lt;br /&gt;
*  Teja&lt;br /&gt;
**   &lt;br /&gt;
*  Navneet&lt;br /&gt;
**   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| &lt;br /&gt;
* 10/12/2020&lt;br /&gt;
* 10/13/2020&lt;br /&gt;
|&lt;br /&gt;
* 10/18/2020&lt;br /&gt;
* 10/13/2020&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Create GitLab repository for project&lt;br /&gt;
| &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Completed&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;In progress&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| &lt;br /&gt;
*10/19/2020   &lt;br /&gt;
| &lt;br /&gt;
*10/20/2020 &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
*Order necessary parts&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;In progress&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
|&lt;br /&gt;
*10/26/2020&lt;br /&gt;
|&lt;br /&gt;
*11/01/2020&lt;br /&gt;
|&lt;br /&gt;
*Read and familiarize with LED Matrix Datasheet&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
|&lt;br /&gt;
* 11/02/2020&lt;br /&gt;
|&lt;br /&gt;
* 11/08/2020&lt;br /&gt;
|&lt;br /&gt;
* Develop graphics driver for LED matrix and implement initial game objects&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
|&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
|&lt;br /&gt;
*11/10/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
|&lt;br /&gt;
* Finalize wiki schedule&lt;br /&gt;
* Order circuit boards components and complete the design for printing&lt;br /&gt;
* circuit board and component assembly&lt;br /&gt;
* Circuit board testing&lt;br /&gt;
* Additional accessories if required and finalization of hardware&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
|&lt;br /&gt;
*11/16/2020 &lt;br /&gt;
| &lt;br /&gt;
*11/22/2020&lt;br /&gt;
|&lt;br /&gt;
*Integration of circuit boards and microcontroller&lt;br /&gt;
* Game logic development&lt;br /&gt;
* Testing and debugging the game logic&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| &lt;br /&gt;
* 11/23/2020&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
* 11/29/2020&lt;br /&gt;
|&lt;br /&gt;
* Integrate game logic code with LED matrix&lt;br /&gt;
* Integrate game sounds with game logic &lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| &lt;br /&gt;
* 11/30/2020&lt;br /&gt;
| &lt;br /&gt;
* 12/06/2020&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* Integrate subsystem&lt;br /&gt;
* Finalizing the video game &lt;br /&gt;
* Update the wiki page.&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| &lt;br /&gt;
* 12/07/2020&lt;br /&gt;
| &lt;br /&gt;
* 12/13/2020&lt;br /&gt;
|&lt;br /&gt;
* Address bugs during testing of integrated system&lt;br /&gt;
* Test pause/play functionality&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| &lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
| &lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
*Final Demo&lt;br /&gt;
*Update Gitlab repo with final code.&lt;br /&gt;
*Update test video.&lt;br /&gt;
*Update the wiki page.&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=72498</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=72498"/>
				<updated>2024-10-29T02:19:34Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /*  Fall 2024 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2024 | Fall 2024]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F24: Dodge Cars]]&lt;br /&gt;
*  [[F24: Rival Rush]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2022 | Fall 2022]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F22: DDRTOS]]&lt;br /&gt;
*  [[F22: xGameCreate]]&lt;br /&gt;
*  [[F22: Embedded Gamers]]&lt;br /&gt;
*  [[F22: Bob Burgers]]&lt;br /&gt;
*  [[F22: Space Warriors]]&lt;br /&gt;
*  [[F22: Thunder Flash]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2021 | Fall 2021]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F21: ACE MARIO]]&lt;br /&gt;
*  [[F21: Skeh-lleybones]]&lt;br /&gt;
*  [[F21: Sons of Ultron]]&lt;br /&gt;
*  [[F21: Juvenile Jumpers]]&lt;br /&gt;
*  [[F21: Treasure Dive]]&lt;br /&gt;
*  [[F21: FollowMe]]&lt;br /&gt;
*  [[F21: Flame Over]]&lt;br /&gt;
*  [[F21: Space Rage]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
*  [[F20: Jubeat]]&lt;br /&gt;
*  [[F20: Flappy]]&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
*  [[F20: Tom &amp;amp; Jerry]]&lt;br /&gt;
*  [[F20: Hungry Snake]]&lt;br /&gt;
*  [[F20: Son of a Gun]]&lt;br /&gt;
*  [[F20: Corona Run]]&lt;br /&gt;
*  [[F20: Maddening Marbles]]&lt;br /&gt;
*  [[F20: Bubble Shooter]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=72497</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=72497"/>
				<updated>2024-10-29T02:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2024 | Fall 2024]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F24: Dodge Cars]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2022 | Fall 2022]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F22: DDRTOS]]&lt;br /&gt;
*  [[F22: xGameCreate]]&lt;br /&gt;
*  [[F22: Embedded Gamers]]&lt;br /&gt;
*  [[F22: Bob Burgers]]&lt;br /&gt;
*  [[F22: Space Warriors]]&lt;br /&gt;
*  [[F22: Thunder Flash]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2021 | Fall 2021]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F21: ACE MARIO]]&lt;br /&gt;
*  [[F21: Skeh-lleybones]]&lt;br /&gt;
*  [[F21: Sons of Ultron]]&lt;br /&gt;
*  [[F21: Juvenile Jumpers]]&lt;br /&gt;
*  [[F21: Treasure Dive]]&lt;br /&gt;
*  [[F21: FollowMe]]&lt;br /&gt;
*  [[F21: Flame Over]]&lt;br /&gt;
*  [[F21: Space Rage]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
*  [[F20: Jubeat]]&lt;br /&gt;
*  [[F20: Flappy]]&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
*  [[F20: Tom &amp;amp; Jerry]]&lt;br /&gt;
*  [[F20: Hungry Snake]]&lt;br /&gt;
*  [[F20: Son of a Gun]]&lt;br /&gt;
*  [[F20: Corona Run]]&lt;br /&gt;
*  [[F20: Maddening Marbles]]&lt;br /&gt;
*  [[F20: Bubble Shooter]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=S24:_Team_Zero&amp;diff=71047</id>
		<title>S24: Team Zero</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=S24:_Team_Zero&amp;diff=71047"/>
				<updated>2024-03-05T04:40:46Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;== Project Title == &amp;lt;Team Name&amp;gt;  &amp;lt;HR&amp;gt; &amp;lt;BR/&amp;gt; == Abstract == &amp;lt;2-3 sentence abstract&amp;gt;  === Introduction ===  The project was divided into N modules:  * Sensor ... * Motor.. * ......&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Title ==&lt;br /&gt;
&amp;lt;Team Name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&amp;lt;2-3 sentence abstract&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The project was divided into N modules:&lt;br /&gt;
&lt;br /&gt;
* Sensor ...&lt;br /&gt;
* Motor..&lt;br /&gt;
* ...&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
&amp;lt;Team Picture&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gitlab Project Link - [https://gitlab.com/...]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Provide ECU names and members responsible&amp;gt;&lt;br /&gt;
&amp;lt;One member may participate in more than one ECU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sensor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Geographical&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Communication Bridge Controller &amp;amp; LCD&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 09/15/2017&lt;br /&gt;
| 09/16/2017&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Distribute modules to each team member.&lt;br /&gt;
&lt;br /&gt;
| Completed&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 09/17/2017&lt;br /&gt;
| 10/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Traxxas&lt;br /&gt;
| 1&lt;br /&gt;
| $250.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers MCP2551-I/P&lt;br /&gt;
| Microchip [http://www.microchip.com/wwwproducts/en/en010405]&lt;br /&gt;
| 8&lt;br /&gt;
| Free Samples&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
&amp;lt;Picture and information, including links to your PCB&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
&amp;lt;Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&amp;lt;Show your CAN bus hardware design&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBC File ===&lt;br /&gt;
&amp;lt;Gitlab link to your DBC file&amp;gt;&lt;br /&gt;
&amp;lt;You can optionally use an inline image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Sensor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Geographical Controller ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Communication Bridge Controller &amp;amp; LCD ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Master Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Mobile Application ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&amp;lt;Organized summary of the project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;What did you learn?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
&amp;lt;Bullet points and discussion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=71046</id>
		<title>Industrial Application using CAN Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=71046"/>
				<updated>2024-03-05T04:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Class Information =&lt;br /&gt;
==Presentation on Autonomous Vehicles==&lt;br /&gt;
http://www.slideshare.net/ShantanuVashishtha1/autonomous-vehicles-70049669&lt;br /&gt;
&lt;br /&gt;
== Useful Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
[[Basic Git Tutorial]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CAN Bus ===&lt;br /&gt;
[[CAN BUS Tutorial | CAN BUS]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[DBC Format]] ===&lt;br /&gt;
DBC format is a well known format to describe the format of a CAN message.  This is essentially the schema of the data that is communicated over the CAN bus.  Please view the linked [[DBC Format]] article for details before reading further.&lt;br /&gt;
&lt;br /&gt;
=== BusMaster Tutorial ===&lt;br /&gt;
[[BusMaster | BusMaster Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Class Assignments ==&lt;br /&gt;
=== [[Lab Assignments]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Class Project ==&lt;br /&gt;
=== [[Self-driving Car]] ===&lt;br /&gt;
In this class project, students accomplish a self-drivable RC car with the following learning objectives:&lt;br /&gt;
*  Learn CAN Bus and how to communicate in an industrial or  automotive environment.&lt;br /&gt;
*  Learn integration and testing across different controllers.&lt;br /&gt;
*  Learn how to work in teams.&lt;br /&gt;
*  Learn basics of an RTOS.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Autonomous RC Car Project Report Template]]&lt;br /&gt;
&lt;br /&gt;
== Class Project Reports ==&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2024 | Spring 2024]] ===&lt;br /&gt;
*  [[S24: Team Zero]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2023 | Spring 2023]] ===&lt;br /&gt;
*  [[S23: Meh-sla Automotive]]&lt;br /&gt;
*  [[S23: X Æ A-13]]&lt;br /&gt;
*  [[S23: CAN CLAN]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2022 | Spring 2022]] ===&lt;br /&gt;
*  [[S22: Testla]]&lt;br /&gt;
*  [[S22: TBD]]&lt;br /&gt;
*  [[S22: Firebolt]]&lt;br /&gt;
*  [[S22: Road Runner]]&lt;br /&gt;
*  [[S22: Silver Arrow]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2021 | Spring 2021]] ===&lt;br /&gt;
*  [[S21: UTAH]]&lt;br /&gt;
*  [[S21: exFAT]]&lt;br /&gt;
*  [[S21: (RC)^2]]&lt;br /&gt;
*  [[S21: Roadster]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2020 | Spring 2020]] ===&lt;br /&gt;
*  [[S20: Nimble]]&lt;br /&gt;
*  [[S20: Bucephalus]]&lt;br /&gt;
*  [[S20: Canster Truck]]&lt;br /&gt;
*  [[S20: Tesla Model RC]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2019 | Spring 2019]] ===&lt;br /&gt;
*  [[S19: CANT Bus | S19: CANT Bus]]&lt;br /&gt;
*  [[S19: Tech Savy | S19: Tech Savy]]&lt;br /&gt;
*  [[S19: Mystery Machine | S19: Mystery Machine]]&lt;br /&gt;
*  [[S19: Run D.B.C | S19: Run D.B.C]]&lt;br /&gt;
*  [[S19: Hot Wheels | S19: Hot Wheels]]&lt;br /&gt;
*  [[S19: Zeus | S19: Zeus]]&lt;br /&gt;
*  [[S19: Automophiles | S19: Automophiles]]&lt;br /&gt;
*  [[S19: Lightfury | S19: Lightfury]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2017 | Fall 2017]] ===&lt;br /&gt;
*  [[F17: Alpha | F17: Alpha]]&lt;br /&gt;
*  [[F17: FoxP2 | F17 FoxP2]]&lt;br /&gt;
*  [[F17: Optimus | F17 Optimus]]&lt;br /&gt;
*  [[F17: Tata Nano | F17 Tata Nano]]&lt;br /&gt;
*  [[F17: Viserion | F17 Viserion]]&lt;br /&gt;
*  [[F17: Vindicators100 | F17 Vindicators100]]&lt;br /&gt;
*  [[F17: Rolling Thunder | F17: Rolling Thunder]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
*  [[F16: Spartan and Furious | F16: Spartan and Furious]]&lt;br /&gt;
*  [[F16: Titans | F16: Titans]]&lt;br /&gt;
*  [[F16: Kasper | F16: Kasper]]&lt;br /&gt;
*  [[F16: AutoNav | F16: AutoNav]]&lt;br /&gt;
*  [[F16: Thunderbolt| F16: Thunderbolt]]&lt;br /&gt;
*  [[F16: The-Nine| F16: The-Nine]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
* [[F15: Quadcopter by Thomas]]&lt;br /&gt;
* [[F15: Undergrads++]]&lt;br /&gt;
* [[F15: TopGun]]&lt;br /&gt;
* [[F15: Fury]]&lt;br /&gt;
* [[F15: Minion]]&lt;br /&gt;
* [[F15: ThunderBird]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE243 Fall 2014 | Fall 2014]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F14: Team2-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team3-Self Driving Car - Optimus Prime]]&lt;br /&gt;
* [[F14: Team4-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team5-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Self Driving Undergrad Team]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=S23:_Meh-sla_Automotive&amp;diff=70034</id>
		<title>S23: Meh-sla Automotive</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=S23:_Meh-sla_Automotive&amp;diff=70034"/>
				<updated>2023-03-01T04:33:48Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;== Project Title == &amp;lt;Team Name&amp;gt;  &amp;lt;HR&amp;gt; &amp;lt;BR/&amp;gt; == Abstract == &amp;lt;2-3 sentence abstract&amp;gt;  === Introduction ===  The project was divided into N modules:  * Sensor ... * Motor.. * ......&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Title ==&lt;br /&gt;
&amp;lt;Team Name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&amp;lt;2-3 sentence abstract&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The project was divided into N modules:&lt;br /&gt;
&lt;br /&gt;
* Sensor ...&lt;br /&gt;
* Motor..&lt;br /&gt;
* ...&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
&amp;lt;Team Picture&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gitlab Project Link - [https://gitlab.com/...]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Provide ECU names and members responsible&amp;gt;&lt;br /&gt;
&amp;lt;One member may participate in more than one ECU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sensor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Geographical&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Communication Bridge Controller &amp;amp; LCD&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 09/15/2017&lt;br /&gt;
| 09/16/2017&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Distribute modules to each team member.&lt;br /&gt;
&lt;br /&gt;
| Completed&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 09/17/2017&lt;br /&gt;
| 10/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Traxxas&lt;br /&gt;
| 1&lt;br /&gt;
| $250.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers MCP2551-I/P&lt;br /&gt;
| Microchip [http://www.microchip.com/wwwproducts/en/en010405]&lt;br /&gt;
| 8&lt;br /&gt;
| Free Samples&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
&amp;lt;Picture and information, including links to your PCB&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
&amp;lt;Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&amp;lt;Show your CAN bus hardware design&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBC File ===&lt;br /&gt;
&amp;lt;Gitlab link to your DBC file&amp;gt;&lt;br /&gt;
&amp;lt;You can optionally use an inline image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Sensor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Geographical Controller ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Communication Bridge Controller &amp;amp; LCD ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Master Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Mobile Application ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&amp;lt;Organized summary of the project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;What did you learn?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
&amp;lt;Bullet points and discussion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=70033</id>
		<title>Industrial Application using CAN Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=70033"/>
				<updated>2023-03-01T04:33:00Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Class Project Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Class Information =&lt;br /&gt;
==Presentation on Autonomous Vehicles==&lt;br /&gt;
http://www.slideshare.net/ShantanuVashishtha1/autonomous-vehicles-70049669&lt;br /&gt;
&lt;br /&gt;
== Useful Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
[[Basic Git Tutorial]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CAN Bus ===&lt;br /&gt;
[[CAN BUS Tutorial | CAN BUS]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[DBC Format]] ===&lt;br /&gt;
DBC format is a well known format to describe the format of a CAN message.  This is essentially the schema of the data that is communicated over the CAN bus.  Please view the linked [[DBC Format]] article for details before reading further.&lt;br /&gt;
&lt;br /&gt;
=== BusMaster Tutorial ===&lt;br /&gt;
[[BusMaster | BusMaster Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Class Assignments ==&lt;br /&gt;
=== [[Lab Assignments]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Class Project ==&lt;br /&gt;
=== [[Self-driving Car]] ===&lt;br /&gt;
In this class project, students accomplish a self-drivable RC car with the following learning objectives:&lt;br /&gt;
*  Learn CAN Bus and how to communicate in an industrial or  automotive environment.&lt;br /&gt;
*  Learn integration and testing across different controllers.&lt;br /&gt;
*  Learn how to work in teams.&lt;br /&gt;
*  Learn basics of an RTOS.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Autonomous RC Car Project Report Template]]&lt;br /&gt;
&lt;br /&gt;
== Class Project Reports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2023 | Spring 2023]] ===&lt;br /&gt;
*  [[S23: Meh-sla Automotive]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2022 | Spring 2022]] ===&lt;br /&gt;
*  [[S22: Testla]]&lt;br /&gt;
*  [[S22: TBD]]&lt;br /&gt;
*  [[S22: Firebolt]]&lt;br /&gt;
*  [[S22: Road Runner]]&lt;br /&gt;
*  [[S22: Silver Arrow]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2021 | Spring 2021]] ===&lt;br /&gt;
*  [[S21: UTAH]]&lt;br /&gt;
*  [[S21: exFAT]]&lt;br /&gt;
*  [[S21: (RC)^2]]&lt;br /&gt;
*  [[S21: Roadster]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2020 | Spring 2020]] ===&lt;br /&gt;
*  [[S20: Nimble]]&lt;br /&gt;
*  [[S20: Bucephalus]]&lt;br /&gt;
*  [[S20: Canster Truck]]&lt;br /&gt;
*  [[S20: Tesla Model RC]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2019 | Spring 2019]] ===&lt;br /&gt;
*  [[S19: CANT Bus | S19: CANT Bus]]&lt;br /&gt;
*  [[S19: Tech Savy | S19: Tech Savy]]&lt;br /&gt;
*  [[S19: Mystery Machine | S19: Mystery Machine]]&lt;br /&gt;
*  [[S19: Run D.B.C | S19: Run D.B.C]]&lt;br /&gt;
*  [[S19: Hot Wheels | S19: Hot Wheels]]&lt;br /&gt;
*  [[S19: Zeus | S19: Zeus]]&lt;br /&gt;
*  [[S19: Automophiles | S19: Automophiles]]&lt;br /&gt;
*  [[S19: Lightfury | S19: Lightfury]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2017 | Fall 2017]] ===&lt;br /&gt;
*  [[F17: Alpha | F17: Alpha]]&lt;br /&gt;
*  [[F17: FoxP2 | F17 FoxP2]]&lt;br /&gt;
*  [[F17: Optimus | F17 Optimus]]&lt;br /&gt;
*  [[F17: Tata Nano | F17 Tata Nano]]&lt;br /&gt;
*  [[F17: Viserion | F17 Viserion]]&lt;br /&gt;
*  [[F17: Vindicators100 | F17 Vindicators100]]&lt;br /&gt;
*  [[F17: Rolling Thunder | F17: Rolling Thunder]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
*  [[F16: Spartan and Furious | F16: Spartan and Furious]]&lt;br /&gt;
*  [[F16: Titans | F16: Titans]]&lt;br /&gt;
*  [[F16: Kasper | F16: Kasper]]&lt;br /&gt;
*  [[F16: AutoNav | F16: AutoNav]]&lt;br /&gt;
*  [[F16: Thunderbolt| F16: Thunderbolt]]&lt;br /&gt;
*  [[F16: The-Nine| F16: The-Nine]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
* [[F15: Quadcopter by Thomas]]&lt;br /&gt;
* [[F15: Undergrads++]]&lt;br /&gt;
* [[F15: TopGun]]&lt;br /&gt;
* [[F15: Fury]]&lt;br /&gt;
* [[F15: Minion]]&lt;br /&gt;
* [[F15: ThunderBird]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE243 Fall 2014 | Fall 2014]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F14: Team2-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team3-Self Driving Car - Optimus Prime]]&lt;br /&gt;
* [[F14: Team4-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team5-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Self Driving Undergrad Team]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F22:_DDRTOS&amp;diff=69098</id>
		<title>F22: DDRTOS</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F22:_DDRTOS&amp;diff=69098"/>
				<updated>2022-10-12T02:17:52Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;=== Grading Criteria === &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; *  How well is Software &amp;amp; Hardware Design described? *  How well can this report be used to reproduce this project? *  Code Quali...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
Parking Frenzy&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Parking Frenzy is car parking video game. The player will be able to move the car in right or left direction, the road itself will be descending towards the car and will also consist of obstacles such as other vehicles. The road will have lanes through which the car must navigate to ultimately be able to slot itself into the right parking spot along side the road. The parking spots will be randomly generated along the edge of the LED matrix and the player must navigate the car into the spot at the right time or else it will result in a crash. The difficulty of the game will increase as the player reaches a certain amount of points. The difficulty will increase in terms of the speed of the car and the number of obstacles. The final score of the player will be displayed at the end of every game. a speaker attached to the board will generate the game sounds.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Scott LoCascio&lt;br /&gt;
**   &lt;br /&gt;
*  Naeem Mannan&lt;br /&gt;
**   &lt;br /&gt;
*  Rahul Ghadge&lt;br /&gt;
**   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| &lt;br /&gt;
* 10/12/2020&lt;br /&gt;
* 10/13/2020&lt;br /&gt;
|&lt;br /&gt;
* 10/18/2020&lt;br /&gt;
* 10/13/2020&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Create GitLab repository for project&lt;br /&gt;
| &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Completed&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;In progress&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| &lt;br /&gt;
*10/19/2020   &lt;br /&gt;
| &lt;br /&gt;
*10/20/2020 &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
*Order necessary parts&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;In progress&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
|&lt;br /&gt;
*10/26/2020&lt;br /&gt;
|&lt;br /&gt;
*11/01/2020&lt;br /&gt;
|&lt;br /&gt;
*Read and familiarize with LED Matrix Datasheet&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
|&lt;br /&gt;
* 11/02/2020&lt;br /&gt;
|&lt;br /&gt;
* 11/08/2020&lt;br /&gt;
|&lt;br /&gt;
* Develop graphics driver for LED matrix and implement initial game objects&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
|&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
|&lt;br /&gt;
*11/10/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
|&lt;br /&gt;
* Finalize wiki schedule&lt;br /&gt;
* Order circuit boards components and complete the design for printing&lt;br /&gt;
* circuit board and component assembly&lt;br /&gt;
* Circuit board testing&lt;br /&gt;
* Additional accessories if required and finalization of hardware&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
|&lt;br /&gt;
*11/16/2020 &lt;br /&gt;
| &lt;br /&gt;
*11/22/2020&lt;br /&gt;
|&lt;br /&gt;
*Integration of circuit boards and microcontroller&lt;br /&gt;
* Game logic development&lt;br /&gt;
* Testing and debugging the game logic&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| &lt;br /&gt;
* 11/23/2020&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
* 11/29/2020&lt;br /&gt;
|&lt;br /&gt;
* Integrate game logic code with LED matrix&lt;br /&gt;
* Integrate game sounds with game logic &lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| &lt;br /&gt;
* 11/30/2020&lt;br /&gt;
| &lt;br /&gt;
* 12/06/2020&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* Integrate subsystem&lt;br /&gt;
* Finalizing the video game &lt;br /&gt;
* Update the wiki page.&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| &lt;br /&gt;
* 12/07/2020&lt;br /&gt;
| &lt;br /&gt;
* 12/13/2020&lt;br /&gt;
|&lt;br /&gt;
* Address bugs during testing of integrated system&lt;br /&gt;
* Test pause/play functionality&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| &lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
| &lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
*Final Demo&lt;br /&gt;
*Update Gitlab repo with final code.&lt;br /&gt;
*Update test video.&lt;br /&gt;
*Update the wiki page.&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=69097</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=69097"/>
				<updated>2022-10-12T02:17:35Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2022 | Fall 2022]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F22: DDRTOS]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2021 | Fall 2021]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F21: ACE MARIO]]&lt;br /&gt;
*  [[F21: Skeh-lleybones]]&lt;br /&gt;
*  [[F21: Sons of Ultron]]&lt;br /&gt;
*  [[F21: Juvenile Jumpers]]&lt;br /&gt;
*  [[F21: Treasure Dive]]&lt;br /&gt;
*  [[F21: FollowMe]]&lt;br /&gt;
*  [[F21: Flame Over]]&lt;br /&gt;
*  [[F21: Space Rage]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
*  [[F20: Jubeat]]&lt;br /&gt;
*  [[F20: Flappy]]&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
*  [[F20: Tom &amp;amp; Jerry]]&lt;br /&gt;
*  [[F20: Hungry Snake]]&lt;br /&gt;
*  [[F20: Son of a Gun]]&lt;br /&gt;
*  [[F20: Corona Run]]&lt;br /&gt;
*  [[F20: Maddening Marbles]]&lt;br /&gt;
*  [[F20: Bubble Shooter]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=S22:_TBD&amp;diff=67130</id>
		<title>S22: TBD</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=S22:_TBD&amp;diff=67130"/>
				<updated>2022-03-16T01:22:44Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;== Project Title == &amp;lt;Team Name&amp;gt;  &amp;lt;HR&amp;gt; &amp;lt;BR/&amp;gt; == Abstract == &amp;lt;2-3 sentence abstract&amp;gt;  === Introduction ===  The project was divided into N modules:  * Sensor ... * Motor.. * ......&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Title ==&lt;br /&gt;
&amp;lt;Team Name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&amp;lt;2-3 sentence abstract&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The project was divided into N modules:&lt;br /&gt;
&lt;br /&gt;
* Sensor ...&lt;br /&gt;
* Motor..&lt;br /&gt;
* ...&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
&amp;lt;Team Picture&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gitlab Project Link - [https://gitlab.com/...]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Provide ECU names and members responsible&amp;gt;&lt;br /&gt;
&amp;lt;One member may participate in more than one ECU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sensor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Geographical&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Communication Bridge Controller &amp;amp; LCD&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 09/15/2017&lt;br /&gt;
| 09/16/2017&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Distribute modules to each team member.&lt;br /&gt;
&lt;br /&gt;
| Completed&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 09/17/2017&lt;br /&gt;
| 10/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Traxxas&lt;br /&gt;
| 1&lt;br /&gt;
| $250.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers MCP2551-I/P&lt;br /&gt;
| Microchip [http://www.microchip.com/wwwproducts/en/en010405]&lt;br /&gt;
| 8&lt;br /&gt;
| Free Samples&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
&amp;lt;Picture and information, including links to your PCB&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
&amp;lt;Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&amp;lt;Show your CAN bus hardware design&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBC File ===&lt;br /&gt;
&amp;lt;Gitlab link to your DBC file&amp;gt;&lt;br /&gt;
&amp;lt;You can optionally use an inline image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Sensor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Geographical Controller ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Communication Bridge Controller &amp;amp; LCD ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Master Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Mobile Application ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&amp;lt;Organized summary of the project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;What did you learn?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
&amp;lt;Bullet points and discussion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=67129</id>
		<title>Industrial Application using CAN Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=67129"/>
				<updated>2022-03-16T01:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Class Project Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Class Information =&lt;br /&gt;
==Presentation on Autonomous Vehicles==&lt;br /&gt;
http://www.slideshare.net/ShantanuVashishtha1/autonomous-vehicles-70049669&lt;br /&gt;
&lt;br /&gt;
== Useful Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
[[Basic Git Tutorial]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CAN Bus ===&lt;br /&gt;
[[CAN BUS Tutorial | CAN BUS]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[DBC Format]] ===&lt;br /&gt;
DBC format is a well known format to describe the format of a CAN message.  This is essentially the schema of the data that is communicated over the CAN bus.  Please view the linked [[DBC Format]] article for details before reading further.&lt;br /&gt;
&lt;br /&gt;
=== BusMaster Tutorial ===&lt;br /&gt;
[[BusMaster | BusMaster Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Class Assignments ==&lt;br /&gt;
=== [[Lab Assignments]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Class Project ==&lt;br /&gt;
=== [[Self-driving Car]] ===&lt;br /&gt;
In this class project, students accomplish a self-drivable RC car with the following learning objectives:&lt;br /&gt;
*  Learn CAN Bus and how to communicate in an industrial or  automotive environment.&lt;br /&gt;
*  Learn integration and testing across different controllers.&lt;br /&gt;
*  Learn how to work in teams.&lt;br /&gt;
*  Learn basics of an RTOS.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Autonomous RC Car Project Report Template]]&lt;br /&gt;
&lt;br /&gt;
== Class Project Reports ==&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2022 | Spring 2022]] ===&lt;br /&gt;
*  [[S22: TBD]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2021 | Spring 2021]] ===&lt;br /&gt;
*  [[S21: UTAH]]&lt;br /&gt;
*  [[S21: exFAT]]&lt;br /&gt;
*  [[S21: (RC)^2]]&lt;br /&gt;
*  [[S21: Roadster]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2020 | Spring 2020]] ===&lt;br /&gt;
*  [[S20: Nimble]]&lt;br /&gt;
*  [[S20: Bucephalus]]&lt;br /&gt;
*  [[S20: Canster Truck]]&lt;br /&gt;
*  [[S20: Tesla Model RC]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2019 | Spring 2019]] ===&lt;br /&gt;
*  [[S19: CANT Bus | S19: CANT Bus]]&lt;br /&gt;
*  [[S19: Tech Savy | S19: Tech Savy]]&lt;br /&gt;
*  [[S19: Mystery Machine | S19: Mystery Machine]]&lt;br /&gt;
*  [[S19: Run D.B.C | S19: Run D.B.C]]&lt;br /&gt;
*  [[S19: Hot Wheels | S19: Hot Wheels]]&lt;br /&gt;
*  [[S19: Zeus | S19: Zeus]]&lt;br /&gt;
*  [[S19: Automophiles | S19: Automophiles]]&lt;br /&gt;
*  [[S19: Lightfury | S19: Lightfury]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2017 | Fall 2017]] ===&lt;br /&gt;
*  [[F17: Alpha | F17: Alpha]]&lt;br /&gt;
*  [[F17: FoxP2 | F17 FoxP2]]&lt;br /&gt;
*  [[F17: Optimus | F17 Optimus]]&lt;br /&gt;
*  [[F17: Tata Nano | F17 Tata Nano]]&lt;br /&gt;
*  [[F17: Viserion | F17 Viserion]]&lt;br /&gt;
*  [[F17: Vindicators100 | F17 Vindicators100]]&lt;br /&gt;
*  [[F17: Rolling Thunder | F17: Rolling Thunder]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
*  [[F16: Spartan and Furious | F16: Spartan and Furious]]&lt;br /&gt;
*  [[F16: Titans | F16: Titans]]&lt;br /&gt;
*  [[F16: Kasper | F16: Kasper]]&lt;br /&gt;
*  [[F16: AutoNav | F16: AutoNav]]&lt;br /&gt;
*  [[F16: Thunderbolt| F16: Thunderbolt]]&lt;br /&gt;
*  [[F16: The-Nine| F16: The-Nine]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
* [[F15: Quadcopter by Thomas]]&lt;br /&gt;
* [[F15: Undergrads++]]&lt;br /&gt;
* [[F15: TopGun]]&lt;br /&gt;
* [[F15: Fury]]&lt;br /&gt;
* [[F15: Minion]]&lt;br /&gt;
* [[F15: ThunderBird]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE243 Fall 2014 | Fall 2014]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F14: Team2-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team3-Self Driving Car - Optimus Prime]]&lt;br /&gt;
* [[F14: Team4-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team5-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Self Driving Undergrad Team]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F21:_Sons_of_Ultron&amp;diff=65418</id>
		<title>F21: Sons of Ultron</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F21:_Sons_of_Ultron&amp;diff=65418"/>
				<updated>2021-10-13T03:36:10Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;=== Grading Criteria === &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; *  How well is Software &amp;amp; Hardware Design described? *  How well can this report be used to reproduce this project? *  Code Quali...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
Parking Frenzy&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Parking Frenzy is car parking video game. The player will be able to move the car in right or left direction, the road itself will be descending towards the car and will also consist of obstacles such as other vehicles. The road will have lanes through which the car must navigate to ultimately be able to slot itself into the right parking spot along side the road. The parking spots will be randomly generated along the edge of the LED matrix and the player must navigate the car into the spot at the right time or else it will result in a crash. The difficulty of the game will increase as the player reaches a certain amount of points. The difficulty will increase in terms of the speed of the car and the number of obstacles. The final score of the player will be displayed at the end of every game. a speaker attached to the board will generate the game sounds.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Scott LoCascio&lt;br /&gt;
**   &lt;br /&gt;
*  Naeem Mannan&lt;br /&gt;
**   &lt;br /&gt;
*  Rahul Ghadge&lt;br /&gt;
**   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| &lt;br /&gt;
* 10/12/2020&lt;br /&gt;
* 10/13/2020&lt;br /&gt;
|&lt;br /&gt;
* 10/18/2020&lt;br /&gt;
* 10/13/2020&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Create GitLab repository for project&lt;br /&gt;
| &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Completed&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;In progress&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| &lt;br /&gt;
*10/19/2020   &lt;br /&gt;
| &lt;br /&gt;
*10/20/2020 &lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
*Order necessary parts&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:orange&amp;quot;&amp;gt;In progress&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
|&lt;br /&gt;
*10/26/2020&lt;br /&gt;
|&lt;br /&gt;
*11/01/2020&lt;br /&gt;
|&lt;br /&gt;
*Read and familiarize with LED Matrix Datasheet&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
|&lt;br /&gt;
* 11/02/2020&lt;br /&gt;
|&lt;br /&gt;
* 11/08/2020&lt;br /&gt;
|&lt;br /&gt;
* Develop graphics driver for LED matrix and implement initial game objects&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
|&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
*11/09/2020&lt;br /&gt;
|&lt;br /&gt;
*11/10/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
*11/15/2020&lt;br /&gt;
|&lt;br /&gt;
* Finalize wiki schedule&lt;br /&gt;
* Order circuit boards components and complete the design for printing&lt;br /&gt;
* circuit board and component assembly&lt;br /&gt;
* Circuit board testing&lt;br /&gt;
* Additional accessories if required and finalization of hardware&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
|&lt;br /&gt;
*11/16/2020 &lt;br /&gt;
| &lt;br /&gt;
*11/22/2020&lt;br /&gt;
|&lt;br /&gt;
*Integration of circuit boards and microcontroller&lt;br /&gt;
* Game logic development&lt;br /&gt;
* Testing and debugging the game logic&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| &lt;br /&gt;
* 11/23/2020&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
* 11/29/2020&lt;br /&gt;
|&lt;br /&gt;
* Integrate game logic code with LED matrix&lt;br /&gt;
* Integrate game sounds with game logic &lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| &lt;br /&gt;
* 11/30/2020&lt;br /&gt;
| &lt;br /&gt;
* 12/06/2020&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* Integrate subsystem&lt;br /&gt;
* Finalizing the video game &lt;br /&gt;
* Update the wiki page.&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| &lt;br /&gt;
* 12/07/2020&lt;br /&gt;
| &lt;br /&gt;
* 12/13/2020&lt;br /&gt;
|&lt;br /&gt;
* Address bugs during testing of integrated system&lt;br /&gt;
* Test pause/play functionality&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| &lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
*12/14/2020&lt;br /&gt;
| &lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
*12/16/2020&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
*Final Demo&lt;br /&gt;
*Update Gitlab repo with final code.&lt;br /&gt;
*Update test video.&lt;br /&gt;
*Update the wiki page.&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Not started&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=65417</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=65417"/>
				<updated>2021-10-13T03:35:47Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /*  Fall 2021 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2021 | Fall 2021]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F21: Group Project Name]]&lt;br /&gt;
*  [[F21: Sons of Ultron]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
*  [[F20: Jubeat]]&lt;br /&gt;
*  [[F20: Flappy]]&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
*  [[F20: Tom &amp;amp; Jerry]]&lt;br /&gt;
*  [[F20: Hungry Snake]]&lt;br /&gt;
*  [[F20: Son of a Gun]]&lt;br /&gt;
*  [[F20: Corona Run]]&lt;br /&gt;
*  [[F20: Maddening Marbles]]&lt;br /&gt;
*  [[F20: Bubble Shooter]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=65416</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=65416"/>
				<updated>2021-09-15T02:44:16Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2021 | Fall 2021]] ===&lt;br /&gt;
*  [[F21: Group Project Name]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
*  [[F20: Jubeat]]&lt;br /&gt;
*  [[F20: Flappy]]&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
*  [[F20: Tom &amp;amp; Jerry]]&lt;br /&gt;
*  [[F20: Hungry Snake]]&lt;br /&gt;
*  [[F20: Son of a Gun]]&lt;br /&gt;
*  [[F20: Corona Run]]&lt;br /&gt;
*  [[F20: Maddening Marbles]]&lt;br /&gt;
*  [[F20: Bubble Shooter]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=63967</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=63967"/>
				<updated>2020-12-21T00:52:25Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /*  Fall 2020 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
*  [[F20: Jubeat]]&lt;br /&gt;
*  [[F20: Flappy]]&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
*  [[F20: Tom &amp;amp; Jerry]]&lt;br /&gt;
*  [[F20: Hungry Snake]]&lt;br /&gt;
*  [[F20: Son of a Gun]]&lt;br /&gt;
*  [[F20: Corona Run]]&lt;br /&gt;
*  [[F20: Maddening Marbles]]&lt;br /&gt;
*  [[F20: Bubble Shooter]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F20:_Treasure_Diver&amp;diff=61336</id>
		<title>F20: Treasure Diver</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F20:_Treasure_Diver&amp;diff=61336"/>
				<updated>2020-10-14T01:10:44Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;=== Grading Criteria === &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; *  How well is Software &amp;amp; Hardware Design described? *  How well can this report be used to reproduce this project? *  Code Quali...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
This section should be a couple lines to describe what your project does.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Yaron Alexandrovich&lt;br /&gt;
**   &lt;br /&gt;
*  Emil Kurian&lt;br /&gt;
**   &lt;br /&gt;
*  Gerard Ramos&lt;br /&gt;
**   &lt;br /&gt;
*  Fred Sun&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
Show a simple table or figures that show your scheduled as planned before you started working on the project.  Then in another table column, write down the actual schedule so that readers can see the planned vs. actual goals.  The point of the schedule is for readers to assess how to pace themselves if they are doing a similar project.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Actual&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/8&lt;br /&gt;
| Task list&lt;br /&gt;
| Completed?  Problems Encountered?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=61335</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=61335"/>
				<updated>2020-10-14T01:10:06Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2020 | Fall 2020]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F20: Space Invaders]]&lt;br /&gt;
*  [[F20: Treasure Diver]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
*  [[F19: Tetris]]&lt;br /&gt;
*  [[F19: Space Impact]]&lt;br /&gt;
*  [[F19: Road Max Fury]]&lt;br /&gt;
*  [[F19: T-Rex Run!]]&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Tower Defense in Space]]&lt;br /&gt;
*  [[F19: Alien Wars]]&lt;br /&gt;
*  [[F19: Pocket tank]]&lt;br /&gt;
*  [[F19: M&amp;amp;B (Morph &amp;amp; Blend)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58927</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58927"/>
				<updated>2020-03-18T00:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* DBC File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58926</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58926"/>
				<updated>2020-03-18T00:10:07Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58810</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58810"/>
				<updated>2020-03-03T23:26:14Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Wiki Schedule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58776</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58776"/>
				<updated>2020-03-03T17:21:33Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* CAN TX / RX using Auto-gen code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58775</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58775"/>
				<updated>2020-03-03T17:21:15Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Assignment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Autonomous_RC_Car_Project_Report_Template&amp;diff=58774</id>
		<title>Autonomous RC Car Project Report Template</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Autonomous_RC_Car_Project_Report_Template&amp;diff=58774"/>
				<updated>2020-03-03T17:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Title ==&lt;br /&gt;
&amp;lt;Team Name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&amp;lt;2-3 sentence abstract&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The project was divided into N modules:&lt;br /&gt;
&lt;br /&gt;
* Sensor ...&lt;br /&gt;
* Motor..&lt;br /&gt;
* ...&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
&amp;lt;Team Picture&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gitlab Project Link - [https://gitlab.com/...]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Provide ECU names and members responsible&amp;gt;&lt;br /&gt;
&amp;lt;One member may participate in more than one ECU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sensor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Geographical&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Communication Bridge Controller &amp;amp; LCD&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 09/15/2017&lt;br /&gt;
| 09/16/2017&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Distribute modules to each team member.&lt;br /&gt;
&lt;br /&gt;
| Completed&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 09/17/2017&lt;br /&gt;
| 10/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Traxxas&lt;br /&gt;
| 1&lt;br /&gt;
| $250.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers MCP2551-I/P&lt;br /&gt;
| Microchip [http://www.microchip.com/wwwproducts/en/en010405]&lt;br /&gt;
| 8&lt;br /&gt;
| Free Samples&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
&amp;lt;Picture and information, including links to your PCB&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
&amp;lt;Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&amp;lt;Show your CAN bus hardware design&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBC File ===&lt;br /&gt;
&amp;lt;Gitlab link to your DBC file&amp;gt;&lt;br /&gt;
&amp;lt;You can optionally use an inline image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Sensor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Geographical Controller ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Communication Bridge Controller &amp;amp; LCD ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Master Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Mobile Application ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt; List of problems and their detailed resolutions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&amp;lt;Organized summary of the project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;What did you learn?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
&amp;lt;Bullet points and discussion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Autonomous_RC_Car_Project_Report_Template&amp;diff=58773</id>
		<title>Autonomous RC Car Project Report Template</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Autonomous_RC_Car_Project_Report_Template&amp;diff=58773"/>
				<updated>2020-03-03T17:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Improper Unit Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Title ==&lt;br /&gt;
&amp;lt;Team Name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&amp;lt;2-3 sentence abstract&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The project was divided into N modules:&lt;br /&gt;
&lt;br /&gt;
* Sensor ...&lt;br /&gt;
* Motor..&lt;br /&gt;
* ...&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
&amp;lt;Team Picture&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gitlab Project Link - [https://gitlab.com/...]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Provide ECU names and members responsible&amp;gt;&lt;br /&gt;
&amp;lt;One member may participate in more than one ECU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sensor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Geographical&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Communication Bridge Controller &amp;amp; LCD&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 09/15/2017&lt;br /&gt;
| 09/16/2017&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Distribute modules to each team member.&lt;br /&gt;
&lt;br /&gt;
| Completed&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 09/17/2017&lt;br /&gt;
| 10/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Traxxas&lt;br /&gt;
| 1&lt;br /&gt;
| $250.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers MCP2551-I/P&lt;br /&gt;
| Microchip [http://www.microchip.com/wwwproducts/en/en010405]&lt;br /&gt;
| 8&lt;br /&gt;
| Free Samples&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
&amp;lt;Picture and information, including links to your PCB&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
&amp;lt;Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&amp;lt;Show your CAN bus hardware design&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBC File ===&lt;br /&gt;
&amp;lt;Gitlab link to your DBC file&amp;gt;&lt;br /&gt;
&amp;lt;You can optionally use an inline image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sensor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Unreliable sonor sensors ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Unreliable Servo Motors ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Geographical Controller ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Unreliable GPS lock ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Communication Bridge Controller &amp;amp; LCD ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Insane Bug ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Master Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
== Mobile Application ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Wifi Link Reliability ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&amp;lt;Organized summary of the project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;What did you learn?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
&amp;lt;Bullet points and discussion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=58772</id>
		<title>Industrial Application using CAN Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=58772"/>
				<updated>2020-03-03T17:12:53Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Class Project Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Class Information =&lt;br /&gt;
==Presentation on Autonomous Vehicles==&lt;br /&gt;
http://www.slideshare.net/ShantanuVashishtha1/autonomous-vehicles-70049669&lt;br /&gt;
&lt;br /&gt;
== Useful Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
[[Basic Git Tutorial]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CAN Bus ===&lt;br /&gt;
[[CAN BUS Tutorial | CAN BUS]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[DBC Format]] ===&lt;br /&gt;
DBC format is a well known format to describe the format of a CAN message.  This is essentially the schema of the data that is communicated over the CAN bus.  Please view the linked [[DBC Format]] article for details before reading further.&lt;br /&gt;
&lt;br /&gt;
=== BusMaster Tutorial ===&lt;br /&gt;
[[BusMaster | BusMaster Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Class Assignments ==&lt;br /&gt;
=== [[Lab Assignments]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Class Project ==&lt;br /&gt;
=== [[Self-driving Car]] ===&lt;br /&gt;
In this class project, students accomplish a self-drivable RC car with the following learning objectives:&lt;br /&gt;
*  Learn CAN Bus and how to communicate in an industrial or  automotive environment.&lt;br /&gt;
*  Learn integration and testing across different controllers.&lt;br /&gt;
*  Learn how to work in teams.&lt;br /&gt;
*  Learn basics of an RTOS.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Autonomous RC Car Project Report Template]]&lt;br /&gt;
&lt;br /&gt;
== Class Project Reports ==&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2020 | Spring 2020]] ===&lt;br /&gt;
*  [[S20: Nimbus]]&lt;br /&gt;
*  [[S20: Bucephalus]]&lt;br /&gt;
*  [[S20: Canster Ttruck]]&lt;br /&gt;
*  [[S20: Tesla Model RC]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2019 | Spring 2019]] ===&lt;br /&gt;
*  [[S19: CANT Bus | S19: CANT Bus]]&lt;br /&gt;
*  [[S19: Tech Savy | S19: Tech Savy]]&lt;br /&gt;
*  [[S19: Mystery Machine | S19: Mystery Machine]]&lt;br /&gt;
*  [[S19: Run D.B.C | S19: Run D.B.C]]&lt;br /&gt;
*  [[S19: Hot Wheels | S19: Hot Wheels]]&lt;br /&gt;
*  [[S19: Zeus | S19: Zeus]]&lt;br /&gt;
*  [[S19: Automophiles | S19: Automophiles]]&lt;br /&gt;
*  [[S19: Lightfury | S19: Lightfury]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2017 | Fall 2017]] ===&lt;br /&gt;
*  [[F17: Alpha | F17: Alpha]]&lt;br /&gt;
*  [[F17: FoxP2 | F17 FoxP2]]&lt;br /&gt;
*  [[F17: Optimus | F17 Optimus]]&lt;br /&gt;
*  [[F17: Tata Nano | F17 Tata Nano]]&lt;br /&gt;
*  [[F17: Viserion | F17 Viserion]]&lt;br /&gt;
*  [[F17: Vindicators100 | F17 Vindicators100]]&lt;br /&gt;
*  [[F17: Rolling Thunder | F17: Rolling Thunder]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
*  [[F16: Spartan and Furious | F16: Spartan and Furious]]&lt;br /&gt;
*  [[F16: Titans | F16: Titans]]&lt;br /&gt;
*  [[F16: Kasper | F16: Kasper]]&lt;br /&gt;
*  [[F16: AutoNav | F16: AutoNav]]&lt;br /&gt;
*  [[F16: Thunderbolt| F16: Thunderbolt]]&lt;br /&gt;
*  [[F16: The-Nine| F16: The-Nine]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
* [[F15: Quadcopter by Thomas]]&lt;br /&gt;
* [[F15: Undergrads++]]&lt;br /&gt;
* [[F15: TopGun]]&lt;br /&gt;
* [[F15: Fury]]&lt;br /&gt;
* [[F15: Minion]]&lt;br /&gt;
* [[F15: ThunderBird]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE243 Fall 2014 | Fall 2014]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F14: Team2-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team3-Self Driving Car - Optimus Prime]]&lt;br /&gt;
* [[F14: Team4-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team5-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Self Driving Undergrad Team]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58769</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58769"/>
				<updated>2020-02-10T22:53:44Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Periodic Scheduler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58768</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58768"/>
				<updated>2020-02-10T22:53:12Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Unit Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58767</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58767"/>
				<updated>2020-02-10T22:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Form Groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58766</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58766"/>
				<updated>2020-02-10T22:52:55Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* LED Switch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Form Groups =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Communicate with one of the class ISA to setup your groups @ Canvas.  Be sure to have your group name ready and use an appropriate group name.&lt;br /&gt;
&lt;br /&gt;
Failure to do so by the deadline will result in '''''zero points''''' for the assignment.  Be sure to do this before leaving the class.&lt;br /&gt;
&lt;br /&gt;
Also, order CAN transceiver hardware for your entire team (1 per person)&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58765</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58765"/>
				<updated>2020-02-10T22:52:41Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* CAN Communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LED Switch =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 and use existing API under '''gpio.hpp''':&lt;br /&gt;
&lt;br /&gt;
* Interface an external LED (such as P2.1) to &amp;quot;Board A&amp;quot;, which we will refer to as &amp;quot;LED Board&amp;quot;&lt;br /&gt;
* Interface an external switch (such as P2.2) to &amp;quot;Board B&amp;quot;, which we will refer to as &amp;quot;SW Board&amp;quot; (switch board)&lt;br /&gt;
* Connect the LED Board and SW Board together using &amp;quot;Port 2&amp;quot;&lt;br /&gt;
*:  Example: P2.0 of LED board connects to P2.0 on the SW Board&lt;br /&gt;
*:  Do not forget common ground&lt;br /&gt;
* LED board Software is simple, whenever P2.0 (which is interfaced to the SW Board) is detected HIGH, light up its LED (on P2.1), else turn it off&lt;br /&gt;
* On the SW Board, use &amp;quot;External Interrupt&amp;quot; API (eint.h) to detect when the switch gets pressed&lt;br /&gt;
*:  The callback should simply turn a flag (global variable) to true&lt;br /&gt;
*:  The callback '''''MUST NOT POLL''''', and '''''MUST NOT DELAY''''', and '''''EXIT IMMEDIATELY''''' since it is an interrupt function&lt;br /&gt;
*:  Use period_init() function to initialize the callback.  This initialization function is only called once before starting the RTOS&lt;br /&gt;
* On the SW Board, use the periodic callbacks, and when the flag is true, toggle the P2.0 for at least 500ms&lt;br /&gt;
*:  Turn on the periodic scheduler at main.cpp&lt;br /&gt;
*:  Deploy your code to periodic_callbacks.cpp (like 10Hz function)&lt;br /&gt;
* Bonus points: Use a binary semaphore in the interrupt, and have the 10Hz task wait on this semaphore with 0 ms block time.  See the FreeRTOS video about the binary semaphore&lt;br /&gt;
*:  Note that if you use a periodic callback, you will have to use zero block time for the semaphore since you do not want to block in a period function.&lt;br /&gt;
*: '''[https://www.youtube.com/watch?v=grXuVMttVuU: Binary Semaphores]'''&lt;br /&gt;
&lt;br /&gt;
For the demo:&lt;br /&gt;
*  The SW Board should detect its switch press by an external interrupt and toggle its P2.0&lt;br /&gt;
*  The LED Board should detect its own P2.0 and light up the LED&lt;br /&gt;
&lt;br /&gt;
This assignment demonstrates the use of external interrupts, and how to interface different boards together.  Furthermore, you should have learned the concepts of different tasks that you can run in FreeRTOS.  In general, you should never have to poll for events, and you should use interrupt functionality as much as possible.  Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp&lt;br /&gt;
Indicate at the top of the file who you worked with.  (Do not have the other person turn in anything)&lt;br /&gt;
&lt;br /&gt;
= Form Groups =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Communicate with one of the class ISA to setup your groups @ Canvas.  Be sure to have your group name ready and use an appropriate group name.&lt;br /&gt;
&lt;br /&gt;
Failure to do so by the deadline will result in '''''zero points''''' for the assignment.  Be sure to do this before leaving the class.&lt;br /&gt;
&lt;br /&gt;
Also, order CAN transceiver hardware for your entire team (1 per person)&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58764</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58764"/>
				<updated>2020-02-10T22:52:28Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Serial Communication */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LED Switch =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 and use existing API under '''gpio.hpp''':&lt;br /&gt;
&lt;br /&gt;
* Interface an external LED (such as P2.1) to &amp;quot;Board A&amp;quot;, which we will refer to as &amp;quot;LED Board&amp;quot;&lt;br /&gt;
* Interface an external switch (such as P2.2) to &amp;quot;Board B&amp;quot;, which we will refer to as &amp;quot;SW Board&amp;quot; (switch board)&lt;br /&gt;
* Connect the LED Board and SW Board together using &amp;quot;Port 2&amp;quot;&lt;br /&gt;
*:  Example: P2.0 of LED board connects to P2.0 on the SW Board&lt;br /&gt;
*:  Do not forget common ground&lt;br /&gt;
* LED board Software is simple, whenever P2.0 (which is interfaced to the SW Board) is detected HIGH, light up its LED (on P2.1), else turn it off&lt;br /&gt;
* On the SW Board, use &amp;quot;External Interrupt&amp;quot; API (eint.h) to detect when the switch gets pressed&lt;br /&gt;
*:  The callback should simply turn a flag (global variable) to true&lt;br /&gt;
*:  The callback '''''MUST NOT POLL''''', and '''''MUST NOT DELAY''''', and '''''EXIT IMMEDIATELY''''' since it is an interrupt function&lt;br /&gt;
*:  Use period_init() function to initialize the callback.  This initialization function is only called once before starting the RTOS&lt;br /&gt;
* On the SW Board, use the periodic callbacks, and when the flag is true, toggle the P2.0 for at least 500ms&lt;br /&gt;
*:  Turn on the periodic scheduler at main.cpp&lt;br /&gt;
*:  Deploy your code to periodic_callbacks.cpp (like 10Hz function)&lt;br /&gt;
* Bonus points: Use a binary semaphore in the interrupt, and have the 10Hz task wait on this semaphore with 0 ms block time.  See the FreeRTOS video about the binary semaphore&lt;br /&gt;
*:  Note that if you use a periodic callback, you will have to use zero block time for the semaphore since you do not want to block in a period function.&lt;br /&gt;
*: '''[https://www.youtube.com/watch?v=grXuVMttVuU: Binary Semaphores]'''&lt;br /&gt;
&lt;br /&gt;
For the demo:&lt;br /&gt;
*  The SW Board should detect its switch press by an external interrupt and toggle its P2.0&lt;br /&gt;
*  The LED Board should detect its own P2.0 and light up the LED&lt;br /&gt;
&lt;br /&gt;
This assignment demonstrates the use of external interrupts, and how to interface different boards together.  Furthermore, you should have learned the concepts of different tasks that you can run in FreeRTOS.  In general, you should never have to poll for events, and you should use interrupt functionality as much as possible.  Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp&lt;br /&gt;
Indicate at the top of the file who you worked with.  (Do not have the other person turn in anything)&lt;br /&gt;
&lt;br /&gt;
= Form Groups =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Communicate with one of the class ISA to setup your groups @ Canvas.  Be sure to have your group name ready and use an appropriate group name.&lt;br /&gt;
&lt;br /&gt;
Failure to do so by the deadline will result in '''''zero points''''' for the assignment.  Be sure to do this before leaving the class.&lt;br /&gt;
&lt;br /&gt;
Also, order CAN transceiver hardware for your entire team (1 per person)&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= CAN Communication =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
You can work in groups of 2:&lt;br /&gt;
&lt;br /&gt;
*Build and interface the CAN transceiver with another person's CAN transceiver.&lt;br /&gt;
*Initialize the CAN Bus (read can.h in the drivers directory).&lt;br /&gt;
*Use a simple periodic message (every 100ms) that is sent from BoardA to BoardB.&lt;br /&gt;
*: For example, if BoardA senses a switch pressed, send a 1-byte message with 0xAA, otherwise send 0x00 if button is not pressed&lt;br /&gt;
*For robustness, if the CAN Bus turns off, simply turn it back on at 1Hz (every 1000ms)&lt;br /&gt;
*On BoardB, simply light up an LED  (or otherwise turn it off) based on the CAN message data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This assignment gives you an overview of practical use of the CAN Bus, and later, by utilizing the DBC file and auto-generation of code, sending and receiving data becomes very easy.  &lt;br /&gt;
&lt;br /&gt;
While this provides bare bones knowledge of how communication works, the future lectures will focus on the application layer while abstracting away the details of CAN messages' data encoding and decoding.&lt;br /&gt;
&lt;br /&gt;
Although the real-time periodic scheduler was not discussed, it might be worth your time to simply turn it on (using #define) since it can help you send periodic messages fairly easily.  This will also help you prepare in advance for the future lectures.&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp for both boards.&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58763</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=58763"/>
				<updated>2020-02-10T22:52:20Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Assignment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LED Switch =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 and use existing API under '''gpio.hpp''':&lt;br /&gt;
&lt;br /&gt;
* Interface an external LED (such as P2.1) to &amp;quot;Board A&amp;quot;, which we will refer to as &amp;quot;LED Board&amp;quot;&lt;br /&gt;
* Interface an external switch (such as P2.2) to &amp;quot;Board B&amp;quot;, which we will refer to as &amp;quot;SW Board&amp;quot; (switch board)&lt;br /&gt;
* Connect the LED Board and SW Board together using &amp;quot;Port 2&amp;quot;&lt;br /&gt;
*:  Example: P2.0 of LED board connects to P2.0 on the SW Board&lt;br /&gt;
*:  Do not forget common ground&lt;br /&gt;
* LED board Software is simple, whenever P2.0 (which is interfaced to the SW Board) is detected HIGH, light up its LED (on P2.1), else turn it off&lt;br /&gt;
* On the SW Board, use &amp;quot;External Interrupt&amp;quot; API (eint.h) to detect when the switch gets pressed&lt;br /&gt;
*:  The callback should simply turn a flag (global variable) to true&lt;br /&gt;
*:  The callback '''''MUST NOT POLL''''', and '''''MUST NOT DELAY''''', and '''''EXIT IMMEDIATELY''''' since it is an interrupt function&lt;br /&gt;
*:  Use period_init() function to initialize the callback.  This initialization function is only called once before starting the RTOS&lt;br /&gt;
* On the SW Board, use the periodic callbacks, and when the flag is true, toggle the P2.0 for at least 500ms&lt;br /&gt;
*:  Turn on the periodic scheduler at main.cpp&lt;br /&gt;
*:  Deploy your code to periodic_callbacks.cpp (like 10Hz function)&lt;br /&gt;
* Bonus points: Use a binary semaphore in the interrupt, and have the 10Hz task wait on this semaphore with 0 ms block time.  See the FreeRTOS video about the binary semaphore&lt;br /&gt;
*:  Note that if you use a periodic callback, you will have to use zero block time for the semaphore since you do not want to block in a period function.&lt;br /&gt;
*: '''[https://www.youtube.com/watch?v=grXuVMttVuU: Binary Semaphores]'''&lt;br /&gt;
&lt;br /&gt;
For the demo:&lt;br /&gt;
*  The SW Board should detect its switch press by an external interrupt and toggle its P2.0&lt;br /&gt;
*  The LED Board should detect its own P2.0 and light up the LED&lt;br /&gt;
&lt;br /&gt;
This assignment demonstrates the use of external interrupts, and how to interface different boards together.  Furthermore, you should have learned the concepts of different tasks that you can run in FreeRTOS.  In general, you should never have to poll for events, and you should use interrupt functionality as much as possible.  Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp&lt;br /&gt;
Indicate at the top of the file who you worked with.  (Do not have the other person turn in anything)&lt;br /&gt;
&lt;br /&gt;
= Form Groups =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Communicate with one of the class ISA to setup your groups @ Canvas.  Be sure to have your group name ready and use an appropriate group name.&lt;br /&gt;
&lt;br /&gt;
Failure to do so by the deadline will result in '''''zero points''''' for the assignment.  Be sure to do this before leaving the class.&lt;br /&gt;
&lt;br /&gt;
Also, order CAN transceiver hardware for your entire team (1 per person)&lt;br /&gt;
&lt;br /&gt;
= Serial Communication =&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= CAN Communication =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
You can work in groups of 2:&lt;br /&gt;
&lt;br /&gt;
*Build and interface the CAN transceiver with another person's CAN transceiver.&lt;br /&gt;
*Initialize the CAN Bus (read can.h in the drivers directory).&lt;br /&gt;
*Use a simple periodic message (every 100ms) that is sent from BoardA to BoardB.&lt;br /&gt;
*: For example, if BoardA senses a switch pressed, send a 1-byte message with 0xAA, otherwise send 0x00 if button is not pressed&lt;br /&gt;
*For robustness, if the CAN Bus turns off, simply turn it back on at 1Hz (every 1000ms)&lt;br /&gt;
*On BoardB, simply light up an LED  (or otherwise turn it off) based on the CAN message data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This assignment gives you an overview of practical use of the CAN Bus, and later, by utilizing the DBC file and auto-generation of code, sending and receiving data becomes very easy.  &lt;br /&gt;
&lt;br /&gt;
While this provides bare bones knowledge of how communication works, the future lectures will focus on the application layer while abstracting away the details of CAN messages' data encoding and decoding.&lt;br /&gt;
&lt;br /&gt;
Although the real-time periodic scheduler was not discussed, it might be worth your time to simply turn it on (using #define) since it can help you send periodic messages fairly easily.  This will also help you prepare in advance for the future lectures.&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp for both boards.&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F19:_Tower_Defense_in_Space&amp;diff=58761</id>
		<title>F19: Tower Defense in Space</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F19:_Tower_Defense_in_Space&amp;diff=58761"/>
				<updated>2019-12-21T23:33:53Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Grading Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:start_menu.jpg|thumb|500px|caption|right|Logo]]&lt;br /&gt;
&lt;br /&gt;
== Abstract==&lt;br /&gt;
This project involves creating and developing a video game where output is displayed on a LED matrix. Development of the relevant hardware/software components and modules was divided among 4 team members. Each team member lead or significantly contributed to the development of multiple components. The project was focused on not only technical skills, but team building as well, and working with others towards a common goal.&lt;br /&gt;
&lt;br /&gt;
This project provides us hands-on experience using freeRTOS in a real application. Our objective is to apply what we have learned in class and develop a video game using our SJtwo Board. In this project, we create different tasks for different modules, such as a display task for displaying the game objects on LED matrix, a tower task for detecting nearby enemies and shoot them, a stage task to manage each game stage etc. We need to use both cooperative scheduling and preemptive scheduling technique to make this video game run efficiently. In order to make this game run in a particular sequence, we also need to synchronize and sequentialize each task by setting the task priorities carefully and using binary semaphore correctly. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction and Objectives ==&lt;br /&gt;
[[File:AlienInvasion.jpeg|300px|thumb|right|Alien Invasion]]&lt;br /&gt;
Like most traditional tower defense games, the player needs to defend our planet from the invasion of aliens. The gameplay can be split into 2 phases, &amp;lt;b&amp;gt;Combat Phase&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Intermission Phase&amp;lt;/b&amp;gt;. During the intermission phase, the player can place different kinds of towers strategically that will attack the invading aliens from entering into our homeland by shooting the enemies. During the combat phase, spaceships follow the path and try to land on our planet. If any enemy spaceship reaches the end of the path, then the player loses. If there are no more spaceships remaining in a wave, the player can build a stronger tower that has a longer attack range and can shoot a more powerful laser to the spaceships in the next wave. The player wins the game after surviving 5 waves of attack.&lt;br /&gt;
&lt;br /&gt;
This game can be separated into 4 different modules:&lt;br /&gt;
#&amp;lt;b&amp;gt;Game Logic&amp;lt;/b&amp;gt;: SJtwo Board - handles the game logic. (For example: detect and shoot nearby enemies, switch between intermission phase and combat phase)&lt;br /&gt;
#&amp;lt;b&amp;gt;Display&amp;lt;/b&amp;gt;: Adafruit 64x64 LED matrix - displays the animation of the game.&lt;br /&gt;
#&amp;lt;b&amp;gt;Gamepad Controller&amp;lt;/b&amp;gt;: The input of this game. The gamepad controller consists of a joystick and two buttons. The player can use the joystick to move the cursor and decide where to place the towers. After that, the user needs to press the black button to select and confirm the location of the towers. If the player knows that he/she has made a mistake in the middle of the game and will eventually lose the game, the player can press the red button and restart the game.&lt;br /&gt;
#&amp;lt;b&amp;gt;Sound&amp;lt;/b&amp;gt;: MP3 Decoder and speaker. Players can enjoy cool music during the game. This is done on an additional SJtwo board, which will play the song on repeat.&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin-left: 0px; margin-right: auto;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; style=&amp;quot;background:#000000;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt; TEAM MEMBERS &amp;amp; RESPONSIBILITIES &amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |  &lt;br /&gt;
Team Members &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |  &lt;br /&gt;
Administrative Roles&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |  &lt;br /&gt;
Technical Roles &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; style=&amp;quot;text-align: left;&amp;quot; | &lt;br /&gt;
* [Ryan Zelek]&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
'''Team Lead'''&amp;lt;br /&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#FF8C00&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Game Design Lead&amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; style=&amp;quot;text-align: left;&amp;quot; | &lt;br /&gt;
* [https://www.linkedin.com/feed/ Zach Smith]&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
Git Repo Manager&amp;lt;br /&amp;gt;  &lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#EE82EE&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Hardware Design Lead&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; style=&amp;quot;text-align: left;&amp;quot; | &lt;br /&gt;
* [Chong Hang Cheong]&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
Wiki Report Manager&amp;lt;br/&amp;gt; &lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;LED Matrix API&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; style=&amp;quot; text-align: left;&amp;quot; | &lt;br /&gt;
* [Polin Chen]&lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
Bill of Materials Manager&amp;lt;br /&amp;gt; &lt;br /&gt;
| style=&amp;quot;text-align: left;&amp;quot; |  &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#008000&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Joy Sticker &amp;amp;&amp;amp; Decoder API&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin-left: 0px; margin-right: auto;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; style=&amp;quot;background:#000000;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;TEAM MEETING DATES &amp;amp; DELIVERABLES&amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; | &lt;br /&gt;
Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; | &lt;br /&gt;
Date Assigned&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; | &lt;br /&gt;
Deliverables&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; | &lt;br /&gt;
Status&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10/15/19&lt;br /&gt;
| &lt;br /&gt;
* Share team contact information&amp;lt;br&amp;gt;&lt;br /&gt;
* Create Git Repository&amp;lt;br&amp;gt;&lt;br /&gt;
* Set up group Slack channel&amp;lt;br&amp;gt;&lt;br /&gt;
* Invite Preet to Slack&amp;lt;br&amp;gt;&lt;br /&gt;
* Establish Code Guidelines and Standards&amp;lt;br&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10/22/19&lt;br /&gt;
| &lt;br /&gt;
* Identify major hardware components (BOM)&amp;lt;br /&amp;gt;&lt;br /&gt;
* Begin purchasing major items&amp;lt;br /&amp;gt;&lt;br /&gt;
* Finalize game architecture&amp;lt;br /&amp;gt;&lt;br /&gt;
* Have Git Repo Setup&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10/29/19&lt;br /&gt;
| &lt;br /&gt;
* Solidify individual roles and responsibilities&amp;lt;br/&amp;gt;&lt;br /&gt;
* Establish baseline software architecture design and guidelines going forward&amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11/5/19&lt;br /&gt;
|&lt;br /&gt;
'''Kelvin'''&lt;br /&gt;
* Verify functionality of LED matrix and gather resources for further understanding&amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11/12/19&lt;br /&gt;
| &lt;br /&gt;
'''Kelvin'''&lt;br /&gt;
* Find out feasibility of creating an LED matrix driver in C&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Polin'''&lt;br /&gt;
* Have APIs ready for joystick and buttons&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Ryan'''&lt;br /&gt;
* Have basic user interface for the game displayed through serial port&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Zach'''&lt;br /&gt;
* First controller PCB design complete&amp;lt;br/&amp;gt;&lt;br /&gt;
* Specify any remaining hardware components and coordinate purchase&amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11/19/19&lt;br /&gt;
| &lt;br /&gt;
'''Kelvin'''&lt;br /&gt;
* Complete baseline API for LED matrix&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Polin'''&lt;br /&gt;
* Determine feasibility of MP3 decoding and integration into system&lt;br /&gt;
'''Ryan'''&lt;br /&gt;
* Complete first pass at basic tower defense level with straight pathway&lt;br /&gt;
'''Zach'''&lt;br /&gt;
* Controller PCB sent out for fabrication&amp;lt;br /&amp;gt;&lt;br /&gt;
* Design break-out PCB for LED matrix + IO expander /&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11/26/19&lt;br /&gt;
| &lt;br /&gt;
'''Kelvin'''&lt;br /&gt;
* LED matrix driver should be reviewed and complete&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Polin'''&lt;br /&gt;
* Work with '''Zach''' to identify remaining hardware components and, if applicable, MP3 decoder requirements&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Ryan'''&lt;br /&gt;
* Work with '''Kelvin''' to integrate his API into the game&amp;lt;br/&amp;gt;&lt;br /&gt;
* Game should be running with LED matrix display involvement&amp;lt;br/&amp;gt;&lt;br /&gt;
* Advanced game logic design/implementation is near feature complete&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Zach'''&lt;br /&gt;
* PCB assembled and tested. Problems identified and solutions proposed&amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 12/3/19&lt;br /&gt;
| &lt;br /&gt;
* Complete game testing and validation&amp;lt;br/&amp;gt;&lt;br /&gt;
* Critical bugs (software AND hardware) identified and a clear path towards closure has been identified&amp;lt;br/&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 12/10/19&lt;br /&gt;
|&lt;br /&gt;
* Continuation of previous week activities (bug fixes, etc)&lt;br /&gt;
* Implement any potential optimizations and/or expansions&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Complete&amp;lt;/span&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bill of Materials ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; style=&amp;quot;background:#000000;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt; Top Level &amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
PART NAME&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
PART MODEL &amp;amp; SOURCE&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
QUANTITY&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
COST PER UNIT (USD)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt;'''32x64 RGB LED Matrix'''&amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt;[https://www.sparkfun.com/products/14718]&amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt;2&amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt;$49.95&amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt; ''' 64x64 RGB LED Matrix'''&amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt; [https://www.sparkfun.com/products/14824 Sparkfun] &amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt; 1 &amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt; $79.95 &amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;s&amp;gt; '''NovaeLED 64x64 RGB LED Matrix (2-Pack)''' &amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt; [https://www.amazon.com/gp/product/B07LFJ73GQ/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&amp;amp;psc=1 Amazon] &amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt; 1 &amp;lt;/s&amp;gt;&lt;br /&gt;
| &amp;lt;s&amp;gt; $80.99 &amp;lt;/s&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| '''64x64 RGB LED Matrix'''*&lt;br /&gt;
| [https://www.adafruit.com/product/3649 Adafruit]&lt;br /&gt;
| 1&lt;br /&gt;
| $104.07&lt;br /&gt;
|-&lt;br /&gt;
| '''5V 4A PSU'''&lt;br /&gt;
| -&lt;br /&gt;
| 1&lt;br /&gt;
| FREE&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; style=&amp;quot;background:#000000;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt; Breakout Board PCB** &amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
Item #&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
PART NAME&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
PART SOURCE&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
QUANTITY&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
COST PER UNIT (USD)&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| IC REG LINEAR LD1117S33CTR&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/stmicroelectronics/LD1117S33CTR/497-1241-1-ND/586241 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $0.351&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| MHS16N-ND 16POS CONN 2.54MM&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/3m/N3408-6302RB/MHS16N-ND/1239801 DIGIKEY]&lt;br /&gt;
| 2&lt;br /&gt;
| $2.60&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| CAP CER 0.1UF 25V X7R 1206&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/avx-corporation/12063C104JAT2A/478-11943-1-ND/8573579 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $0.221&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| CAP CER 10UF 16V X5R 1206&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/taiyo-yuden/EMK316BJ106MD-T/587-4881-1-ND/6563724 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $0.202&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
| RES SMD 470 OHM 1% 1/4W 1206&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/te-connectivity-passive-product/CRG1206F470R/A106077CT-ND/3477734 DIGIKEY]&lt;br /&gt;
| 10&lt;br /&gt;
| $0.0267&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
| PTC RESET FUSE 24V 500MA 1206&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/bel-fuse-inc/0ZCJ0050AF2E/507-1803-1-ND/4156312 DIGIKEY]&lt;br /&gt;
| 10&lt;br /&gt;
| $0.1588&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| CONN SOCKET 40POS 0.1 TIN PCB&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/samtec-inc/ESQ-120-14-T-D/SAM11108-ND/6693975 DIGIKEY]&lt;br /&gt;
| 2&lt;br /&gt;
| $5.03&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| Manufacturing x 5 boards *&lt;br /&gt;
| [https://jlcpcb.com/ JLCPCB]&lt;br /&gt;
| 1&lt;br /&gt;
| $29.81&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; style=&amp;quot;background:#000000;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt; Gamepad PCB** &amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
Item #&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
PART NAME&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
PART SOURCE&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
QUANTITY&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
COST PER UNIT (USD)&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| Analog 2-axis Thumb Joystick w/ select button&lt;br /&gt;
| [https://www.amazon.com/gp/product/B00NAY2Q6O/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&amp;amp;psc=1 Amazon]&lt;br /&gt;
| 1&lt;br /&gt;
| $7.67&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| SAM8205-ND 10POS 1.27MM&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/samtec-inc/EHF-105-01-L-D/SAM8205-ND/1106564 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $3.38&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| LED GREEN 1206 SMD&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/lite-on-inc/LTST-C150GKT/160-1169-1-ND/269241 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $0.24&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| LED RED 1206 SMD&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/lite-on-inc/LTST-C150CKT/160-1167-1-ND/269239 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $0.257&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
| RES 1K OHM 1% 1/2W 1206 SMD&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/stackpole-electronics-inc/RNCP1206FTD1K00/RNCP1206FTD1K00CT-ND/2240675 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| 0.0358&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
| CAP CER 0.1UF 50V X7R 1206&lt;br /&gt;
| [https://www.digikey.com/product-detail/en/kemet/C1206C104K5RAC7800/399-C1206C104K5RAC7800CT-ND/411524 DIGIKEY]&lt;br /&gt;
| 5&lt;br /&gt;
| $0.088&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| 12x12x7.3mm Tactile Push Button w/ cap (pack of 25)&lt;br /&gt;
| [https://www.amazon.com/gp/product/B01NCQVGLC/ref=ppx_yo_dt_b_asin_title_o00_s01?ie=UTF8&amp;amp;psc=1 Amazon]&lt;br /&gt;
| 1&lt;br /&gt;
| $7.89&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| Manufacturing x 5 boards *&lt;br /&gt;
| [https://jlcpcb.com/ JLCPCB]&lt;br /&gt;
| 1&lt;br /&gt;
| $14.21&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Shipping and tax included in value shown in the cost per unit column &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Only parts that were purchased are displayed. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Game Design ==&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Game Rules &amp;lt;/font&amp;gt; ===&lt;br /&gt;
Gameplay is split into 2 phases: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Intermission&amp;lt;/b&amp;gt; - Player sets up tower locations &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Combat&amp;lt;/b&amp;gt; - Player watches round unfold &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
During the &amp;lt;b&amp;gt;Intermission Phase&amp;lt;/b&amp;gt;: &amp;lt;br&amp;gt;&lt;br /&gt;
#The player places towers strategically around the enemy path. &amp;lt;br&amp;gt;&lt;br /&gt;
#The number of towers is fixed per round &amp;lt;br&amp;gt;&lt;br /&gt;
#Towers can only be placed in marked areas that do not lie on a path &amp;lt;br&amp;gt;&lt;br /&gt;
#The built-in software will find a valid tower location and move the cursor there automatically according to joystick input. &amp;lt;br&amp;gt;&lt;br /&gt;
#There are 5 types of towers (increasing damages, ranges, and of different colors). Each tower type depends on the current wave.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During the &amp;lt;b&amp;gt;Combat Phase&amp;lt;/b&amp;gt;: &amp;lt;br&amp;gt;&lt;br /&gt;
#Enemies will enter the gameplay area at one end of the path and attempt to reach the other end &amp;lt;br&amp;gt;&lt;br /&gt;
#Towers will automatically engage enemies when they come within range &amp;lt;br&amp;gt;&lt;br /&gt;
#Towers shoot until the enemy is either dead or out of range &amp;lt;br&amp;gt;&lt;br /&gt;
#Tower proximity is 8 directions (top, bot, left, right, top-right, top-left, bot-left, bot-right) and 1 unit (not necessarily 1 pixel) away &amp;lt;br&amp;gt;&lt;br /&gt;
#Enemies that reach the end of path while being alive will result in losing the game. &amp;lt;br&amp;gt;&lt;br /&gt;
#If any spaceship reaches the end of the path, the player loses and the game ends &amp;lt;br&amp;gt;&lt;br /&gt;
#The round is over when the player loses or a set number of enemies have been defeated. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:combatPhase_0.JPG|300px|thumb|right|Dashboard (Combat Phase)]]&lt;br /&gt;
&lt;br /&gt;
There will be a &amp;lt;b&amp;gt;dashboard&amp;lt;/b&amp;gt; on the LED matrix that displays basic UI information: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Intermission Phase:&amp;lt;/b&amp;gt;&lt;br /&gt;
#Time until combat phase &amp;lt;br&amp;gt;&lt;br /&gt;
#Current wave number &amp;lt;br&amp;gt;&lt;br /&gt;
#Number of towers left that you can still place &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Combat Phase:&amp;lt;/b&amp;gt;&lt;br /&gt;
#Current wave number &amp;lt;br&amp;gt;&lt;br /&gt;
#Number of enemies still remaining in the current wave&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Game Objectives &amp;lt;/font&amp;gt; ===&lt;br /&gt;
#There are 5 waves (rounds) total. &amp;lt;br&amp;gt;&lt;br /&gt;
#In each round, enemies in various amounts, groupings, and health levels (armor) pass through the path. &amp;lt;br&amp;gt;&lt;br /&gt;
#If any enemies reach the end of the path, then the user loses. &amp;lt;br&amp;gt;&lt;br /&gt;
#After each round, the user will be able to place more towers which are stronger and can shoot farther. &amp;lt;br&amp;gt;&lt;br /&gt;
#Each round will have waves of enemies that are more difficult to stop. &amp;lt;br&amp;gt;&lt;br /&gt;
#The user needs to carefully place their towers such that it will have a maximum number of opportunities to shoot at the enemies. &amp;lt;br&amp;gt;&lt;br /&gt;
#The trick is that the user will need to preserve early level towers, otherwise they will not have enough room to place the high level towers in the optimal location. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; How To Play &amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The gamepad controller consists of a joystick and two buttons. &lt;br /&gt;
*Joystick - move the cursor and decide where to place the towers.&lt;br /&gt;
*Black button - select and confirm the location of the towers. &lt;br /&gt;
*Red button - restart the game (If the player knows that he/she has made a mistake in the middle of the game and will eventually lose the game, the player can press the red button and restart the game.)&lt;br /&gt;
&lt;br /&gt;
During the &amp;lt;b&amp;gt;Intermission Phase&amp;lt;/b&amp;gt;: &amp;lt;br&amp;gt;&lt;br /&gt;
# The player places towers strategically around the enemy path by using the joystick to move the cursor and pressing the black button to select the location of the towers.&lt;br /&gt;
# The player needs to place all remaining towers under 45 seconds.&lt;br /&gt;
During the &amp;lt;b&amp;gt;Combat Phase&amp;lt;/b&amp;gt;: &amp;lt;br&amp;gt;&lt;br /&gt;
# Cheer on your towers and watch them defend Earth from the alien invasion!&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Hardware Design - Electrical &amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Overview &amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
At a high level hardware integration requirements fell into two categories: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''1.''' Reduce risk of unreliable cable connections and eliminate possibility of damage to components through unexpected disconnections, power surges, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
'''2.''' Provide a more fluid physical interface for the user to interact with the game via hardware &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To accomplish these goals, two boards were designed: a breakout board and a gamepad controller. The breakout board serves as a connection hub between all system hardware components; power, the RGB matrix, the SJTWO board, etc. while the joystick provides a cleaner package to present the user with the games inputs. The diagram below shows the relationship between the main subsystems: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:tower_defense_in_space_hw_block_diagram.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All board designs were done using [https://www.autodesk.com/products/eagle/overview EAGLE] and manufactured by [https://jlcpcb.com/ JLCPCB]. Both boards were only two layers and used passive components for the most part. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Breakout Board Design &amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The breakout board design requirement was to interface all external hardware components with the embedded system (SJTWO). The hardware connections are: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''1.''' The 64x64 RGB Matrix &amp;lt;br&amp;gt;&lt;br /&gt;
'''2.''' Output power to the RGB Matrix &amp;lt;br&amp;gt;&lt;br /&gt;
'''3.''' User game controller (see next section) &amp;lt;br&amp;gt;&lt;br /&gt;
'''4.''' Input power supply (5V) &amp;lt;br&amp;gt;&lt;br /&gt;
'''5.''' The SJTWO embedded system &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Breakout_Rev0.2.PNG|1000px|thumb|left|Breakout Board Schematic]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:breakout_board_layout_top.PNG|400px|thumb|left|Breakout Board PCB Top Layout]]&lt;br /&gt;
|[[File:breakout_board_layout_bottom.PNG|400px|thumb|left|Breakout Board PCB Bottom Layout]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:breakout_pcb_top.jpg|400px|thumb|left|Breakout Board PCB Top Layout]]&lt;br /&gt;
|[[File:breakout_pcb_bottom.jpg|400px|thumb|left|Breakout Board PCB Bottom Layout]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:breakout_pcb_mounted_assembled.jpg|800px|thumb|left|Populated and mounted to the SJTWO board]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Known Breakout PCB Issues &amp;lt;/font&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;5&amp;quot; style=&amp;quot;background:#000000;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt; Known Issues &amp;lt;/span&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
Summary&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
Version&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: center;&amp;quot; style=&amp;quot;background:#C0C0C0;&amp;quot; |&lt;br /&gt;
Status&lt;br /&gt;
|-&lt;br /&gt;
| 5V should not be routed to game controller.&lt;br /&gt;
| 3.3V should be routed to the game controller instead of 5V since the ADC pins are not 5V tolerant.&lt;br /&gt;
| 0.1&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resolved Rev 0.2&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wrong silkscreen/not enough room near power input.&lt;br /&gt;
| Power input silkscreen too small, part too big for 3.3V LED to fit&lt;br /&gt;
| 0.1&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Resolved Rev 0.2&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Linear regulator not needed.&lt;br /&gt;
| The schematic for the SJTWO board labels the input voltage pin as VIN RAW, which is different than the label on the&lt;br /&gt;
optional input port. They are both the same, so this input feeds directly into the on-board 3.3V regulator. Essentially&lt;br /&gt;
we're driving the regulator with the same voltage it outputs which just won't work well.&lt;br /&gt;
| 0.1, 0.2&lt;br /&gt;
| &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;UNRESOLVED&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Gamepad Hardware Design &amp;lt;/font&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
The gamepad board design requirement was to provide a more packaged interface for the user to interact with the game. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:gamepad_schematic.PNG|1000px|thumb|left|Gamepad Schematic]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:gamepad_layout_top.PNG|600px|thumb|left|Gamepad PCB Top]]&lt;br /&gt;
|[[File:gamepad_layout_bottom.PNG|600px|thumb|left|Gamepad PCB Bottom]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:gamepad_pcb_assembled.jpg|800px|thumb|left|Gamepad PCB Fully Populated (no enclosure)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Hardware Design (Mechanical) &amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Only a few mechanical components were needed for this project. Namely simple brackets for mounting electrical hardware to the RGB matrix and displaying the matrix itself. All CAD designs were done using [https://www.onshape.com/ Onshape], a free CAD tool that can be used entirely through your web browser.&lt;br /&gt;
&lt;br /&gt;
For displaying the RGB matrix, two brackets were 3D printed to prop it up. Their STL files can be found under our source repository.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:matrix_bracket_1.PNG|100x|thumb|left|Mounting bracket design used to prop up the RGB matrix]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Hardware Integration &amp;lt;/font&amp;gt; ==&lt;br /&gt;
=== RGB LED MATRIX ===&lt;br /&gt;
The LED matrix that we use is 64 pixels by 64 pixels and is controlled through a 12-pin header consisting of the following pins:&lt;br /&gt;
&lt;br /&gt;
*Five Mux pins (A,B,C,D,E) for Row Selection&lt;br /&gt;
**In order to select a specific row of the LED matrix, we need to control the output level of each mux pin. Since the LED matrix light up two rows of LEDs at one time, we can only select 1 out of 32 rows.&lt;br /&gt;
*Two sets of RGB pins (R1,G1,B1,R2,G2,B2) for Color Selection&lt;br /&gt;
**Since we are driving two rows of LED matrix at once, we need 2 sets of RGB pins. One set is used to control the color pixels of the upper half of the display and the other set for the bottom half of the display.  &lt;br /&gt;
*Output Enable Pin (OE)&lt;br /&gt;
**Output Enable (OE) pin is used to turn on or off the LEDs of the current row.&lt;br /&gt;
*Latch Pin (LAT)&lt;br /&gt;
**Latch pin is used to prevent the data being shifted into the shift registers and tells the shift register when it is time to switch to newly entered data.&lt;br /&gt;
*Clock Pin (CLK)&lt;br /&gt;
**triggers a shift on the shift registers&lt;br /&gt;
&lt;br /&gt;
All these pins are required to display a specific color on a specific pixel of the LED matrix display.&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Pin assignment LED Matrix.jpg|500px|thumb|middle|Pin Connections between SJtwo Board and REG LED Matrix]]&lt;br /&gt;
|[[File:scan116.gif|200px|thumb|right|LED Matrix - Row Scanning]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Apparently, it is impossible to driver all 4096 LEDs all at one time and thus, we can only drive two rows of LEDs at a time (one row on the upper half of the display and another row on the lower half of the display). By refreshing the LED matrix two rows at a time in a fast frequency, we can display all the game objects with animation on the LED matrix.&lt;br /&gt;
&lt;br /&gt;
=== Joysticker controller ===&lt;br /&gt;
The joystick that we use is the product from Adafruit, the Analog 2-axis Thumb Joystick. This 2-axis Thumb Joystick provides the following pins:&lt;br /&gt;
&lt;br /&gt;
# Two ADC pins &lt;br /&gt;
## In order to control the tower location, we need to control the Joysticker, since the direction has four: Up, Down, Left, Right, we use the Y and X-axis to implement this function.&lt;br /&gt;
# Three GPIO pins &lt;br /&gt;
## In order for selecting for the tool we need two GPIO pin for button and 1 GPIO pin for controlling the LED on the JOY STICKER controller&lt;br /&gt;
&lt;br /&gt;
* Pin configuration&lt;br /&gt;
[[File:Selection 999(032).png]]&lt;br /&gt;
&lt;br /&gt;
=== MP3 Decoder ===&lt;br /&gt;
&lt;br /&gt;
The MP3 decoder that we use is Sparkfun’s vs1053 shield MP3 decoder which is the board based on the vs1053b chip.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:MP3DECODER PON.png|600px|thumb|left|MP3 Decoder Module Pinout]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Selection 999(034).png|600px|thumb|left|MP3 Decoder Pin Table]]&lt;br /&gt;
|}&lt;br /&gt;
* Three SPI pin &lt;br /&gt;
In order to communicate with the mp3 decoder with SJtwo Board, we choose the SPI as the protocol to control the decoder. Hence, we need the one pin SCK0&lt;br /&gt;
(clock), one pin MOSI(Master In Slave Out) and one pin (Master Out Slave In).&lt;br /&gt;
* Four GPIO pin for the decoder  &lt;br /&gt;
There are four major GPIO pin for DREQ(Data Request Pin), Reset, CS(Chip Select), XDCS(Data Chip Select), this 4 GPIO pin is how we transfer data and send&lt;br /&gt;
the command to activate the mp3 decoder work with SJ2 Board.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Software Design &amp;lt;/font&amp;gt; ==&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; RGB LED Matrix &amp;lt;/font&amp;gt; ===&lt;br /&gt;
[[File:RGB_data.jpg|400px|thumb|right|RGB Data Element]]&lt;br /&gt;
&lt;br /&gt;
All the LED Matrix data are stored in a buffer with its size equal to 32 by 64. Each element in this buffer store the color of two pixels, one pixel from the upper half of the display and one pixel from the lower half of the display.&lt;br /&gt;
&lt;br /&gt;
In order to display the gaming objects in animation, we need to refresh the display by displaying the color pixels on each row one by one very fast. Below is a simple flowchart that describes the process of refreshing the display. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Loop through each row of the LED display&lt;br /&gt;
# Select Row (By controlling the output level of 5 mux pins, we can select one row at a time)&lt;br /&gt;
# Disable the LED Display output (Turn off the LEDs of the current row of the display)&lt;br /&gt;
# Unlatch the Data&lt;br /&gt;
# Clock in Data for each column(Store the color of each pixel inside display_matrix buffer)&lt;br /&gt;
# Latch the Data&lt;br /&gt;
# Enable the LED Display output (Display the color of each pixel of the current row)&lt;br /&gt;
# Delay for a 100us (Increase the light intensity of the LEDs by delay a short amount of time)&lt;br /&gt;
# Disable the LED Display output (Turn off the LEDs of the current row of the display)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void refreshDisplay(void) {&lt;br /&gt;
  for (uint8_t row = 0; row &amp;lt; LEDMATRIX_HALF_HEIGHT; row++) {&lt;br /&gt;
&lt;br /&gt;
    select_row(row);&lt;br /&gt;
    led_matrix__disable_output(); // gpio__set(OE);&lt;br /&gt;
    led_matrix__unlatch_data();   // gpio__set(LAT);&lt;br /&gt;
    led_matrix__clock_in_data(row);&lt;br /&gt;
    led_matrix__latch_data();    // gpio__reset(LAT);&lt;br /&gt;
    led_matrix__enable_output(); // gpio__reset(OE);&lt;br /&gt;
    delay__us(100);              // Change Brightness&lt;br /&gt;
    led_matrix__disable_output();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void led_matrix__clock_in_data(uint8_t row) {&lt;br /&gt;
  /* Clock in data for each column */&lt;br /&gt;
  for (uint8_t col = 0; col &amp;lt; LEDMATRIX_WIDTH; col++) {&lt;br /&gt;
    &lt;br /&gt;
    /* Set all the RGB pins as low*/&lt;br /&gt;
    LPC_GPIO1-&amp;gt;PIN &amp;amp;= ~(0x1 &amp;lt;&amp;lt; R1.pin_number | 0x1 &amp;lt;&amp;lt; G1.pin_number | 0x1 &amp;lt;&amp;lt; B1.pin_number);&lt;br /&gt;
    LPC_GPIO2-&amp;gt;PIN &amp;amp;= ~(0x1 &amp;lt;&amp;lt; R2.pin_number | 0x1 &amp;lt;&amp;lt; G2.pin_number | 0x1 &amp;lt;&amp;lt; B2.pin_number);&lt;br /&gt;
&lt;br /&gt;
    /* Set the RGB pins as High or Low depends on the data stored inside the buffer */&lt;br /&gt;
    LPC_GPIO1-&amp;gt;PIN |= ((((display_matrix[row][col] &amp;gt;&amp;gt; 0) &amp;amp; 0x1) &amp;lt;&amp;lt; R1.pin_number) |&lt;br /&gt;
                       (((display_matrix[row][col] &amp;gt;&amp;gt; 1) &amp;amp; 0x1) &amp;lt;&amp;lt; G1.pin_number) |&lt;br /&gt;
                       (((display_matrix[row][col] &amp;gt;&amp;gt; 2) &amp;amp; 0x1) &amp;lt;&amp;lt; B1.pin_number));&lt;br /&gt;
&lt;br /&gt;
    LPC_GPIO2-&amp;gt;PIN |= ((((display_matrix[row][col] &amp;gt;&amp;gt; 4) &amp;amp; 0x1) &amp;lt;&amp;lt; R2.pin_number) |&lt;br /&gt;
                       (((display_matrix[row][col] &amp;gt;&amp;gt; 5) &amp;amp; 0x1) &amp;lt;&amp;lt; G2.pin_number) |&lt;br /&gt;
                       (((display_matrix[row][col] &amp;gt;&amp;gt; 6) &amp;amp; 0x1) &amp;lt;&amp;lt; B2.pin_number));&lt;br /&gt;
&lt;br /&gt;
    gpio__set(CLK);&lt;br /&gt;
    gpio__reset(CLK);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:RefreshDisplaySequence.jpg|300px|Process of refreshing display]]&lt;br /&gt;
|}&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; MP3 Decoder &amp;lt;/font&amp;gt; ===&lt;br /&gt;
The MP3 deocder is executed with the mainly two task: read task and play task. &lt;br /&gt;
The reader task would read data from the sd card and sned queue data for the player task to play music.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:MP3DECODERMODULE.png|600px|thumb|left|MP3 Decoder Module API]]&lt;br /&gt;
|}&lt;br /&gt;
* Read Task&lt;br /&gt;
* Loop through each row of the LED display &lt;br /&gt;
# Queue sned the target filename&lt;br /&gt;
# Queue receive the target name&lt;br /&gt;
# Find the mp3 file name is exit or not&lt;br /&gt;
# Open the file(fopen)&lt;br /&gt;
# Read data store to the buffer(Binary)&lt;br /&gt;
# Sent the data from bufder with queuesend API&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File: READ TASK.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Play Task&lt;br /&gt;
Receive the data of the song from the queue, and use the receiving data and sent the command to make decoder to play music.&lt;br /&gt;
&lt;br /&gt;
* Read Task&lt;br /&gt;
* Loop through each row of the LED display &lt;br /&gt;
# Queue receive the data(music)&lt;br /&gt;
# disable the chip select&lt;br /&gt;
# Check the DREQ pin to know is ready or not&lt;br /&gt;
# exchange the data to the decoder to play the music&lt;br /&gt;
# Check the DREQ pin to know is ready or not&lt;br /&gt;
# disable the chip select&lt;br /&gt;
{|&lt;br /&gt;
|[[File: Play Task.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; JOY STICKER &amp;lt;/font&amp;gt; ===&lt;br /&gt;
The JOY_STICKER is using the task to pool the ADC channel data to get the direction from the Joysticker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Loop through each time to poll the enum type data to get direction&lt;br /&gt;
# Receiving the data from two ADC channel(5=x, 4=y)&lt;br /&gt;
# Comparing which one has higher absolute data&lt;br /&gt;
# If (X &amp;gt; Y == YES) ,then we go to the loop to compare It's closer to Right or Left&lt;br /&gt;
# If (X &amp;gt; Y == YES &amp;amp;&amp;amp; Right &amp;gt; LEFT == YES), then the status is Right&lt;br /&gt;
# If (X &amp;gt; Y == YES &amp;amp;&amp;amp; Right &amp;gt; LEFT == NO), then the status is Left&lt;br /&gt;
# If (X &amp;gt; Y == NO) ,then we go to the loop to compare It's closer to Up or Down&lt;br /&gt;
# If (X &amp;gt; Y == NO &amp;amp;&amp;amp; Up &amp;gt; Down == YES), then the status is Up&lt;br /&gt;
# If (X &amp;gt; Y == NO &amp;amp;&amp;amp; Up &amp;gt; Down == NO), then the status is Down&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Joystickermodule.png|1000x|thumb|left|Game controller]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:JOY STICKER ADC FLOW.png|1000x|thumb|left|Game controller flow chart]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; System Flow Charts &amp;lt;/font&amp;gt; ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; Basic Software Environment: &amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Flow1 TDIS.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; Game Master (how the user sees the game flowing): &amp;lt;/b&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Flow2_TDIS.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; Intermission Phase (what happens while the user is placing towers): &amp;lt;/b&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
[[File:Flow3_TDIS.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; Combat Phase (what happens when the aliens invade): &amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Flow4_TDIS.png]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; System Testing and Validation &amp;lt;/font&amp;gt; ==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:StartScreenTowerDefense.gif|400px|thumb|left|Start Screen]]&lt;br /&gt;
|[[File:CombatPhase.gif|400px|thumb|left|Combat Phase]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:EndGame.gif|400px|thumb|left|Player Loses the game]]&lt;br /&gt;
|[[File:VictoryScreen TowerDefense.gif|400px|thumb|left|Player Wins the game]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Technical Challenges &amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=== Game Map (2D array) to LED matrix (2D pixels) Conversion ===&lt;br /&gt;
Issue: &lt;br /&gt;
# The game map (consisting of the path as well as all of the active enemies and towers) is managed through the use of a 2D char array. &lt;br /&gt;
# In order to display each object on the LED matrix, there needs to be a mechanism that converts the object along with its 2D array location to a row/column on the LED matrix.&lt;br /&gt;
# An algorithm to do this conversion is not as straightforward as it may appear. This is because objects stored in the array take up more/less display space than what is available on the LED matrix.&lt;br /&gt;
Solution:&lt;br /&gt;
# In order to align the array locations with the LED matrix pixel locations, some areas on the 2D array needed to be marked as &amp;quot;ignore&amp;quot;. &amp;lt;br&amp;gt;&lt;br /&gt;
# If each array location is not carefully correlated to a specific pixel location, then there would be issues where objects are displayed overlapping each other on the LED matrix (or simply displayed in the wrong spot).&lt;br /&gt;
# There were some simple algorithms that used math to help implement this conversion. &amp;lt;br&amp;gt;&lt;br /&gt;
# However, a LUT is what was primarily used. It was not efficient in terms of code size, it took over 500 lines of code. &amp;lt;br&amp;gt;&lt;br /&gt;
# But it was an effective solution and allowed us to easily decide exactly where each pixel of each object would be displayed.&lt;br /&gt;
&lt;br /&gt;
=== LED Matrix Flickering Issue ===&lt;br /&gt;
Issue: While we are developing the game, we notice that some color pixels are turned on when they are supposed to be off. &lt;br /&gt;
&lt;br /&gt;
Investigation/Solution: &lt;br /&gt;
# See [[Known Breakout PCB Issues]] as a possible cause. It's possible the SJTWO board is getting inconsistent power.&lt;br /&gt;
# Refreshing the matrix should not be handled by an interrupt and not a task. The task should only push new display data and not have direct control of the matrix. Keeping the refresh interrupt driven would keep the refresh rate more consistent by removing the process being context switched out mid update.&lt;br /&gt;
&lt;br /&gt;
=== MP3 Decoder - SJtwo Board SPI Selection ===&lt;br /&gt;
&lt;br /&gt;
Issue: &lt;br /&gt;
# The mp3 decoder1053b's document is a kind of confusing for the mode when 1032b have several modes&lt;br /&gt;
# It's hard to know the configuration is successful or not. &lt;br /&gt;
Solution:&lt;br /&gt;
# Doing the survey on the GitHub is really important. For example, using the sin wave and hello binary example to test how the Initialization and HZ parameter would save a lot of time.Moreover, in the document from the vs1053b, we could use the binary file line &amp;quot;hello&amp;quot;, &amp;quot;sine wave&amp;quot; function for testing. &lt;br /&gt;
# Besides, we also have to be careful to check the SJBoard's SPI because of the SD card reader is using for reading SDcard. Hence, I would recommend using other &lt;br /&gt;
SPI0, SPI1 instead of using SPI2.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Conclusion &amp;lt;/font&amp;gt; ==&lt;br /&gt;
We successfully designed and implemented the video game &amp;quot;Tower Defense In Space&amp;quot;. All of our team members now have a better understanding of how to use FreeRTOS to handle the synchronization of multiple tasks and to communicate with multiple hardware components in an embedded application system. After completing this project, we learned how to manage a project on a tight schedule. Starting from purchasing hardware components, developing hardware drivers and game logic and then integrating all of the drivers and APIs into the game logic. Furthermore, all of us are now better at coding and debugging code. &lt;br /&gt;
For a game design project like this, we learned that it's not always best to assign tasks independently between the team members. We learned that this type of project would benefit moreso from pair programming and other cooperative tasks that enable collaboration between teammates. Otherwise, project tasks may be done in such a way that they only work for 1 specific configuration, and wouldn't help progress towards the end goal of the integrated system. We also learned that not every day was going to be perfect, but as long as we never gave up and worked hard, then the final result would not be disappointing! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We would like to say thank you to Prof. Preet and all the ISAs for their precious suggestions and assistance during the development of this project!&lt;br /&gt;
&lt;br /&gt;
== Advice for Future Students ==&lt;br /&gt;
&lt;br /&gt;
==== Source Control ====&lt;br /&gt;
Unless everyone in your group is comfortable using source control, don't use it. It will likely end up costing you time in the long run.&lt;br /&gt;
&lt;br /&gt;
==== Start working on your LED Matrix driver ASAP ====&lt;br /&gt;
The first 64x64 LED Matrix that we got from Sparkfun suffers from a serious flickering issue. After spending for a week trying to debug what causes the flickering issue, we still have no idea whether it is a hardware issue or software issue. Later, we borrow another LED matrix from a student of our class and test our code. With the other student's LED matrix (we use our own power supply and ribbon cables), there is no flickering issue at all. According to some online resources, some matrix vendors scatter the selected rows and columns differently. It is possible that your designed driver may only work on some LED matrix vendors' displays.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Video Demonstration &amp;lt;/font&amp;gt; ==&lt;br /&gt;
[https://www.youtube.com/watch?v=b2isxUJta6Q Demo Video (Player Wins)]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=fylwPk5g_3Q Demo Video (Player Loses)]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;000000&amp;quot;&amp;gt; Source Code &amp;lt;/font&amp;gt; ==&lt;br /&gt;
* [https://gitlab.com/rollin_nolan/tower-defense-in-space Tower_Defense_In_Space_Gitlab]&lt;br /&gt;
* [https://drive.google.com/file/d/1kggWmH2kcPciE4tFG8gYCbF9gfV2dXkk/view zip file (must have SJSU email address)]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F19:_M%26B_(Morph_%26_Blend)&amp;diff=58760</id>
		<title>F19: M&amp;B (Morph &amp; Blend)</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F19:_M%26B_(Morph_%26_Blend)&amp;diff=58760"/>
				<updated>2019-12-21T21:47:35Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Grading Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''M&amp;amp;B (Morph &amp;amp; Blend) '''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:giffy.gif|600px|thumb|center|'''Chameleon Run''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Our game is inspired by the game &amp;quot;Chameleon run&amp;quot; in which the runner matches the color with the incoming obstacles as he moves ahead.&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
M&amp;amp;B is a unique and fast game in which the player has to blend and match with the incoming obstacles. The game demands good reflexes to jump and blend in with the approaching obstacles to keep moving forward. The player is required to control his cube-like character that moves to the right, left and forward directions to make long jumps and change color by these obstacles. Instead of the usual jumping over the barriers and pits, the player has to adapt to them by dynamically changing the character’s color before landing on the platform. SJTwo board will be used to implement the game logic, control the RGB matrix and the joysticks/switches. The&lt;br /&gt;
RGB matrix will be used to display the real-time game statistics such as the player name and their score. The game ends if the player lands on an obstacle of a different color.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
=== Objective ===&lt;br /&gt;
The objective of this project is to develop a simple, single-player 2D game using LPC 4078 microcontroller on an LED matrix display. It focuses on integrating the micro-controller peripheral drivers, led drivers, mp3 player, button controller interface and the application software in FreeRTOS.The button controller interface consists of the button controls for changing color, to control the player's movement and to reset the game. The mp3 player is used to play the game background music.&lt;br /&gt;
&lt;br /&gt;
There are four components in this project:&lt;br /&gt;
&lt;br /&gt;
*'''The Display''' : A 32X64 LED Display Matrix acts as the display of the game. &lt;br /&gt;
&lt;br /&gt;
*'''The Controller''' : The SJ Two Board computes the random obstacle generation and handles the movement and color blend of the player from the button control interface and transfers the information to the display using the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
*'''The Button Control Interface''' : The push button inputs for  auto-runner color and position are implemented on a PCB for game control,.The inputs given by the user are given to the SJ Two board to control the player.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The Project consists of three main modules:&lt;br /&gt;
&lt;br /&gt;
'''Button control module:''' It consists of 7 buttons for the player control; 4 for the different colours to switch, 2 for the directions and 1 for the game reset.&lt;br /&gt;
&lt;br /&gt;
'''Display Module:''' It is responsible for controlling  32*64 LED Matrix interfaced to SJ Two Board.&lt;br /&gt;
 &lt;br /&gt;
'''Mp3 application''' This establishes communication to the display module using SPI.&lt;br /&gt;
&lt;br /&gt;
==== About the game ====&lt;br /&gt;
* Player should match the color of the approaching obstacles to score points by &amp;quot;morphing and blending&amp;quot;.&lt;br /&gt;
* Obstacles of random colors are generated randomly. &lt;br /&gt;
* Button control interface enables the user to shift the player up and down and control the color of the player to move and blend with the incoming obstacles to score points.&lt;br /&gt;
* The game can be reset at any time using the reset button.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  '''Ryan Will'''&lt;br /&gt;
** PCB design&lt;br /&gt;
** MP3 implementation&lt;br /&gt;
&lt;br /&gt;
*  '''Shreeya Mahadevaswamy'''&lt;br /&gt;
** LED Matrix driver&lt;br /&gt;
** Game Logic- Autorunner &lt;br /&gt;
** Game control configuration&lt;br /&gt;
** Scoreboard&lt;br /&gt;
** Testing&lt;br /&gt;
&lt;br /&gt;
*  '''Shanmathi Saravanan'''&lt;br /&gt;
** LED Matrix driver&lt;br /&gt;
** Game Logic- Obstacle &lt;br /&gt;
** Game control configuration&lt;br /&gt;
** Testing&lt;br /&gt;
** Scoreboard&lt;br /&gt;
&lt;br /&gt;
== '''Schedule''' ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Completion Date&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/10/2019&lt;br /&gt;
| &lt;br /&gt;
* Submission of Project Proposal&lt;br /&gt;
| &lt;br /&gt;
* Completed&lt;br /&gt;
| &lt;br /&gt;
* 10/10/2019&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 10/15/2019&lt;br /&gt;
| &lt;br /&gt;
* Research for Required Components.&lt;br /&gt;
* Submit Schedule and Components List.&lt;br /&gt;
| &lt;br /&gt;
* Completed&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
* 10/20/2019&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| 10/22/2019&lt;br /&gt;
| &lt;br /&gt;
* Ordering components&lt;br /&gt;
* Familiarize with LED Matrix Datasheet &lt;br /&gt;
* understanding control pin configuration for the LED matrix display and displaying a single character&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
* 11/5/2019&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| 10/5/2019&lt;br /&gt;
|&lt;br /&gt;
* Develop LED driver and a dedicated function to update display continuously&lt;br /&gt;
* Verifying the functioning of the update display function by creating a task that displays characters sequentially.&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
* 11/15/2019&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
|  11/16/2019&lt;br /&gt;
| &lt;br /&gt;
* MP3 basic code skeleton development&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
* 12/18/2019&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
|  11/16/2019&lt;br /&gt;
| &lt;br /&gt;
* Autorunner configuration &lt;br /&gt;
* Developing code for generating obstacles at particular rows statically&lt;br /&gt;
* Implementing obstacle shift function for shifting the obstacles towards the player&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
* 11/19/2019&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| 11/19/2019&lt;br /&gt;
|&lt;br /&gt;
* Randomizing the obstacle generation code: for generating the obstacles at random rows with random colors &lt;br /&gt;
* Developing code for obstacle and player color mismatch and match &lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
*11/26/2019&lt;br /&gt;
|-&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| 11/26/2019&lt;br /&gt;
|&lt;br /&gt;
* Implementing start screen and scoreboard screen configurations&lt;br /&gt;
* Synchronizing the obstacle generation and auto-runner generation using dedicated tasks &lt;br /&gt;
* Implementing button control for controlling the player position&lt;br /&gt;
* Implementing code for moving the auto runner position with button input&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
*12/3/2019&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| 12/3/2019&lt;br /&gt;
| &lt;br /&gt;
* Implementing code for incrementing the score with each color match of player and obstacle&lt;br /&gt;
* Implementing button control for controlling the player color&lt;br /&gt;
* Implementing code for changing the auto runner color with button input&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
* 12/10/2019&lt;br /&gt;
|- &lt;br /&gt;
 &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| 12/10/2019&lt;br /&gt;
| &lt;br /&gt;
* Synchronizing tasks from game start to game end and scoreboard display&lt;br /&gt;
* Final bug fixes and troubleshooting.&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
* 12/17/2019&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
| 12/17/2019&lt;br /&gt;
| &lt;br /&gt;
* Complete wiki report and final demo.&lt;br /&gt;
|&lt;br /&gt;
* Completed&lt;br /&gt;
|&lt;br /&gt;
* 12/18/2019&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== '''Bill of Materials (General Parts)''' ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: left;&amp;quot; style=&amp;quot;background:#588ecc;&amp;quot; | &amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt; PART NAME &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: left;&amp;quot; style=&amp;quot;background:#588ecc;&amp;quot; | &amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
PART MODEL &amp;amp; SOURCE &amp;lt;/span&amp;gt;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: left;&amp;quot; style=&amp;quot;background:#588ecc;&amp;quot; | &amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
QUANTITY &amp;lt;/span&amp;gt;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;text-align: left;&amp;quot; style=&amp;quot;background:#588ecc;&amp;quot; | &amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;
COST (USD) &amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''SJTwo Boards'''&lt;br /&gt;
| &lt;br /&gt;
 Purchased from Preet Kang&lt;br /&gt;
|&lt;br /&gt;
 1&lt;br /&gt;
|&lt;br /&gt;
 50.00&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''LED Matrix 32x64'''&lt;br /&gt;
| &lt;br /&gt;
 Sparkfun [https://www.sparkfun.com/products/14718]&lt;br /&gt;
| &lt;br /&gt;
 1&lt;br /&gt;
| &lt;br /&gt;
 64.99&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''Switches'''&lt;br /&gt;
| &lt;br /&gt;
 Amazon [https://www.amazon.com/Cylewet-Self-Locking-Latching-Button-CYT1091/dp/B075VBV4QH/ref=pd_sbs_147_1/137-7334021-3032831?_encoding=UTF8&amp;amp;pd_rd_i=B075VBV4QH&amp;amp;pd_rd_r=0ae03c79-1976-4fa3-97c5-44f6019e0e8a&amp;amp;pd_rd_w=kbKR6&amp;amp;pd_rd_wg=fu74k&amp;amp;pf_rd_p=52b7592c-2dc9-4ac6-84d4-4bda6360045e&amp;amp;pf_rd_r=VHJX4T9DNSEW6W47RJ4Q&amp;amp;psc=1&amp;amp;refRID=VHJX4T9DNSEW6W47RJ4Q]&lt;br /&gt;
| &lt;br /&gt;
 7&lt;br /&gt;
| &lt;br /&gt;
 7.00&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''DC Barrel Jack Adapter - Female'''&lt;br /&gt;
| &lt;br /&gt;
 https://www.amazon.com/Chanzon-Female-Connector-Security-Adapter/dp/B079RCNNCK/ref=sr_1_4?keywords=DC+Barrel+Jack+Adapter+-+Female&amp;amp;qid=1574052181&amp;amp;sr=8-4&lt;br /&gt;
| &lt;br /&gt;
 1&lt;br /&gt;
| &lt;br /&gt;
 5.75&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''Power supply'''&lt;br /&gt;
| &lt;br /&gt;
 Sparkfun [https://www.sparkfun.com/products/15352 5V / 4A Power Supply]&lt;br /&gt;
| &lt;br /&gt;
 1&lt;br /&gt;
| &lt;br /&gt;
 12.95&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The game design mainly consists of the LED drivers, PCB designs, button control interface for user control, mp3 implementation to play the background music for the game.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
The hardware design of the 32x64 RGB LED matrix panel which is the most important part of the project, uses four data lines namely A,B,C and D which can be addressed and used to control each LED which has following technical specifications:&lt;br /&gt;
&lt;br /&gt;
Parameters: &lt;br /&gt;
*2048 RGB LEDs&lt;br /&gt;
*1/16 Scan Rate&lt;br /&gt;
*IDC Connector for Daisy Chaining&lt;br /&gt;
*5V Supply Voltage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure and table below show the pin-out of the RGB LED matrix with description.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Label&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Function&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| R1&lt;br /&gt;
| High R data&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| G1&lt;br /&gt;
| High G data&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| B1&lt;br /&gt;
| High B data&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| R2&lt;br /&gt;
| Low R data&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
| G2&lt;br /&gt;
| Low G data&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
| B2&lt;br /&gt;
| Low B data&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| A&lt;br /&gt;
| A line selection&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| B&lt;br /&gt;
| B line selection&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| C&lt;br /&gt;
| C line selection&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| D&lt;br /&gt;
| D line selection&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
| CLK&lt;br /&gt;
| CLOCK&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
| LAT&lt;br /&gt;
| LATCH&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
| OE&lt;br /&gt;
| Output Enable&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
| GND&lt;br /&gt;
| GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===='''LED Matrix Control'''====&lt;br /&gt;
The LED panel contains 1024 RGB LEDs arranged in a matrix of 32 rows and 64 columns. Each RGB LED contains separate red, green, and blue LED chips assembled together in a single package. The display is subdivided horizontally into two parts, the top half and bottom half consists of 64 columns and 16 rows respectively.&lt;br /&gt;
&lt;br /&gt;
There are different drivers for controlling display’s columns and another set of drivers for controlling rows. To illuminate an LED, the drivers for both the column and the row for that LED must be turned on. To change the color of an LED, the red, green, and blue chips in each LED package are controlled individually and have their own column drivers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:Block4.png|600px|thumb|right|LED Matrix]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The panel contains six sets of column drivers; three for the top half of the display and three for the bottom. Each driver has 32 outputs. The three drivers for the top of the display drive the red, green, and blue chips in each of the 64 columns of LEDs in rows 0 to 15 of the panel. The three drivers for the bottom of the display drive the red, green, and blue chips in each of the 64 columns of LEDs in rows 16 to 31 of the panel. The red, green, and blue column drivers for the top half of the display are attached respectively to the R0, G0, and B0 data inputs. The red, green, and blue column drivers for the bottom half of the display are attached respectively to the R1, G1, and B1 data inputs. All six of the 32-bit drivers share common SCLK, LATCH, and BLANK signals.&lt;br /&gt;
&lt;br /&gt;
The display is multiplexed and has a 1/16th duty cycle. This means that no more than one row out of the 16 in the top half of the display and one row out of the 16 in the bottom half of the display are ever illuminated at once. Furthermore, an LED can only be on or off. If both the row and column for an LED are turned on, the LED will be illuminated; otherwise, the LED will be off.&lt;br /&gt;
To display an image, the entire LED panel must be scanned fast enough so that it appears to display a continuous image without flickering. To display different colors and different brightness levels, the brightness of the red, green, and blue LED chips within each LED package must be adjusted by varying the amount of time that each LED chip is on or off within a single refresh cycle.&lt;br /&gt;
&lt;br /&gt;
LED MATRIX DRIVER:&lt;br /&gt;
&lt;br /&gt;
The code below is used to update all pixels of the LED display periodically using a high priority task.&lt;br /&gt;
&lt;br /&gt;
    for (uint8_t row = 0; row &amp;lt; 32; row++) {&lt;br /&gt;
    for (uint8_t col = 0; col &amp;lt; 64; col++) {&lt;br /&gt;
      if (ledmatrix_buffer[row][col] &amp;amp; 0x1) {&lt;br /&gt;
        gpio__set(b1);&lt;br /&gt;
      } else {&lt;br /&gt;
        gpio__reset(b1);&lt;br /&gt;
      }&lt;br /&gt;
      if (ledmatrix_buffer[row][col] &amp;amp; 0x2) {&lt;br /&gt;
        gpio__set(g1);&lt;br /&gt;
      } else {&lt;br /&gt;
        gpio__reset(g1);&lt;br /&gt;
      }&lt;br /&gt;
      if (ledmatrix_buffer[row][col] &amp;amp; 0x4) {&lt;br /&gt;
        gpio__set(r1);&lt;br /&gt;
      } else {&lt;br /&gt;
        gpio__reset(r1);&lt;br /&gt;
      }&lt;br /&gt;
      if (ledmatrix_buffer[row][col] &amp;amp; 0x8) {&lt;br /&gt;
        gpio__set(b2);&lt;br /&gt;
      } else {&lt;br /&gt;
        gpio__reset(b2);&lt;br /&gt;
      }&lt;br /&gt;
      if (ledmatrix_buffer[row][col] &amp;amp; 0x10) {&lt;br /&gt;
        gpio__set(g2);&lt;br /&gt;
      } else {&lt;br /&gt;
        gpio__reset(g2);&lt;br /&gt;
      }&lt;br /&gt;
      if (ledmatrix_buffer[row][col] &amp;amp; 0x20) {&lt;br /&gt;
        gpio__set(r2);&lt;br /&gt;
      } else {&lt;br /&gt;
        gpio__reset(r2);&lt;br /&gt;
      }&lt;br /&gt;
      gpio__set(clk);&lt;br /&gt;
      gpio__reset(clk);&lt;br /&gt;
    }&lt;br /&gt;
    gpio__set(oe);&lt;br /&gt;
    gpio__set(lat);&lt;br /&gt;
    delay__us(250);&lt;br /&gt;
    gpio__reset(a);&lt;br /&gt;
    gpio__reset(b);&lt;br /&gt;
    gpio__reset(c);&lt;br /&gt;
    gpio__reset(d);&lt;br /&gt;
    if (row &amp;amp; 0x1) {&lt;br /&gt;
      gpio__set(a);&lt;br /&gt;
    }&lt;br /&gt;
    if (row &amp;amp; 0x2) {&lt;br /&gt;
      gpio__set(b);&lt;br /&gt;
    }&lt;br /&gt;
    if (row &amp;amp; 0x4) {&lt;br /&gt;
      gpio__set(c);&lt;br /&gt;
    }&lt;br /&gt;
    if (row &amp;amp; 0x8) {&lt;br /&gt;
      gpio__set(d);&lt;br /&gt;
    }&lt;br /&gt;
    gpio__reset(lat);&lt;br /&gt;
    gpio__reset(oe);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
For the hardware, we designed a PCB board that would be used as a hub to connect the LPC4078, the LED Matrix, and the controls together.  The images below show the PCB Board and the PCB schematic that were designed.  The PCB features 26 pin connections that can be used to connect the pins of the LPC4078 to the LED Matrix, an MP3 decoder, a controller, or any other components.  The PCB board was designed using the EAGLE PCB Design Software.&lt;br /&gt;
&lt;br /&gt;
=== PCB Board Design ===&lt;br /&gt;
This is a screenshot of the PCB Board that was designed through EAGLE.  All of the parts used for the design were plated through holes.  This allowed for simple header pins to be soldered directly to the PCB rather than using surface mounted parts. This PCB was used for the button controller implementation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:M&amp;amp;B_PCB_Board.jpg|600px|thumb|right|PCB Board]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PCB Schematic Design ===&lt;br /&gt;
This is a screenshot of the PCB Board Schematic that was designed through EAGLE and used to build design the PCB Board.  The schematic features a large number of header pins that can be used to connect the LPC4078 to a variety of components, including an LED matrix, a button controller, and an MP3 Decoder.  Several pins were also added to supply both a VCC and a GND to all of the components used in the design.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:M&amp;amp;B_PCB_Board_Schematic.jpg|600px|thumb|right|PCB Schematic]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&lt;br /&gt;
The entire software for the game including the APIs were written from scratch. A thorough understanding of the LED Display Matrix proved beneficial in writing suitable code for the display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:SW diagram.jpg|400px|thumb|left|Flow Control of the game]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Logic'''&lt;br /&gt;
&lt;br /&gt;
A '''led_matrixbuffer''' array maps onto the LED Display Matrix. A value overwritten in this two-dimensional buffer updates the corresponding Pixel value of the LED Matrix. The drawPixel function maps onto the led_matrixbuffer and updates the corresponding value.&lt;br /&gt;
&lt;br /&gt;
The tasks run in parallel and are scheduled with the help of the task scheduler that updates the display regularly.&lt;br /&gt;
&lt;br /&gt;
The main code logic blocks which are the random obstacle generation, obstacle motion enabling and obstacle color mismatch detection blocks are as follows: &lt;br /&gt;
OBSTACLE GENERATION:&lt;br /&gt;
&lt;br /&gt;
bool generate_obstacle_rand(void) {&lt;br /&gt;
  bool ret;&lt;br /&gt;
  uint8_t randomize_color = (rand() % 4) + 1; // generating random colour&lt;br /&gt;
  rand_row = (rand() % 17) + 9;  // generating a random row for obstacle generation&lt;br /&gt;
  while (!(((row_old - rand_row) &amp;gt;= obstacle_gap) || ((rand_row - row_old) &amp;gt;= obstacle_gap))) {  // loop  is used to generate a new row number in comparison with the last generated row number&lt;br /&gt;
    rand_row = (rand() % 17) + 9;&lt;br /&gt;
  }&lt;br /&gt;
  while (colour_old == randomize_color || ((colour_old == yellow1) &amp;amp;&amp;amp; (randomize_color == cyan1))) { &lt;br /&gt;
    randomize_color = (rand() % 3) + 1;&lt;br /&gt;
  }&lt;br /&gt;
  if (randomize_color == cyan1) {&lt;br /&gt;
    randomize_color = yellow1;&lt;br /&gt;
  }&lt;br /&gt;
  int8_t row = rand_row;&lt;br /&gt;
  for (int8_t col = 63; col &amp;gt; 52; col--) {&lt;br /&gt;
      drawPixel(row, col, randomize_color);&lt;br /&gt;
      drawPixel(row + 1, col, randomize_color);&lt;br /&gt;
      ret = 0;&lt;br /&gt;
  }&lt;br /&gt;
  row_old = rand_row;&lt;br /&gt;
  colour_old = randomize_color;&lt;br /&gt;
  ret = 1;&lt;br /&gt;
  return (ret);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
OBSTACLE MOTION LOGIC:&lt;br /&gt;
&lt;br /&gt;
void shift_obstacle_left(void) {&lt;br /&gt;
  int8_t temp;&lt;br /&gt;
  for (int8_t row1 = 9; row1 &amp;lt; 28; row1++) {&lt;br /&gt;
    for (int8_t col1 = 0; col1 &amp;lt; 63; col1++) {&lt;br /&gt;
      ledmatrix_buffer[row1][col1] = ledmatrix_buffer[row1][col1 + 1]; // move all element to the left except first&lt;br /&gt;
    }&lt;br /&gt;
    ledmatrix_buffer[row1][63] = 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
OBSTACLE BLEND COLOR MISMATCH DETECTION:&lt;br /&gt;
&lt;br /&gt;
bool detect_collision(void) {&lt;br /&gt;
  bool detect = 0;&lt;br /&gt;
  if (((ledmatrix_buffer[autorunner_row][4] != ledmatrix_buffer[autorunner_row][5]) &amp;amp;&amp;amp;&lt;br /&gt;
       (ledmatrix_buffer[autorunner_row][5] != 0)) ||&lt;br /&gt;
      ((ledmatrix_buffer[autorunner_row + 1][5] != ledmatrix_buffer[autorunner_row + 1][6]) &amp;amp;&amp;amp;&lt;br /&gt;
       (ledmatrix_buffer[autorunner_row + 1][6] != 0)) ||&lt;br /&gt;
      ((ledmatrix_buffer[autorunner_row + 2][4] != ledmatrix_buffer[autorunner_row + 2][5]) &amp;amp;&amp;amp;&lt;br /&gt;
       (ledmatrix_buffer[autorunner_row + 2][5] != 0)) ||&lt;br /&gt;
      ((ledmatrix_buffer[autorunner_row + 3][5] != ledmatrix_buffer[autorunner_row + 3][6]) &amp;amp;&amp;amp;&lt;br /&gt;
       (ledmatrix_buffer[autorunner_row + 3][6] != 0))) {&lt;br /&gt;
    detect = 1;&lt;br /&gt;
  } else {&lt;br /&gt;
    detect = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return (detect);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
MP3 Player Tasks:&lt;br /&gt;
&lt;br /&gt;
void MP3_Play_Task(void *pvParameters)&lt;br /&gt;
{&lt;br /&gt;
        BYTE decoder_buffer[512];&lt;br /&gt;
        mp3_decoder_init();&lt;br /&gt;
&lt;br /&gt;
        while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(xQueueReceive(MP3Queue, decoder_buffer, 1000))&lt;br /&gt;
                {&lt;br /&gt;
                        //printf(&amp;quot;track playing&amp;quot;);&lt;br /&gt;
                        play_mp3_track(decoder_buffer);&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Read_MP3_Task(void *pvParameters)&lt;br /&gt;
{&lt;br /&gt;
        while(1)&lt;br /&gt;
        {&lt;br /&gt;
                readMP3File();&lt;br /&gt;
                vTaskDelay(1000);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
MP3 Decoder Driver:&lt;br /&gt;
&lt;br /&gt;
void mp3_decoder_init()&lt;br /&gt;
{&lt;br /&gt;
    ssp__init(24);&lt;br /&gt;
    gpio_x__set_as_output(1, 28); //Set pin 1.28 as output for RESET signal&lt;br /&gt;
    gpio_x__set_as_output(1, 20); //Set pin 1.20 as output for DCS signal&lt;br /&gt;
    gpio_x__set_as_output(1, 31); //Set pin 1.31 as output for CS signal&lt;br /&gt;
&lt;br /&gt;
    //gpio_x__set(0, 25, true); //Set pin 0.25 high initially&lt;br /&gt;
    //gpio_x__set(0, 26, true); //Set pin 0.26 high initially&lt;br /&gt;
    //gpio_x__set(1, 30, true); //Set pin 1.30 high initially&lt;br /&gt;
    gpio_x__set_high(1, 28);&lt;br /&gt;
    gpio_x__set_high(1, 20);&lt;br /&gt;
    gpio_x__set_high(1, 31);&lt;br /&gt;
&lt;br /&gt;
    gpio_x__set_as_input(0, 26); //Set pin 0.26 as input for DREQ&lt;br /&gt;
&lt;br /&gt;
    write_to_decoder(SCI_MODE, 0x0800);         //Set up MODE register&lt;br /&gt;
    //write_to_decoder();                         //Set up Bass/Treble register&lt;br /&gt;
    write_to_decoder(SCI_CLOCKF, 0x2000);       //Set up Clock register&lt;br /&gt;
    write_to_decoder(SCI_AUDATA, 0xAC45);       //Set up AudioData register               `&lt;br /&gt;
    write_to_decoder(SCI_VOL, 0x2424);          //Set up Volume register&lt;br /&gt;
&lt;br /&gt;
    uint16_t data1 = read_from_decoder(SCI_MODE);&lt;br /&gt;
    uint16_t data2 = read_from_decoder(SCI_CLOCKF);&lt;br /&gt;
    uint16_t data3 = read_from_decoder(SCI_AUDATA);&lt;br /&gt;
    uint16_t data4 = read_from_decoder(SCI_VOL);&lt;br /&gt;
    printf(&amp;quot;SCI_MODE = %x\n&amp;quot;, data1);&lt;br /&gt;
    printf(&amp;quot;SCI_CLOCKF = %x\n&amp;quot;, data2);&lt;br /&gt;
    printf(&amp;quot;SCI_AUDATA = %x\n&amp;quot;, data3);&lt;br /&gt;
    printf(&amp;quot;SCI_VOL = %x\n&amp;quot;, data4);&lt;br /&gt;
&lt;br /&gt;
    //u0_dbg_printf(&amp;quot;mode data = %x\n&amp;quot;, data);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void play_mp3_track(uint8_t buffer[])&lt;br /&gt;
{&lt;br /&gt;
    for(uint8_t byteIndex = 0; byteIndex &amp;lt; 16; byteIndex++)&lt;br /&gt;
    {&lt;br /&gt;
        while(!(gpio_x__get_level(0, 26)))&lt;br /&gt;
        {&lt;br /&gt;
            //vTaskDelay(1);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        gpio_x__set(1, 20, false);&lt;br /&gt;
        //gpio_x__set_low(0, 26);&lt;br /&gt;
        //gpio_x__set_low(1, 30);&lt;br /&gt;
&lt;br /&gt;
        for(uint16_t i = 32 * byteIndex; i &amp;lt; (32 * byteIndex) + 32; i++)&lt;br /&gt;
        {&lt;br /&gt;
            ssp__exchange_byte(buffer[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        while(!(gpio_x__get_level(0, 26)))&lt;br /&gt;
        {&lt;br /&gt;
            //vTaskDelay(1);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        gpio_x__set(1, 20, true);&lt;br /&gt;
        //gpio_x__set_high(0, 26);&lt;br /&gt;
        //gpio_x__set_high(1, 30);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
We split the code into different logic blocks for better clarity in the game design. We started to develop the LED drivers for the matrix display which took the maximum time in the project. After a lot of hit and trial, we understood how to control each pixel in the matrix. We then started on the game logic implementation where we took a lot of time to finalize on a particular idea. Implementation of the game start screen to display the name was the first step, later followed by the obstacle generation and the runner configuration. Obstacle collision and detection for every colour was time-consuming. Task synchronization helped us understand FreeRTOS and the scheduling concepts better.&lt;br /&gt;
The hardware module includes 32X64 LED matrix display, SJTwo board, two PCB boards- one for the LED display control port connection to the SJTwo board GPIO pins and a port for powering the board and the other for button control.&lt;br /&gt;
&lt;br /&gt;
To play music from the MP3 decoder, the MP3 file needs to be pulled from an SD card and into a buffer, and the data needs to be fed to the MP3 Decoder through the SPI Bus.&lt;br /&gt;
&lt;br /&gt;
HARDWARE IMPLEMENTATION:&lt;br /&gt;
&lt;br /&gt;
The hardware connection between the SJTwo Board and the RGB LED matrix display control pins is as illustrated in the following block diagram:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:hw_connect.PNG|thumb|400px|center|Figure : Hardware connection]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The pins R1, G1, and B1 were used to control the color that lights up in the upper 16 rows of the display matrix and R2, B2 and G2were used to control the lower 16 rows. Pins A, B, C, and D are used for row selection. Based on different combinations of R, G and B pin values different colors can be generated.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
'''Developing a driver for the LED matrix'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The biggest technical challenge that we faced was interfacing with the micro-controller 32 x 64 LED matrix. &lt;br /&gt;
&lt;br /&gt;
Because we used the LPC 4078 to drive the LED matrix, our choices were to either adapt a third party driver library designed for an Arduino, or develop a new driver. We chose the latter option, as the third party Arduino-focused API's were difficult to fully understand. We also felt that developing our own driver would allow us to gain a strong understanding of all aspects of micro-controller to LED matrix integration. This proved useful both for firmware development and debugging.&lt;br /&gt;
&lt;br /&gt;
The first part of developing the LED matrix driver, was learning how each of the 16 input pins affected the matrix display. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The LED matrix's input socket looked as follows:&lt;br /&gt;
&lt;br /&gt;
[[File:Adafruit_32x32_LED_Matrix_socket.png | 300x350px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''A B C D'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pins '''A''', '''B''', '''C''' and '''D''', were used as control bits for the LED matrix's row multiplexer. The 32 x 64 matrix is made up of two individual 16 x 64 LED panels. Each panel contains 16 rows and 32 columns. The binary values of the multiplexer signals, '''A''', '''B''', '''C''' and '''D''',  are used to determine which row of LED's is being driven. Each panel drives the same row of LED's at a time, based on these values. For example, if  '''A''', '''B''', '''C''' and '''D''' are set to 0000, then the LED's in the first row of each panel can be driven. If  '''A''', '''B''', '''C''' and '''D''' are set to 0001, then the LED's in the second row of each panel can be driven. This pattern continues until  '''A''', '''B''', '''C''' and '''D''' are set to 1111, which corresponds to sixteenth (bottom) row of each panel. We set our row iterating value, as '''i = (i + 1) % 16''', so that  '''A''', '''B''', '''C''' and '''D''', would be set to 0000, after finishing latching data into the sixteenth row. This allowed the multiplexer to continuously loop through each row in each panel, from top to bottom. We applied a delay of 1ms after each row iteration to enable the appropriate scan rate. This scan rate was too fast for the human eye to detect, which allowed the LED matrix to display objects steadily, without annoying flickering compromising the image quality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''R1 B1 G1 R2 G2 B2'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pins '''R1''', '''B1''', '''G1''' and '''R2''', '''B2''', '''G2''', were the 6 control signals used to drive the matrix's RGB LEDs, different combinations of red, blue and green (depending on their binary values). '''R1''', '''B1''' and '''G1''', controlled indiidual LED colors on the top panel (panel 1), while '''R2''', '''B2''' and '''G2''', controlled individual LED colors on the bottom panel (panel 2). The way these color combinations manifested on the board, were as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 100px; height: 100px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  '''R'''  || '''B'''  || '''G''' || '''COLOR'''&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0 ||  '''OFF'''&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 1 ||  '''GREEN'''&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0 ||  '''BLUE'''&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1 ||  '''CYAN'''&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0 ||  '''RED'''&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1 ||  '''YELLOW'''&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0 ||  '''PURPLE'''&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1 ||  '''WHITE'''&lt;br /&gt;
|}&lt;br /&gt;
    &lt;br /&gt;
In order to understand how these signals drive individual LEDs on the matrix, one must understand the hardware that they control. The matrix's RGB LEDs are driven by 6 column drivers, each having 32 outputs. Each panel has 3 column drivers. Each column driver can drive 32 LED's in each panel, either red, green or blue (because each of the 3 column drivers controls one of these 3 colors). As a result, the 6 column drivers can drive up to 192 individual red, green and blue LED's (each RGB LED consists of 3 individual red, green and blue LED's) at a time. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CLK LAT OE'''&amp;lt;br&amp;gt;&lt;br /&gt;
Each column driver is composed of serial data input, a blanking input, a shift register, and a parallel output register. Data bits are passed into the shift register on the rising edge of each clock cycle. The clock is controlled using the signal '''CLK'''. Because there are 32 RGB LEDs per row, 32 clock cycles must occur, in order to drive all LED's in a row. After 32 bits of data are passed into the shift register, the '''LATCH''' signal (which is set low before shifting in data bits to the shift register) must be asserted, in order to transfer the data bits from the shift register to the parallel output register. Output enable ('''OE''') is pulled low at this point, in order to enable the column driver. It is pulled high again when transitioning to a new row. We designed our driver to operate on 32 bit, bit strings (of type uint32_t), in order to utilize all 32 LEDs in each row of the matrix. Each 32-bit string, was stored in a 32 element array of type, uint32_t. We assigned the base memory address of the array to a pointer and used integer offset values to pass the different bit strings, stored in the array, into the matrix driver function. This method allowed us to pass 32 unique bit strings into all 32 rows of the LED matrix. The integer offsets corresponded to row numbers. &lt;br /&gt;
&lt;br /&gt;
For each row, we used a for loop (which iterated from 0 to 31) in order to shift all 192 data bits into the shift registers. We latched the data bits into the parallel output register, after shifting was completed, which allowed us to illuminate different individual LED's in each row. This allowed us to use 32 bit, bit strings, to create data structures and graphics. The column driver also allowed us to give the illusion of motion, by turning the different LED's on and off in adjacent rows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''COLOUR MISMATCH DETECTION'''&amp;lt;br&amp;gt;&lt;br /&gt;
Since the player is cleared and redrawn continuously to keep his position in line with the user control input, the color mismatch detection between the player and the obstacle pixels was challenging initially. This issue was fixed by clearing and redrawing the player inside the high priority update display task instead of having a dedicated task for drawing and clearing the player pixels. This ensured that the autorunner pixel values are static when the medium priority mismatch detection task is checking the obstacle pixels with the autorunner pixels. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BUTTON INPUT'''&amp;lt;br&amp;gt;&lt;br /&gt;
The button input for the auto runner movement made the autorunner to shift position by multiple rows instead of one, since the GPIO input was high for several milliseconds and several executions with respect to the task updating the auto runner position. This bug was fixed by including an appropriate Task delay of 0.1 second for the task so that it doesn't latch high more than once for each button press. The time delay was decided based on a trial and error method resulting in the selection of a time delay that was suitable for avoiding consecutive updates as high in the GPIO for movement as well as was able to detect fast consecutive button inputs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''MP3 Decoder'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There were problems with implementing the MP3 Decoder.  When trying to decode the MP3 files, the speaker would not output any sound.  The most likely cause of this problem was that there was an issue with the SPI bus, which was preventing the MP3 Decoder from getting the correct MP3 data.&lt;br /&gt;
&lt;br /&gt;
'''TESTING''':&lt;br /&gt;
&lt;br /&gt;
The testing screenshots for the initial screen, game screen and the final scoreboard are included below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:image0.jpeg|500px|thumb|left|Start Screen]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:image1_2.jpeg|500px|thumb|right|Game screen]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:image2.jpeg|480px|thumb|center|End Screen]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The initial screen displays for 4 seconds before going to the game screen and the final scoreboard screen displays for 4 seconds.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
This project was a fun and strenuous application of our engineering and project management skills. &lt;br /&gt;
&lt;br /&gt;
After completing the driver labs during CMPE 244, we felt confident that we could develop a driver, for the Adafruit LED matrix, without using any third party libraries. We researched the hardware operations of the LED matrix and how to drive the RGB LED's. Once we could control LED's one at a time, the project evolved from an engineering problem into more of a creative exercise. &lt;br /&gt;
&lt;br /&gt;
We faced some issues in implementing the player movement along with the updated color input. To move the player back and forth with the input of a button press and to store the data of the colour stored at each location was a challenge as we were clearing and redrawing the player at every location.&lt;br /&gt;
&lt;br /&gt;
Overall I think the biggest lessons that we learned is project management based. We spent a lot of time choosing between various game designs and it forced us to start our final iteration later than we would have liked. However, we banded together and worked hard during the final few days of the semester to create this game.&lt;br /&gt;
&lt;br /&gt;
If we had to do this project over again, we would plan to manage our time better and probably work on increasing the complexity of the game. We would also improve our PCB and MP3 player. We went with a simple design for this project, as none of us had much prior experience with PCB design or LED matrix. However, now that we understand EAGLE better, developing a better interfacing circuit would be much easier and less time intensive. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Overall this project allowed us to apply both or engineering fundamentals, as well as our creative design skills.&lt;br /&gt;
&lt;br /&gt;
== References Used ==&lt;br /&gt;
&lt;br /&gt;
*https://bikerglen.com/projects/lighting/led-panel-1up/&lt;br /&gt;
*[http://www.socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems FreeRTOS documentations]&lt;br /&gt;
*[https://learn.adafruit.com/32x16-32x32-rgb-led-matrix/overview 32x32 LED Matrix by Adafruit]&lt;br /&gt;
*[https://github.com/adafruit/Adafruit-GFX-Library Adafruit Github Library]&lt;br /&gt;
*[https://github.com/adafruit/Adafruit-GFX-Library Adafruit Github Library]&lt;br /&gt;
*[http://socialledge.com/sjsu/index.php/Main_Page WikiPage by Preetpal Kang]&lt;br /&gt;
*[https://www.sparkfun.com/products/12660 Sparkfun MP3 Decoder]&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
We wish to thank Preet and the ISA team for hosting this class.  This was a fun project and a great learning experience for our group.  We hope to be able to take CMPE 243 in the future.&lt;br /&gt;
&lt;br /&gt;
== '''Appendix''' ==&lt;br /&gt;
&lt;br /&gt;
== Project Video ==&lt;br /&gt;
https://youtu.be/N-4_O4Ycj6k&lt;br /&gt;
&lt;br /&gt;
== Project Source Code ==&lt;br /&gt;
*  [https://github.com/ShanmathiS/CMPE244-MorphAndBlend GitHub Link]&lt;br /&gt;
* [[File:M&amp;amp;B_MP3_Decoder_Source_code.zip]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F19:_Smacman&amp;diff=58759</id>
		<title>F19: Smacman</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F19:_Smacman&amp;diff=58759"/>
				<updated>2019-12-21T20:45:05Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Grading Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SMACMAN ==&lt;br /&gt;
[[File:smacman_inro.gif|600px|thumb|center|'''Smacman''']]&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Our team has created a unique 2 player game involving a central screen of 64x64 LED matrix and two auxiliary controllers. The two opponents will face one another and will have a paddle on their side. A ball will travel between players which they have to deflect away. Additionally, each player will have a “monster” that will continuously move towards the ball and try to eat the ball. If a monster eats the ball, that opponent of the owner of the monster will lose. Therefore, it is beneficial for a player to try to place the ball closer to their monster and further away from the opponent’s monster in order to score. Additionally, if the ball contacts the side of the screen behind the player’s paddle, they will also lose. As the game progresses, the speed of the ball will increase and eventually, there will be variation in the movement of monster. The controllers(xBee--XB24-AWI) will be wireless and communicate with the master board which runs the game and drives the 64x64 LED matrix.The MP3 module(VS 1053) reads music files from an SD card and plays the music through a speaker interfaced with the board in the background.&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
The main objective of the project is to develop a 2D two player Smacman game. Other milestones to achieve are as below:&lt;br /&gt;
*Change the direction and speed of the monster differently at different levels, depending on the direction of the ball on LED Matrix in real time.&lt;br /&gt;
*The controller which does wireless transfer of accelerometer values is used to control the movement of the ball&lt;br /&gt;
*Play music in the background and game sounds using MP3 Decoder.&lt;br /&gt;
*Design PCB for Master and the Controller which will interface all the peripheral devices to the SJ-two boards.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The project is broadly divided into three nodes:&lt;br /&gt;
&lt;br /&gt;
1. '''Master Node''': The master node (one SJ2 board) receives the data from the controller nodes via XBee module which is used to control the paddle movement which will eventually control the game. It repeatedly sends and receives packets with the controllers to obtain accelerometer/button information and update the score states of the controllers so that they can display the scores to the players. The Master also uses the information from the Controllers to update the paddle movements as per user's input. The master node also controls visual display on the LED Matrix and the game logic. &lt;br /&gt;
&lt;br /&gt;
2. '''Controller Node''': The controller node (two SJ2 boards) consist of the XBee modules which transmits control packets to the master node using fault-tolerant broadcast wireless UART protocol. These process and send information from the onboard I2C accelerometer and pushbuttons to the Master as well as display the players' scores via an I2C 7-segment display.&lt;br /&gt;
&lt;br /&gt;
3. '''Music Node''': The music node (one SJ2 board) provides background music to the game which enhances the experience of the game.&lt;br /&gt;
&lt;br /&gt;
==== About the game ====&lt;br /&gt;
* Both Players should try to hit the ball with the paddle placed on their side.&lt;br /&gt;
* Press switch on the controller SJ-Two board to start the game.&lt;br /&gt;
* Tilt the controller left or right to move the paddle.&lt;br /&gt;
* Hit the ball with your paddle before the monster eats it to get a score.&lt;br /&gt;
* To manipulate the speed and the direction of the ball move the paddle in the same or in the opposite direction of the ball.  &lt;br /&gt;
* Avoid the monster of opposite player to eat the ball in your side, if this happens then the game is over, else the ball continues to move between the paddles.&lt;br /&gt;
* The speed of the monster increases when the ball will move in opposite direction to catch the ball.&lt;br /&gt;
* Level 1 has the monster of opposite player moving at your side along the edges. If any player exceeds a score of 33 then me move to Level 2.&lt;br /&gt;
* Level 2 has the monster of opposite player moving along x-axis at your side. If any player exceeds a score of 66 then me move to Level 3.&lt;br /&gt;
* Level 3 has the monster of opposite player moving along x-axis and y-axis at your side. If any player reaches a score of 100 then that player wins the game.&lt;br /&gt;
* Both the Players can play and pause the game anytime and resume from where the game was paused.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Nick Schiffer&lt;br /&gt;
**   XBEE, Controller Functionality, Communication Architecture, Game Logic Development, Enclosures, PCB Designing.&lt;br /&gt;
*  Mohit Ingale&lt;br /&gt;
**   LED Driver, Game Logic Development, Enclosures, PCB Designing.&lt;br /&gt;
*  Ayesha Siddiqua&lt;br /&gt;
**   Graphic Driver, Game Logic Development.&lt;br /&gt;
*  Shreya Patankar&lt;br /&gt;
** Splash Screen Graphics Driver, Game Logic Development, MP3 Decoder, Wikimedia Update.&lt;br /&gt;
&lt;br /&gt;
== '''Delivery Schedule''' ==&lt;br /&gt;
Project Repository Link: [https://github.com/nickschiffer/Smacman/projects/1 Github Project]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Actual Completion Date&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/1/2019&lt;br /&gt;
| &lt;br /&gt;
* Submission of Project Proposal.&lt;br /&gt;
| &lt;br /&gt;
* Complete&lt;br /&gt;
| &lt;br /&gt;
* 10/1/2019&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 10/15/2019&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* Create GitLab Repository.&lt;br /&gt;
* Go through the projects and research about components.&lt;br /&gt;
* Distributing the roles among team members. &lt;br /&gt;
* Research Required Components.&lt;br /&gt;
* Submit Schedule and Components List.&lt;br /&gt;
| &lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
* 10/14/2019&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| 10/22/2019&lt;br /&gt;
| &lt;br /&gt;
* Familiarize with 64x64 LED Matrix Datasheet.&lt;br /&gt;
* Familiarize with xbee &amp;amp; accelerometer datasheet.&lt;br /&gt;
* Familiarize with Mp3 Decoder VS-1053 datasheet.&lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
* 11/8/2019&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| 10/29/2019&lt;br /&gt;
|&lt;br /&gt;
* Make Gitlab Repository for individual tasks for all modules &lt;br /&gt;
* Introduce Naming Convention&lt;br /&gt;
* Develop Graphics Drivers and Implementation of displaying basic monster on LED Matrix&lt;br /&gt;
* Calibrating Accelerometer values for 2 Players&lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
* 11/8/2019&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
|  11/5/2019&lt;br /&gt;
| &lt;br /&gt;
* Develop code to send Accelerometer values to move the paddle for both the players&lt;br /&gt;
* Basic LED Display testing for boundary conditions.&lt;br /&gt;
* Develop game specific APIs to draw objects like monster, paddle, ball of led driver&lt;br /&gt;
* Project report update on the wiki.&lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
* 11/12/2019&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
|  11/12/2019&lt;br /&gt;
|&lt;br /&gt;
* Develop Algorithm Design for Game Logic for all 3 levels of game&lt;br /&gt;
* Transmission of Accelerometer values for 2 players from their respective controllers to the master&lt;br /&gt;
* Code for the splash screen(Intro screen)&lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
* 11/19/2019&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| 11/19/2019&lt;br /&gt;
|&lt;br /&gt;
* Code for MP3 Decoder for the background music&lt;br /&gt;
* 7 segment display for players score from controller&lt;br /&gt;
* Code to display the score on matrix&lt;br /&gt;
* Code Integration for the moving of paddle on basis of accelerometer values from controllers for both the players &lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
*11/26/2019&lt;br /&gt;
|-&lt;br /&gt;
 &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| 11/26/2019&lt;br /&gt;
|&lt;br /&gt;
* Develop Play/Pause/Stop functionality  &lt;br /&gt;
* Debug and Test the Play/Pause/Stop functionality &lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
* 11/30/2019&lt;br /&gt;
|- &lt;br /&gt;
 &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| 12/3/2019&lt;br /&gt;
| &lt;br /&gt;
* Design PCB for Controller &amp;amp; master and generate Gerber files, finalize PCB manufacture&lt;br /&gt;
* Integrating calibrated accelerometer, push-button functionalities and wireless transfer from controller boards&lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
* 12/10/2019&lt;br /&gt;
|- &lt;br /&gt;
 &lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| 12/10/2019&lt;br /&gt;
| &lt;br /&gt;
* Integration of subsystems&lt;br /&gt;
* 3-D Printing of enclosures for matrix and the player's controller&lt;br /&gt;
* Fixing the bugs during testing&lt;br /&gt;
|&lt;br /&gt;
* Complete&lt;br /&gt;
|&lt;br /&gt;
* 12/15/2019&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
| 12/17/2019&lt;br /&gt;
| &lt;br /&gt;
* Final bug fixes and troubleshooting.&lt;br /&gt;
* Complete wiki report and final demo.&lt;br /&gt;
|&lt;br /&gt;
* In-Progress&lt;br /&gt;
|&lt;br /&gt;
* 12/17/2019&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| SJTwo Boards&lt;br /&gt;
| Purchased from Preet&lt;br /&gt;
| 4&lt;br /&gt;
| $200.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 64x64 RGB LED Matrix&lt;br /&gt;
|  [https://www.sparkfun.com/products/14824 Sparkfun]&lt;br /&gt;
| 1&lt;br /&gt;
| $75.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| Wiring Components and  Cable&lt;br /&gt;
|  [https://www.amazon.com/XBee-USB-Adapter-Communication-Connectivity/dp/B017KGBP6Y Waveshare]&lt;br /&gt;
| 1&lt;br /&gt;
| $20.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| 3D printer filament spool(s)&lt;br /&gt;
|  [https://www.hatchbox3d.com/ HATCHBOX]&lt;br /&gt;
| 2&lt;br /&gt;
| $40.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
| XBEE Modules&lt;br /&gt;
| From Preet and [https://www.adafruit.com/product/128 Adafruit]&lt;br /&gt;
| 3&lt;br /&gt;
| $27.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
| Batteries&lt;br /&gt;
| Local&lt;br /&gt;
| 2&lt;br /&gt;
| $4.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| I2C 7-seg screens&lt;br /&gt;
|  [https://www.adafruit.com/product/879 Adafruit]&lt;br /&gt;
| 2&lt;br /&gt;
| $18.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| XBee Programmer Boards&lt;br /&gt;
|  [https://www.amazon.com/XBee-USB-Adapter-Communication-Connectivity/dp/B017KGBP6Y Waveshare]&lt;br /&gt;
| 3&lt;br /&gt;
| $35.00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
&lt;br /&gt;
=== Hardware and PCB Design ===&lt;br /&gt;
&lt;br /&gt;
=== PIN Configuration ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| PIN#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Pin Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| uC PIN&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| R1&lt;br /&gt;
| PIN for Red terminal of RGB LED for upper half of LED Matrix&lt;br /&gt;
| P2_0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| G1&lt;br /&gt;
| PIN for Green terminal of RGB LED for upper half of LED Matrix&lt;br /&gt;
| P2_1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| B1&lt;br /&gt;
| PIN for Blue terminal of RGB LED for upper half of LED Matrix&lt;br /&gt;
| P2_2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| R2&lt;br /&gt;
| PIN for Red terminal of RGB LED for lower half of LED Matrix&lt;br /&gt;
| P2_4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| G2&lt;br /&gt;
| PIN for Green terminal of RGB LED for lower half of LED Matrix&lt;br /&gt;
| P2_5&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| B2&lt;br /&gt;
| PIN for Blue terminal of RGB LED for lower half of LED Matrix&lt;br /&gt;
| P2_6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| A&lt;br /&gt;
|  Mux pin for row selection&lt;br /&gt;
| P2_7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| B&lt;br /&gt;
|  Mux pin for row selection&lt;br /&gt;
| P2_8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| C&lt;br /&gt;
|  Mux pin for row selection&lt;br /&gt;
| P2_9&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| D&lt;br /&gt;
|  Mux pin for row selection&lt;br /&gt;
| P0_16&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| E&lt;br /&gt;
|  Mux pin for row selection&lt;br /&gt;
| P0_15&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| OE&lt;br /&gt;
|  Output Enable&lt;br /&gt;
| P1_20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| LATCH&lt;br /&gt;
|  Latching Data&lt;br /&gt;
| P1_23&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| CLK&lt;br /&gt;
|  CLock signal to understand one bit has been detected&lt;br /&gt;
| P1_28&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| VCC&lt;br /&gt;
| VCC Supply&lt;br /&gt;
| VCC&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| GND&lt;br /&gt;
| Ground&lt;br /&gt;
| GND&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| TX_3&lt;br /&gt;
|  UART Transmit for XBEE&lt;br /&gt;
| P4_28&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| RX_3&lt;br /&gt;
|  UART Receive for XBEE&lt;br /&gt;
| P4_29&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| SCK_2&lt;br /&gt;
|  CLOCK for SPI bus for MP3 Decoder&lt;br /&gt;
| P1_0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| MOSI_2&lt;br /&gt;
|  MOSI for SPI bus for MP3 Decoder&lt;br /&gt;
| P1_1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| MISO_2&lt;br /&gt;
|  MISO for SPI bus for MP3 Decoder&lt;br /&gt;
| P1_4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| SDA_2&lt;br /&gt;
|  I2C Data line for 7 Segment&lt;br /&gt;
| P0_10&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| SCL_2&lt;br /&gt;
|  I2C Clock line for 7 Segment&lt;br /&gt;
| P0_11&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Switch&lt;br /&gt;
|  Switch GPIO&lt;br /&gt;
| P0_1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PCB Design ===&lt;br /&gt;
&lt;br /&gt;
There are many softwares available for PCB design, among them Eagle is more popular. We chose EasyEDA for PCB design over Eagle because, it is an online free software so we din't have to worry about the license. We faced many issues while using this software but we found a good tutorial on youtube. The issues which we faced are discussed in the issue section of this wiki.&lt;br /&gt;
The steps involved in the PCB design process are described in the next section.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Schematic Design: ====&lt;br /&gt;
&lt;br /&gt;
Our project can be divided into two main circuits, first is game display circuit and second is a console circuit. We decided to design separate PCB for both circuits as doing so can make wiring easy and improve the user experience.     &lt;br /&gt;
&lt;br /&gt;
===== Master Controller PCB schematic: =====&lt;br /&gt;
[[File:scematic_m_master.jpeg|700px|thumb|center|'''Master Controller PCB Schematic''']]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have created on top PCB to mount on SJTwo board. One circuit will do the wire interfacing of SJTwo board to xbee, mp3 decoder, led matrix. This is the master board and it will recieve values from all the controllers and peripherals. This is our Main Circuit. We Also have a power jack to power all the peripheral devices so that we don't have to power SJTwo board from PC while we are playing the game.&lt;br /&gt;
&lt;br /&gt;
===== Controller PCB schematic: =====&lt;br /&gt;
[[File:scematic_c_pin.png|700px|thumb|center|'''Controller PCB Schematic''']]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have created on top PCB to mount on SJTwo board. One circuit will do the wire interfacing of SJTwo board to xbee of the two game controllers which will in turn send the values of accelerometer to the master Xbee interfaced PCB. We Also have a power jack to power all the peripheral devices so that we don't have to power SJTwo board from PC while we are playing the game.&lt;br /&gt;
&lt;br /&gt;
==== PCB Layout: ====&lt;br /&gt;
&lt;br /&gt;
After schematic design, the most important step is to connect the PCB layout. In EasyEDA components is not automatically associated with it's PCB footprint, so it's user's responsibility to connect right PCB footprint with the right components. In our case, we did not have the footprint of JLC connector and Rocker switch. so, we created it in a different window and saved it. The amazing feature of KiCAD is once we have done with PCB layout we can visualize PCB in 3D by pressing just one button. Below are actual screenshots of both, PCB layout &amp;amp; their 3D model.&lt;br /&gt;
&lt;br /&gt;
===== PCB layout Designed on EasyEDA: =====&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:schematic_black_m.jpeg|300px|thumb|center|'''PCB Schematic Master 3D view''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:PCB_Controller-PCB_20191213210227.png|300px|thumb|center|'''PCB Schematic Controller 3D view''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Printed PCB : =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We chose JLC PCB to manufacture our PCB because, it is the cheapest and convenient option available for any prototype PCB manufacturing. It just cost us $2 for quantity of 10 PCB and $12 for shipment. We received manufactured PCB in just 3 days. Followings are actual photos of manufactured &amp;amp; assembled PCBs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:copper_print_m.jpeg|250px|thumb|center|'''PCB with Copper layer for Master''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:copper_print_c.jpeg|264px|thumb|center|'''PCB with Copper layer for Controller''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:Cmpe244 F19 T1 main controller.png|570px|thumb|center|'''Main Controller Design Diagram''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:Cmpe244 F19 T1 controllers.png|570px|thumb|center|'''Controller Design Diagram''']]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hardware design diagram above gives an overview of the entire system which consists of the two SJ-One controllers: one board is used as Control Module and other board is used as the Display Module.&lt;br /&gt;
&lt;br /&gt;
*The Console Module uses the onboard accelerometer on SJ-One which is interfaced via I2C protocol. The calibrated accelerometer values are then used to determine the basket position on the LED Matrix.&lt;br /&gt;
&lt;br /&gt;
*The Display Module SJ-One board is used to control a 32*32 RGB LED Matrix.This matrix displays the basket, eggs shot from the cannon.The movement of the basket is as per the orientation value received from the Control Module, through Wireless Module. It also consists of Peizo buzzer which is controlled via PWM pin.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Components Design, Description Implementation ===&lt;br /&gt;
&lt;br /&gt;
==== RGB LED Matrix  ====&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:Intro_splash_screen.jpeg|600px|thumb|left|Intro Splash Screen]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
[[File:2048_ledmatrix_2.jpg|600px|thumb|left|LED Matrix Schematic]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A 64x64 RGB LED Matrix Panel is used as a display. It has 4096 full-color RGB LEDs. Each LED can be independently addressed and controlled. It requires at 13 digital GPIOs to control the LED matrix. The led matrix has 2 IDC connectors DATA_IN and DATA_OUT on the back, we can cascade multiple panels and make a huge screen together. The LED display is constructed using a decoder to decode address rows. A 64 bit Shift register should be clocked for enabling the color. When the row is low we need to select which all pixels in the column are to be configured with the required color. This is done by clocking the 64Bit shift register. There are 6 64Bit registers each for R1 R2 B1 B2 G1 G2. A single clock is interfaced to all these 6 64bit shift registers. So at once we shift and fill the required color for the column display. Once the clocking and shifting the register is completed we need to latch this data to the register. The register data is sent out to all the row lines and that Row line which is pulled low by the decoder will receive this data and corresponding pixels are turned on.&lt;br /&gt;
&lt;br /&gt;
RGB LED matrix pins:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;center&amp;quot;|S.NO&lt;br /&gt;
! align=&amp;quot;center&amp;quot;|RGB LED pins&lt;br /&gt;
! align=&amp;quot;center&amp;quot;|Function&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|R1&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|High R data&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|G1&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|High G data&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|B1&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|High B data&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|R2&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Low R data&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|G2&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Low G data&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|B2&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Low B data&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|A&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Row select A&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|B&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Row select B&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|C&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Row select C&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|D&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Row select D&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|11&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|E&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Row select E&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|12&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|CLK&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Clock signal.&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|13&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|OE&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Output enables to cascade LED panel.&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|14&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|LAT&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|Latch denotes the end of data.&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|15&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|VCC&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|5V&lt;br /&gt;
|-&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|16&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|GND&lt;br /&gt;
| scope=&amp;quot;row&amp;quot; align=&amp;quot;center&amp;quot;|GND&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Row Selection =====&lt;br /&gt;
&lt;br /&gt;
The RGB matrix has a 5:32 decoder. This decoder takes 5 bits as input and decodes the corresponding row to be kept low. There are five address inputs to the display marked A, B, C, D and E. Based on the truth table, only one input is active (low) at a time. The outputs of the decoder are connected to a P-Channel MOSFET because the decoder itself can only handle low currents and cannot drive a row of LEDs directly. The P-Channel MOSFET provides the high current needed to drive a row of LEDs.&lt;br /&gt;
The decoder outputs are shared between every 32 outputs. Since, the 5-to-32 address decoder select rows in parallel like 1 and 33, 2 and 34, repeating that pattern until row 32 and 64.&lt;br /&gt;
&lt;br /&gt;
===== Column Selection =====&lt;br /&gt;
&lt;br /&gt;
The column data is stored in a 64-bit serial-in, a parallel-out shift register. The shift register is designed to work with LEDs and implements a constant-current system that ensures the LED brightness remains uniform. R1 G1 B1 is used for configuring the color for the top half of the display and R2 G2 B2 for the bottom half of the display. For 64 rows using with 32 outputs of the decoder, we must have unique data for each row pair. When Row 1 and Row 33 are selected, we must provide each row with unique data. This forces us to use two different shift registers for each row pair, an upper register, and a lower register. Because of this, the display is divided into an upper half and a lower half. The data is shifted into the top half via the R1, G1 and B1 signals on the connector. The bottom halves data is supplied by the R2, G2 and B2 signals on the connector. Then, since our display is 64 pixels wide, we use 64-bit shift registers to hold all 64 bits of pixel data for a single row. Each half of the display is controlled by 3 shift registers, one for each color. First, Row 1 and Row 33 are selected then 64 bits of data are shifted into each color’s shift register (R1, G1, B1), and then latched. At the same time, 64 bits of data are also shifted into each color’s shift register for the bottom half (R2, G2, B2), and then latched. The process repeats 31 more times, each time incrementing the rows are selected until every line has been updated.&lt;br /&gt;
&lt;br /&gt;
In order to display something on the LED panels the following steps need to be performed by the driver&lt;br /&gt;
* Shift the pixel data for row 1 into the top column drivers and the pixel data for row 33 into the bottom column drivers using the R1, G1, B1, R2, G2, and B2 data inputs and the SCLK shift clock signal.&lt;br /&gt;
* Clear the blanking signal to blank the display.&lt;br /&gt;
* Set the address input to 1.&lt;br /&gt;
* Latch the contents of the column driver's shift registers to the output registers using the LATCH signal.&lt;br /&gt;
* Make the blanking signal high to display rows 1 and 33.&lt;br /&gt;
* Repeat the process for each of the pairs of rows in the display for 31 times.&lt;br /&gt;
&lt;br /&gt;
===== Specifications: =====&lt;br /&gt;
The LED display used in our project is a 64*64 pixel panel with a pixel pitch of 3mm. More specifications are tabulated.&lt;br /&gt;
* Operating voltage: DC 5V&lt;br /&gt;
* Average power consumption: &amp;lt;500W/㎡&lt;br /&gt;
* Maxim Power Consumption: &amp;lt;1000w/㎡&lt;br /&gt;
* Pixel: 64x64=4096&lt;br /&gt;
* Level of viewing Angle: ≧160°&lt;br /&gt;
* Control mode: Synchronous control&lt;br /&gt;
* Drive mode: 1/16 scan rate&lt;br /&gt;
* Repetition frequency: ≧60Hz&lt;br /&gt;
* White Balance Brightness: ≧1200cd/㎡&lt;br /&gt;
* Refresh frequency : ≧300Hz&lt;br /&gt;
* MTTF: ≧5000 hours&lt;br /&gt;
* Service Life: 75000~100000 hours&lt;br /&gt;
* Pixel pitch: 3mm&lt;br /&gt;
* Thickness: 11mm&lt;br /&gt;
&lt;br /&gt;
===== Code Snippet for updation of LED matrix: ===== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 void led_matrix__update_display() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; 32; i++) {&lt;br /&gt;
    led_matrix__disable_display();&lt;br /&gt;
    led_matrix__disable_latch();&lt;br /&gt;
    led_matrix__select_row(i); // will select i and i + 32 rows at same time&lt;br /&gt;
    for (int j = 63; j &amp;gt;= 0; j--) { // shift data with MSB getting shifted-in first&lt;br /&gt;
      ((frame_buffer[i][RED_PLANE] &amp;gt;&amp;gt; j) &amp;amp; 1) ? gpio__set(r1) : gpio__reset(r1);&lt;br /&gt;
      ((frame_buffer[i][GREEN_PLANE] &amp;gt;&amp;gt; j) &amp;amp; 1) ? gpio__set(g1) : gpio__reset(g1);&lt;br /&gt;
      ((frame_buffer[i][BLUE_PLANE] &amp;gt;&amp;gt; j) &amp;amp; 1) ? gpio__set(b1) : gpio__reset(b1);&lt;br /&gt;
      ((frame_buffer[i + 32][RED_PLANE] &amp;gt;&amp;gt; j) &amp;amp; 1) ? gpio__set(r2) : gpio__reset(r2);&lt;br /&gt;
      ((frame_buffer[i + 32][GREEN_PLANE] &amp;gt;&amp;gt; j) &amp;amp; 1) ? gpio__set(g2) : gpio__reset(g2);&lt;br /&gt;
      ((frame_buffer[i + 32][BLUE_PLANE] &amp;gt;&amp;gt; j) &amp;amp; 1) ? gpio__set(b2) : gpio__reset(b2);&lt;br /&gt;
      gpio__set(clk);&lt;br /&gt;
      gpio__reset(clk); // shift in all 3 color bits at once for top half/bottom half registers&lt;br /&gt;
      led_matrix__enable_latch();&lt;br /&gt;
      led_matrix__disable_latch();&lt;br /&gt;
    }&lt;br /&gt;
    // at this point, all 3 shift registers should be filled with corresponding row data in frame_buffer&lt;br /&gt;
    led_matrix__enable_latch(); // push shift register contents down to output registers&lt;br /&gt;
    led_matrix__enable_display();&lt;br /&gt;
    delay__us(250);&lt;br /&gt;
  }&lt;br /&gt;
  led_matrix__disable_display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== MP3 Decoder  ====&lt;br /&gt;
&lt;br /&gt;
We have used the SPI bus to communicate between the MP3 Decoder and the SJ-Two Board. We faced issues while writing to the SD Card they are mentioned in the technical issues section. We are reading data of .wav file from SD Card from our board and sending it to the decoder which will in turn play the background music.&lt;br /&gt;
&lt;br /&gt;
[[File:MP3_decoder.jpeg|400px|thumb|center|MP3 Decoder]]&lt;br /&gt;
&lt;br /&gt;
{|The MP3 Decoder is used to play the background music in the game. It is interfaced with the SJ Two board using the SPI protocol.  has an Accelerometer which is interfaced to the board using the I2C bus protocol.&lt;br /&gt;
&lt;br /&gt;
The Pins used for the interfacing are:&lt;br /&gt;
&lt;br /&gt;
*XDCS: Chip select for SDI pin &lt;br /&gt;
*XCS: chip select for SCI pin&lt;br /&gt;
*SCK: clock from master for SCI&lt;br /&gt;
*SI:  Slave input and master output&lt;br /&gt;
*SO:  Slave output and master input&lt;br /&gt;
*RESET: reset for the decoder&lt;br /&gt;
*DREQ: data request&lt;br /&gt;
&lt;br /&gt;
When we recieve any data from the SJ-Two board then we send data which is read from the SD card on the decoder from the slave decoder. Thus we are able to read the file and play the music in the background.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
''' Code snippet for reading music '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void sdcard_handle__read_song_task(void *songQueueHandle) {&lt;br /&gt;
  xQueueHandle *xSongQueue = (xQueueHandle *)songQueueHandle;&lt;br /&gt;
  uint8_t data_buffer[VS1053_DATABUFFERLEN];&lt;br /&gt;
  uint32_t bytes_read = VS1053_DATABUFFERLEN;&lt;br /&gt;
  FIL mySong;&lt;br /&gt;
  while (1) {&lt;br /&gt;
    FRESULT ret_code = f_open(&amp;amp;mySong, &amp;quot;pacman_death.mp3&amp;quot;, FA_READ);&lt;br /&gt;
    if (ret_code != FR_OK) {&lt;br /&gt;
      SMACMAN__DEBUG_PRINTF(&amp;quot;File Not Opened %i\n&amp;quot;, ret_code);&lt;br /&gt;
      fprintf(stderr, &amp;quot;File Not Opened %i\n&amp;quot;, ret_code);&lt;br /&gt;
      if (ret_code == 3) {&lt;br /&gt;
        vTaskDelay(1000);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      bytes_read = VS1053_DATABUFFERLEN;&lt;br /&gt;
      SMACMAN__DEBUG_PRINTF(&amp;quot;File opened\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      while (!mp3__ready_for_data())&lt;br /&gt;
        ;&lt;br /&gt;
      while (!(bytes_read &amp;lt; VS1053_DATABUFFERLEN)) {&lt;br /&gt;
&lt;br /&gt;
        FRESULT f_read_ret_code = f_read(&amp;amp;mySong, data_buffer, VS1053_DATABUFFERLEN, &amp;amp;bytes_read);&lt;br /&gt;
        if (f_read_ret_code != FR_OK) {&lt;br /&gt;
          SMACMAN__DEBUG_PRINTF(&amp;quot;File not Read %i\n&amp;quot;, f_read_ret_code);&lt;br /&gt;
        }&lt;br /&gt;
        // for (int i = 0; i &amp;lt; bytes_read; i++)&lt;br /&gt;
        //   xQueueSend(*xSongQueue, &amp;amp;data_buffer[i], portMAX_DELAY);&lt;br /&gt;
        xQueueSend(*xSongQueue, data_buffer, portMAX_DELAY);&lt;br /&gt;
        SMACMAN__DEBUG_PRINTF(&amp;quot;Data Sent to queue\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      SMACMAN__DEBUG_PRINTF(&amp;quot;Closing File\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
      f_close(&amp;amp;mySong);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //   return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Controller Module ====&lt;br /&gt;
&lt;br /&gt;
'''Accelerometer:'''&lt;br /&gt;
&lt;br /&gt;
[[File:CmpE244_S18_Detectable_Accelerations.png|400px|thumb|center|Accelerometer Detection]]&lt;br /&gt;
&lt;br /&gt;
{|The SJ two board has an Accelerometer which is interfaced to the board using the I2C bus protocol.&lt;br /&gt;
The MMA8452Q which is a smart low-power, three-axis, capacitive micromachined accelerometer with 12 bits of resolution is used in our project.&lt;br /&gt;
Accelerometers are electromechanical devices that are used to sense acceleration that can be of various forms, for instance gravity. &lt;br /&gt;
|In our project,we have calibrated the accelerometer based on the values of X,Y and Z co-ordinates corresponding to different orientations of the accelerometer to control the horizontal movement of the paddle in the game to hit the ball . This has also helped us decide and control the speed of the basket. As shown in the code snippet below the x movement on the right is determined based on the x co-ordinate and the console sensitivity which you wish to set.Similarly movement on the left can also be calculated for further use.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''' Code snippet for Accelerometer Calibration: '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static void controller_comm__master_request_accel(controller_comm_s controller, controller_comm__role_e player_to_request) {&lt;br /&gt;
    controller_comm__message_s request_message = {0};&lt;br /&gt;
    request_message.recipient    = player_to_request;&lt;br /&gt;
    request_message.sender       = CONTROLLER_COMM__ROLE_MASTER;&lt;br /&gt;
    request_message.message_type = CONTROLLER_COMM__MESSAGE_TYPE_REQUEST_ACCEL_VAL;&lt;br /&gt;
    if (player_to_request == CONTROLLER_COMM__ROLE_PLAYER_1) {&lt;br /&gt;
        request_message.data = controller_comm__player_1_score;&lt;br /&gt;
    }&lt;br /&gt;
    else if (player_to_request == CONTROLLER_COMM__ROLE_PLAYER_2) {&lt;br /&gt;
        request_message.data = controller_comm__player_2_score;&lt;br /&gt;
    }&lt;br /&gt;
    controller_comm__send_message(controller, request_message);&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Wireless Module: '''&lt;br /&gt;
[[File:xbee_module.jpg|350px|thumb|center|'''XBee S1''']]&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
For wireless communication we utilized the XBee S1 module. This module provides a &amp;quot;transparent&amp;quot; UART interface to the Master and Controller boards. The XBee S1 is designed by Digi Inc. and allows for relatively easy programming via the XTCU programming suite using a XBee USB programmer. This device internally uses 802.15.4 to wirelessly send UART frames between modules. Because UART is generally  used as a point-to-point protocol, a custom protocol needed to be designed to allow broadcast and multi-node functionality. This can be observed in the controller_comm.h/c files in the repository.&lt;br /&gt;
&lt;br /&gt;
This protocol borrows concepts from UDP and TCP protocols. A transaction begins with a defined start byte(0xDE). This allows for better synchronization between frames comprised of multiple bytes. After a device has received a Start byte, it then receives and processes a header byte. This byte is a structured bit field that encodes the Sender, Recipient, and Message Type as shown below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef enum {&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_START_BYTE,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_RECIPIENT,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_SENDER,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_TYPE,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_DATA_BYTE1,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_DATA_BYTE2,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_COMPONENT_STOP_BYTE,&lt;br /&gt;
} controller_comm__message_components_e;&lt;br /&gt;
&lt;br /&gt;
typedef struct {&lt;br /&gt;
    controller_comm__role_e recipient;&lt;br /&gt;
    controller_comm__role_e sender;&lt;br /&gt;
    controller_comm__message_type_e message_type;&lt;br /&gt;
    uint16_t data;&lt;br /&gt;
} controller_comm__message_s;&lt;br /&gt;
&lt;br /&gt;
typedef union {&lt;br /&gt;
	char byte;&lt;br /&gt;
	struct {&lt;br /&gt;
	    char             : 2;&lt;br /&gt;
	    char message_type: 2;&lt;br /&gt;
	    char sender:       2;&lt;br /&gt;
            char recipient:    2; &lt;br /&gt;
	} __attribute__((packed));&lt;br /&gt;
} controller_comm__message_header_t;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the Master requests the accelerometer positions from the controllers, it piggybacks the current scores in the same request message. This way the controllers' internal score states are always updated. If the controllers detect that the score has changed relatively to what it is aware of, it will write both the player 1 and player 2 scores to the I2C 7-seg display. &lt;br /&gt;
The Sender and Recipient fields allow all the controller being addressed to reply accordingly to whichever node addressed it. Additionally, the Message Type encodes what kind of message is being sent as shown below. The &amp;quot;button pressed&amp;quot; event is encoded in its own message type. This lets the Master know if the button for a specific controller has been pressed since the last time the Master communicated with it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef enum {&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_TYPE_REQUEST_ACCEL_VAL,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_TYPE_SEND_ACCEL_VAL,&lt;br /&gt;
    CONTROLLER_COMM__MESSAGE_TYPE_SEND_ACCEL_VAL_BTN_PRESSED,&lt;br /&gt;
} controller_comm__message_type_e;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal of the controller_comm module was to provide a very abstract, easy-to-use interface that could easily be integrated into the game logic without having to understand in technicalities of the driver. As a result, the following simple APIs are exposed to the implementer.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
controller_comm_s controller_comm__init(controller_comm__role_e role, uart_e uart, gpio_s gpio_tx, gpio_s gpio_rx);&lt;br /&gt;
uint16_t controller_comm__get_player_1_accel();&lt;br /&gt;
uint16_t controller_comm__get_player_2_accel();&lt;br /&gt;
bool controller_com__get_player_1_button();&lt;br /&gt;
bool controller_com__get_player_2_button();&lt;br /&gt;
controller_comm__controller_tilt_e controller_comm__get_player_1_tilt();&lt;br /&gt;
controller_comm__controller_tilt_e controller_comm__get_player_2_tilt();&lt;br /&gt;
bool controller_comm__update_player_score(controller_comm__role_e player, uint16_t score);&lt;br /&gt;
void controller_comm__freertos_task(void *controller_comm_struct);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the Message Type, the Data Bytes of the frame represent different information. As described above, in the CONTROLLER_COMM__MESSAGE_TYPE_REQUEST_ACCEL_VAL message type, the data bytes represent the scores for both controller. In the CONTROLLER_COMM__MESSAGE_TYPE_SEND_ACCEL_VAL and CONTROLLER_COMM__MESSAGE_TYPE_SEND_ACCEL_VAL_BTN_PRESSED message types, the data bytes represent the 12 bit accelerometer values. When being sent, the driver decomposes the uint16_t accelerometer value and recombines in upon receipt. After the data bytes are received, a Stop Byte (0xAD)is sent. This further helps with synchronization and if any of the bytes timeout or the Stop Byte is not valid, the transaction is aborted and will be retriggered. The Master polls the controllers every 25ms and as a result, there is little to no latency between controller movement, score updates, and visual screen feedback.&lt;br /&gt;
&lt;br /&gt;
==== Tasks and Flow Control ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Cmpe244 f19 state machine.png|400px|thumb|center|'''State Machine''']]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Software Design in Display module:'''&lt;br /&gt;
&lt;br /&gt;
 '''Master Task:'''&lt;br /&gt;
* It controls the flow of the game.&lt;br /&gt;
* INIT_STATE  is the first state which creates all the tasks used in the game and then suspends them all till the controllers are connected.&lt;br /&gt;
* Once the controllers are connected then we move to state IN_PROGRESS_STATE.&lt;br /&gt;
* IN_PROGRESS_STATE takes care to resume the corresponding level tasks.&lt;br /&gt;
* The score update is checked here to automatically shift from one level to another.&lt;br /&gt;
* When a button provided on the controller is pressed then we move to the IN_PAUSE_STATE.&lt;br /&gt;
* IN_PAUSE_STATE the score is updated on the led matrix until the button on the controllers is pressed again.&lt;br /&gt;
* When the button on the controllers is pressed by both players to show that they are ready  we move to the IN_PROGRESS_STATE again.&lt;br /&gt;
&lt;br /&gt;
 '''Paddle Task:'''&lt;br /&gt;
* Individual paddle assigned to each player.&lt;br /&gt;
* Testing of the paddle movement was done initially using the switches.&lt;br /&gt;
* Controller accelerometer values supplied to the master using UART protocol were later used to control the movement of the paddle.&lt;br /&gt;
&lt;br /&gt;
 '''Ball Task:'''&lt;br /&gt;
* Ball task is designed to take into account the velocity, direction and movement of the ball in the upper and lower half of the matrix.&lt;br /&gt;
* It takes care of the cumulative score update and of restarting frame after each score update.&lt;br /&gt;
* The logic of varying the velocity and angle of the ball upon the collision with the paddle is implemented.&lt;br /&gt;
* If the paddle moves in the direction of the ball then the velocity of the ball is increased and decreased for the opposite case.&lt;br /&gt;
&lt;br /&gt;
  '''Pacman Task:'''&lt;br /&gt;
* Individual pacman task written for each level.&lt;br /&gt;
* Pacman in first level moves along the edges and moves randomly. Whenever the ball comes in contact with the pacman then the score of the corresponding player will be updated.&lt;br /&gt;
* Pacman in second level moves in the center  along x-axis of the side assigned to the opponent and takes into account the direction and speed of the ball. Whenever the ball comes in contact with the pacman then the score of the corresponding player will be updated.&lt;br /&gt;
* Pacman in third level moves in the the side assigned to the opponent in both x-axis and y-axis. It takes into account the direction and speed of the ball. Whenever the ball comes in contact with the pacman then the score of the corresponding player will be updated.&lt;br /&gt;
&lt;br /&gt;
 '''Controller Task:'''&lt;br /&gt;
* If the &amp;quot;role&amp;quot; parameter of the controller is Master, the task polls each controller for their accelerometer values while also updating their internal score states and receiving button states. It also verifies that the responses are legitimate before updating the internal states.&lt;br /&gt;
* If the &amp;quot;role&amp;quot; of the controller is Player 1 or Player 2, the task waits for requests from the Master node. Upon receiving this information, the task updates its internal states and writes this information to the 7-seg LED matrix. It then sends a proper response back to the master including accelerometer values and button press events.&lt;br /&gt;
&lt;br /&gt;
===== Code Snippet for score the update to the controller done by the Ball task: ===== &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 void set_players_score(uint8_t score_green, uint8_t score_blue) {&lt;br /&gt;
  uint16_t transfer_score = 0;&lt;br /&gt;
  green_player_score = score_green;&lt;br /&gt;
  blue_player_score = score_blue;&lt;br /&gt;
  transfer_score = (score_blue * 100) + score_green;&lt;br /&gt;
  printf(&amp;quot;Transfer Score = %i\n&amp;quot;, transfer_score);&lt;br /&gt;
  controller_comm__update_player_score(CONTROLLER_COMM__ROLE_PLAYER_2, transfer_score);&lt;br /&gt;
  controller_comm__update_player_score(CONTROLLER_COMM__ROLE_PLAYER_1, transfer_score);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===== Code Snippet for score the detecting collision with the pacman in Ball task: ===== &lt;br /&gt;
&lt;br /&gt;
    if (blue_collided == 1) {&lt;br /&gt;
      blue_collided = clear_blue_collided();&lt;br /&gt;
      score_blue += cummulative_score;&lt;br /&gt;
      set_players_score(score_green, score_blue);&lt;br /&gt;
      change_game_state_to = IN_SCORE_STATE;&lt;br /&gt;
      xQueueSend(*(ball_parameters.state_queue), &amp;amp;change_game_state_to, 0);&lt;br /&gt;
      cummulative_score = 1;&lt;br /&gt;
      SMACMAN__DEBUG_PRINTF(&amp;quot;BLUE player score: %d   GREEN player score: %d\n&amp;quot;, score_blue, score_green);&lt;br /&gt;
      set_blue_pacman_start();&lt;br /&gt;
      set_green_pacman_start();&lt;br /&gt;
      ball_setup(&amp;amp;ball);&lt;br /&gt;
    }&lt;br /&gt;
    if (green_collided == 1) {&lt;br /&gt;
      green_collided = clear_green_collided();&lt;br /&gt;
      score_green += cummulative_score;&lt;br /&gt;
      set_players_score(score_green, score_blue);&lt;br /&gt;
      change_game_state_to = IN_SCORE_STATE;&lt;br /&gt;
      xQueueSend(*(ball_parameters.state_queue), &amp;amp;change_game_state_to, 0);&lt;br /&gt;
      cummulative_score = 1;&lt;br /&gt;
      SMACMAN__DEBUG_PRINTF(&amp;quot;BLUE player score: %d   GREEN player score: %d\n&amp;quot;, score_blue, score_green);&lt;br /&gt;
      set_blue_pacman_start();&lt;br /&gt;
      set_green_pacman_start();&lt;br /&gt;
      ball_setup(&amp;amp;ball);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=='''Game Casing''' ==&lt;br /&gt;
&lt;br /&gt;
Smacman is a two Player game. It is quiet inconvinient to play the game with all the wires and components lying around. So to facilitate this we 3D printed a basic enclosure for the two players controller as well as the Led matrix, which is big enough to accommodate zigbee module, MP3 Decoder and speakers, Master Board. We needed to put together all components in a single enclosure. The enclosure includes the spacing for SJTWO board with PCB mounted on top and the MP3 Decoder along with speakers.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Smacman_enclosure.jpeg|350px|thumb|left|Case Design]]&lt;br /&gt;
|[[File:casing.jpeg|350px|thumb|left|Casing]]&lt;br /&gt;
|[[File:circuit_diagram_enclosure.jpeg|350px|thumb|left|Circuit Along with all the components]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:enclosure_case.jpeg|400px|thumb|center|Entire Game Casing]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:GIF-2019-12-18-08-45-17.gif|160px|thumb|'''Pacman Movement Testing''']]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Issues, Challenges and solutions to get past them===&lt;br /&gt;
&lt;br /&gt;
'''1.  RGB LED Matrix Display driver'''&lt;br /&gt;
&lt;br /&gt;
a) Setting up the LED Matrix was a bit of a challenge. Started with glowing a single row and column. Getting the initial hold on the exact row and column position was a bit tricky as one can easily get confuse on the starting and ending row and column. Once we got over it we moved on to design game objects separately.&lt;br /&gt;
 &lt;br /&gt;
b) Flickering of led matrix was solved by doing the following: &lt;br /&gt;
* The frequency of refreshing the led matrix was increased to show smooth transition from one frame to another. &lt;br /&gt;
* Led matrix is very sensitive to the inputs provided to it. Initially the flickering was thought to be because of the data lines and row selection lines. But later with further diagnoses it was discovered that the power supply line was creating issues. Changing the adapter eliminated the flickering.&lt;br /&gt;
&lt;br /&gt;
c) As the game consists of many objects that exist simultaneously on the screen clearing the trail of each object was bit of a problem. &lt;br /&gt;
*Initially clearing the LED matrix  from time to time assigned to one task. But later each object dealt with its own clearance, which eliminated the effect of clearance of one object   with the display of other objects.&lt;br /&gt;
&lt;br /&gt;
d) Pacman and Ball detection of the bounadry:&lt;br /&gt;
*  Pacman object detecting the boundary and making the decision of moving left or right was a bit tricky. Started with one boundary condition and then proceeded with the rest boundary conditions.&lt;br /&gt;
&lt;br /&gt;
e) Updating the movement of each object on the LED matrix was clumsy in the beginning as individual objects where updated as soon as a movement was detected in the object.&lt;br /&gt;
* But when the frequency of refreshing rate was increased the update of the LED matrix was moved to one task which led to the smooth movement of the objects on the screen.&lt;br /&gt;
&lt;br /&gt;
e) The varying Pacman velocity with the ball movement in the lower and the upper half of the matrix was difficult.&lt;br /&gt;
* Set and get functions are used to get the updated position of the ball for each movement.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[File:game_image.jpeg|350px|thumb|left|Game Frame]]&lt;br /&gt;
|[[File:score.jpeg|350px|thumb|left|Score]]&lt;br /&gt;
|[[File:ball_testing.gif|350px|thumb|left|Ball Testing]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
'''2. Challenges in  the designing of the controller modules for the paddle movement and to get score from the master'''&lt;br /&gt;
&lt;br /&gt;
a) SJ2 UART frames were corrupted while sending over XBEE.&lt;br /&gt;
*  The XBEE firmware parameters had to be carefully calibrated to match the SJ2 as well as using a 38400 bps bit rate. The SJ2 UART driver had to be slightly modified match as well.&lt;br /&gt;
b) UART is not meant to be a broadcast protocol.&lt;br /&gt;
*  A custom wireless broadcast/multi-node wireless protocol and driver had to be designed to be robust with dropped frames and packets being handled gracefully. (Described above)&lt;br /&gt;
&lt;br /&gt;
'''3. Designing the MP3 Decoder'''&lt;br /&gt;
&lt;br /&gt;
a) Earlier we used the ssp2 Driver written by Preet for SPI interfacing to write the data to MP3 Decoder. but somehow we were not able to detect the slave properly because of which we could not communicate with the decoder.&lt;br /&gt;
*  Resolution : We wrote our own simple SPI driver which sends the data to the MP3 Decoder for playing the music in background.&lt;br /&gt;
b) While reading data from the SD Card sometimes we faced few  issues like hardware error occured in disk i/o and physical drive cannot work.&lt;br /&gt;
*  Resolution : The default driver was using mount later option for SD Card we changed it to mount immediately and the issue got resolved.&lt;br /&gt;
&lt;br /&gt;
'''4. Dimensions of power pins for the PCB design'''&lt;br /&gt;
&lt;br /&gt;
a) Accommodate the exact dimensions of the 5V Power pin on the PCB design.&lt;br /&gt;
*  Since there is no datasheet available for the 64x64 RGB LED Matrix, hence it was a difficult task. We used a basic approximation to determine the pin dimensions that would fit inside the PCB design such that it works just fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''4. Integration Issues'''&lt;br /&gt;
a) Controller Logic and Game Logic were developed independently.&lt;br /&gt;
*  Careful time and consideration had to be taken to ensure that the APIs were able to be stitched together. This actually ended up going smoother than we had anticipated. The Inter-board communication driver was designed to handle almost everything regarding the controllers, providing very abstract and simple APIs. This allowed for relatively smooth integration.&lt;br /&gt;
b) After game and controller logic, the main SJ2 did not have enough processing power to adequately driver the music functionality.&lt;br /&gt;
*  A standalone SJ2 board was used for the game soundtrack. This eased the load on our main board which was starting to effect our gameplay.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
At the start, the concepts that we aimed to implement were not trivial but if accomplished, would lead to an awesome project. We realized early on that each one of us had particular strengths and that it would be critical for us to leverage these effectively. We effectively parallelized our tasks and made sure to regularly synchronize to avoid accruing too much technical debt. In the end, we were able to accomplish more features than we had initially devised. This project has helped us to gain more practical exposure to building a real time embedded systems and decompose and solve new problems that don't come from a textbook. We are thankful to Preet, who motivated and guided us through out the course work. This is surely going to help us for our interview preparation and in grabbing an internship.&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
[https://youtu.be/Yq6fab3F3GU Project Testing Video]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/LsbX-s07nsg Project Video Link]&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://github.com/nickschiffer/Smacman Github Source Code Link]&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
We would like to thank our Professor Preetpal Kang for all his awesome lectures and explanations of the embedded system topics, they could not have been explained any better than this! Not only did we enjoy working on this project but it also gave us an overall learning experience and precious life lessons. The extra knowledge in Preet's Class is surely going to help us to prepare for our interview preparations. We would also like to thank the ISA members for always being around and ready for helping whenever required.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
====== WIRELESS CONTROLLER ======&lt;br /&gt;
*  [https://www.digi.com/pdf/ds_xbeemultipointmodules.pdf XBEE S1 Datasheet]&lt;br /&gt;
*  [https://cdn-shop.adafruit.com/datasheets/ht16K33v110.pdf HT16K33 I2C 7-seg backpack datasheet]&lt;br /&gt;
&lt;br /&gt;
====== MP3 DECODER ======&lt;br /&gt;
*  [https://cdn-shop.adafruit.com/datasheets/vs1053.pdf Datasheet For MP3 Decoder VS1053]&lt;br /&gt;
*  [https://github.com/nickschiffer/MP3_Player_RTOS/tree/master/projects/MP3_Player/L5_Application/MP3_DECODER Code Reference]&lt;br /&gt;
&lt;br /&gt;
====== RGB LED Matrix Interfacing and Designing ======&lt;br /&gt;
*  [https://cdn.sparkfun.com/assets/7/d/7/5/6/M6464-P3.pdf Datasheet and LED Matrix parameters]&lt;br /&gt;
*  [https://learn.adafruit.com/32x16-32x32-rgb-led-matrix Power and pin connections]&lt;br /&gt;
*  [https://bikerglen.com/projects/lighting/led-panel-1up/ Reference for setting up and testing LED Matrix]&lt;br /&gt;
* [http://socialledge.com/sjsu/index.php/F18:_2048 Reference for LED Matrix driver]&lt;br /&gt;
&lt;br /&gt;
====== General/Miscellaneous ======&lt;br /&gt;
*  [http://www.espruino.com/Pixl.js+Pong Pong Game Tutorial]&lt;br /&gt;
*  [https://www.freertos.org/Documentation/RTOS_book.html FreeRTOS Documentation and Reference Manual]&lt;br /&gt;
*  [https://sjsu-dev2.readthedocs.io/en/latest/?badge=latest SJTwo-c Documentation]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F19:_Smacman&amp;diff=55916</id>
		<title>F19: Smacman</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F19:_Smacman&amp;diff=55916"/>
				<updated>2019-10-09T03:18:02Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;=== Grading Criteria === &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; *  How well is Software &amp;amp; Hardware Design described? *  How well can this report be used to reproduce this project? *  Code Quali...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
This section should be a couple lines to describe what your project does.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Yaron Alexandrovich&lt;br /&gt;
**   &lt;br /&gt;
*  Emil Kurian&lt;br /&gt;
**   &lt;br /&gt;
*  Gerard Ramos&lt;br /&gt;
**   &lt;br /&gt;
*  Fred Sun&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
Show a simple table or figures that show your scheduled as planned before you started working on the project.  Then in another table column, write down the actual schedule so that readers can see the planned vs. actual goals.  The point of the schedule is for readers to assess how to pace themselves if they are doing a similar project.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Actual&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/8&lt;br /&gt;
| Task list&lt;br /&gt;
| Completed?  Problems Encountered?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=55915</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=55915"/>
				<updated>2019-10-09T03:17:23Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /*  Fall 2019 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2019 | Fall 2019]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F19: Infinity Mirror]]&lt;br /&gt;
*  [[F19: Smacman]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
*  [[F18: Zero Zero UFO]]&lt;br /&gt;
*  [[F18: Goals of Glory]]&lt;br /&gt;
*  [[F18: Spartan Warrior]]&lt;br /&gt;
*  [[F18: Wireless sensor network]]&lt;br /&gt;
*  [[F18: baem geim]]&lt;br /&gt;
*  [[F18: Hit the Balloon]]&lt;br /&gt;
*  [[F18: 2048]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=S19:_CANT_Bus&amp;diff=55889</id>
		<title>S19: CANT Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=S19:_CANT_Bus&amp;diff=55889"/>
				<updated>2019-05-29T16:37:52Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Grading Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [C]ompile [A]nother [N]on-[T]rivial Bus ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
Design and implement an autonomous car to navigate to a destined location chosen by the user using a phone application. The user will set gps coordinates via an Android application while the current location is processed. The RC car should be able to use these coordinates to navigate itself to the destined location avoiding obstacles and providing useful data on the way. Several objectives need to be completed in order for the RC car to function properly: integrate proximity sensors, gps, compass, lcd screen, motor driver board, esp32 communication, hall sensor, and overall integration in order for the RC car to be able to determine where it is, the speed it's going, and the environment around it to successfully navigate to the final destination.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this project was to convert a RC car into a self driving vehicle that can navigate itself to a destination sent via an Android mobile app. To achieve this, the project was divided into 7 modules: Avoidance, Motor, Master Driver, Localize, Comms, and Android Application. The Avoidance module contains 8 IR sensors that allow the car to see the world around it. This module finds objects and measures the distance between it and the object. Motor controls a brushed motor which drives the car at various speeds and a servo to turn the car. In addition, Motor also contains a hall effect sensor that keeps track of the cars speed. Localize tells the car where it is in relation to where it needs to go. It contains a GPS and Compass to provide current coordinates and heading. Comms houses the wireless device that talks to the the mobile app as well as an LCD display to show various car data such as speed and destination. The mobile app is where the user can enter GPS coordinates as a destination point, or alter the current destination with a way-point. Lastly, the Driver receives the data from all modules and decides how the car shall react. In order to complete these modules basic knowledge of I2C, UART, SPI, and CAN bus protocols, gpio control, PWM control, phone application development, and pathing algorithms was required. While each peripheral in the modules used their own form of communication, each of the modules was connected using the CAN bus protocol.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
* Kevin Chan&lt;br /&gt;
** IR sensors (Proximity), Compass (Localize), GPS (Localize), Distance Vector (Localize), Code Review&lt;br /&gt;
* Khrysta Finch&lt;br /&gt;
** Chassis, Driver (Driver), LCD display (Comms), Schematic, Telemetry (Comms)&lt;br /&gt;
* Andrew Javier&lt;br /&gt;
** Hall Sensor (Motor), Wireless communications via esp32(Comms), GPS (Localize), Chassis&lt;br /&gt;
* Aaron Lee&lt;br /&gt;
** GPS (Localize), Pathing Algorithm (Comms)&lt;br /&gt;
* Jonathan Rojas&lt;br /&gt;
** Motor (Motor), Servo (Motor), Motor driver board (Motor), hall sensor (Motor), Cable Management, Chassis  &lt;br /&gt;
* Vijay Vanapalli&lt;br /&gt;
** GPS (Localize), Wireless communications via esp32(Comms), Mobile app (Comms)&lt;br /&gt;
* Nelson Wong&lt;br /&gt;
** Team Leader, Driver (Driver), Telemetry (Comms), PCB/Schematic, Chassis, Mobile App (Comms), Power, Code Review&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Source Code ====&lt;br /&gt;
[https://gitlab.com/cant-bus/cant-bus Gitlab Project Link]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Modules ====&lt;br /&gt;
* Driver&lt;br /&gt;
** [https://gitlab.com/ntwong0 Nelson Wong]&lt;br /&gt;
** [https://gitlab.com/diarmadhi Khrysta Finch]&lt;br /&gt;
&lt;br /&gt;
* Proximity&lt;br /&gt;
** [https://gitlab.com/kmchan15 Kevin Chan]&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** [https://gitlab.com/rojasjon28 Jonathan Rojas]&lt;br /&gt;
** [https://gitlab.com/diarkia124 Andrew Javier]&lt;br /&gt;
&lt;br /&gt;
* Localize&lt;br /&gt;
** [https://gitlab.com/VijayVanapalli96 Vijay Vanapalli]&lt;br /&gt;
** [https://gitlab.com/lee_aaron Aaron Lee]&lt;br /&gt;
** Andrew Javier&lt;br /&gt;
** Kevin Chan&lt;br /&gt;
&lt;br /&gt;
* Comms&lt;br /&gt;
** Andrew Javier&lt;br /&gt;
** [https://github.com/vijayvanapalli96/Final243App Vijay Vanapalli]&lt;br /&gt;
** Khrysta Finch&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Vijay Vanapalli&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Kevin Chan&lt;br /&gt;
** Nelson Wong&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
This table can also be viewed via Google Sheets! See the link below: &amp;lt;br/&amp;gt;&lt;br /&gt;
https://docs.google.com/spreadsheets/d/e/2PACX-1vRTGqwTD1WUlk0iwc0aE7aUkm7tKkvBp_5hJzrN4vy-xIHmjlPB3w5mEW0cC7l0UEJme_YXMzd_bB6A/pubhtml?gid=2009649579&amp;amp;single=true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|  ||  ||  ||  || Task Contributors ||  ||  ||  ||  ||  ||  || Date ||  || &lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| WBS# || Task Title || Dependencies ||  || Jonathan || Kevin || Andrew || Khrysta || Nelson || Aaron || Vijay || Start || End || Status&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Determine theory of operations ||  ||  || x || x || x || x || x || x || x || 3/19 || 4/1 || &lt;br /&gt;
|-&lt;br /&gt;
| 1.1 || Compass ||  ||  ||  ||  ||  ||  || x || x ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.2 || GPS ||  ||  ||  ||  ||  ||  || x || x ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.3 || Proximity ||  ||  ||  || x ||  ||  || x ||  ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.4 || LIDAR ||  ||  ||  || x ||  ||  || x ||  ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.5 || Wireless ||  ||  ||  ||  || x ||  || x ||  || x || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.6 || LCD ||  ||  ||  ||  ||  || x ||  ||  ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.7 || Hall Effect Sensors ||  ||  ||  ||  || x ||  ||  ||  ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.8 || Motor ||  ||  || x ||  ||  ||  || x ||  ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.9 || Steering ||  ||  || x ||  ||  ||  || x ||  ||  || 3/19 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.10 || Battery health ||  ||  ||  ||  ||  ||  || x ||  ||  || 3/19 || 4/1 || Cancelled&lt;br /&gt;
|-&lt;br /&gt;
| 1.11 || Mobile app ||  ||  ||  ||  ||  ||  || x || x || x || 3/28 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.12 || Wireless module ||  ||  ||  ||  || x ||  || x ||  || x || 3/28 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 1.13 || Driver ||  ||  ||  ||  ||  || x || x ||  ||  || 3/19 || 4/6 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Chassis and mounting ||  ||  ||  ||  ||  || x || x ||  ||  || 5/1 || 5/7 || &lt;br /&gt;
|-&lt;br /&gt;
| 2.1 || Acrylic to chassis ||  ||  ||  ||  ||  || x ||  ||  ||  || 4/1 || 4/4 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2.2 || PCB to acrylic || 3.5 ||  ||  ||  ||  || x || x ||  ||  || 4/25 || 4/28 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2.3 || SJ One to acrylic ||  ||  ||  ||  ||  || x ||  ||  ||  || 4/25 || 5/7 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2.4 || Power modules to acrylic || 3.2 ||  ||  ||  ||  || x || x ||  ||  || 4/25 || 5/7 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2.5 || Proximity to acrylic ||  ||  ||  ||  ||  || x ||  ||  ||  || 4/25 || 5/7 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2.6 || Magnet collet to motor shaft ||  ||  ||  ||  ||  || x ||  ||  ||  || 4/18 || 4/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 2.7 || Hall effect sensor to chassis ||  ||  ||  ||  ||  || x ||  ||  ||  || 4/18 || 4/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PCB and assembly ||  ||  || x || x || x || x || x || x || x || 3/5 || 4/25 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.1 || Finalize BOM ||  ||  || x || x || x || x || x || x || x || 3/5 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.2 || Determine module footprints ||  ||  ||  ||  ||  || x || x || x || x || 3/28 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.3 || Finalize schematic ||  ||  ||  ||  ||  ||  || x ||  || x || 4/1 || 4/9 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.4 || Review schematic ||  ||  ||  ||  ||  || x || x ||  || x || 4/1 || 4/10 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.5 || Finalize layout ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/1 || 4/9 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.6 || Review layout ||  ||  ||  ||  ||  || x || x ||  || x || 4/1 || 4/10 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.7 || Order PCB ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/10 || 4/24 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.8 || PCB assembly ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/23 || 4/25 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 3.9 || Assembly of modules ||  ||  || x || x || x || x || x || x ||  || 4/23 || 4/25 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ECU Logic ||  ||  || x || x || x || x || x || x || x || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.1 || MOTOR ||  ||  || x || x || x ||  || x ||  ||  || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.1.1 || Tachometer logic ||  ||  ||  ||  || x ||  || x ||  ||  || 4/3 || 4/10 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.1.2 || Motor logic ||  ||  || x || x ||  ||  || x ||  ||  || 4/2 || 4/18 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.1.3 || Steering logic ||  ||  || x || x ||  ||  || x ||  ||  || 4/2 || 4/18 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.2 || COMMS ||  ||  ||  ||  || x || x || x ||  || x || 4/13 || 5/21 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.2.1 || Wireless logic ||  ||  ||  ||  || x ||  ||  ||  || x || 4/13 || 5/21 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.2.2 || LCD logic ||  ||  ||  ||  ||  || x ||  ||  ||  || 4/28 || 5/10 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.3 || LOCALIZE ||  ||  ||  ||  ||  ||  || x || x ||  || 5/22 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.3.1 || GPS logic ||  ||  ||  ||  ||  ||  || x || x ||  || 4/22 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.3.2 || Compass logic ||  ||  ||  || x ||  ||  || x || x ||  || 4/28 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.3.3 || GPS/Compass synthesis ||  ||  ||  || x ||  ||  ||  ||  ||  || 5/1 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.4 || AVOIDANCE ||  ||  ||  || x ||  ||  || x ||  ||  || 4/3 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.4.1 || LIDAR logic ||  ||  ||  || x ||  ||  || x ||  ||  || 4/3 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.4.2 || Proximity logic ||  ||  ||  || x ||  ||  || x ||  ||  || 4/3 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.4.3 || LIDAR/proximity synthesis ||  ||  ||  || x ||  ||  || x ||  ||  || 5/2 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.5 || DRIVER ||  ||  ||  ||  ||  || x || x ||  ||  || 4/1 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.5.1 || Battery health logic ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/15 || 4/17 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 4.5.2 || Driver logic ||  ||  ||  ||  ||  || x || x ||  ||  || 4/1 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Wireless module ||  ||  ||  ||  || x ||  || x ||  || x || 4/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 5.1 || Development environment ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/5 || 4/7 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 5.3 || Wifi connectivity ||  ||  ||  ||  || x ||  ||  ||  ||  || 4/5 || 4/7 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 5.4 || Handle XHR endpoints ||  ||  ||  ||  || x ||  ||  ||  ||  || 4/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 5.5 || Relay via UART ||  ||  ||  ||  || x ||  ||  ||  ||  || 4/5 || 4/29 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Mobile app ||  ||  ||  ||  ||  ||  || x || x || x || 4/1 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 6.2 || Send XHR requests ||  ||  ||  ||  ||  ||  ||  ||  || x || 4/1 || 4/29 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 6.3 || Google Maps Overlay ||  ||  ||  ||  ||  ||  ||  ||  || x || 4/1 || 4/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 6.4 || Show car icon ||  ||  ||  ||  ||  ||  ||  ||  || x || 4/15 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 6.5 || Show waypoints ||  ||  ||  ||  ||  ||  ||  ||  || x || 5/10 || 5/19 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 6.6 || Service button press as XHRs ||  ||  ||  ||  ||  ||  ||  ||  || x || 4/15 || 4/29 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Documentation ||  ||  ||  ||  ||  ||  || x ||  ||  || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.1 || Summary of individual contribution ||  ||  || x || x || x || x || x || x || x || 3/5 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.2 || Project wiki schedule ||  ||  ||  ||  || x ||  || x ||  ||  || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.3 || BOM ||  ||  || x || x || x || x || x || x || x || 3/5 || 4/5 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.4 || CAN comms: the dbc ||  ||  || x || x || x || x || x || x || x || 3/5 || 5/22 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.5 || MOTOR ||  ||  ||  ||  ||  ||  || x ||  ||  || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.1 || Theory of operation ||  ||  || x ||  || x || x || x ||  ||  || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.2 || Hardware design ||  ||  ||  ||  || x || x || x ||  ||  || 3/5 || 3/19 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.3 || Software design ||  ||  || x ||  ||  ||  ||  ||  ||  || 3/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.4 || Challenges ||  ||  || x ||  ||  ||  ||  ||  ||  || 5/22 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.6 || COMMS ||  ||  ||  ||  || x || x || x ||  || x || 4/28 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.1 || Theory of operation ||  ||  ||  ||  || x || x || x ||  || x || 4/28 || 5/1 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.2 || Hardware design ||  ||  ||  ||  ||  || x || x ||  ||  || 5/1 || 5/9 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.3 || Software design ||  ||  ||  ||  || x || x ||  ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.4 || Challenges ||  ||  ||  ||  || x || x ||  ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.7 || LOCALIZE ||  ||  ||  ||  ||  ||  || x || x ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.1 || Theory of operation ||  ||  ||  ||  ||  ||  || x || x ||  || 5/1 || 5/14 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.2 || Hardware design ||  ||  ||  ||  ||  ||  || x || x ||  || 5/2 || 5/14 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.3 || Software design ||  ||  ||  ||  ||  ||  || x || x ||  || 5/2 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.4 || Challenges ||  ||  ||  ||  ||  ||  ||  || x ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.8 || AVOIDANCE ||  ||  ||  || x ||  ||  || x ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.8.1 || Theory of operation ||  ||  ||  || x ||  ||  || x ||  ||  || 5/1 || 5/8 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.8.2 || Hardware design ||  ||  ||  ||  ||  ||  || x ||  ||  || 5/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.8.3 || Software design ||  ||  ||  || x ||  ||  || x ||  ||  || 5/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.8.4 || Challenges ||  ||  ||  || x ||  ||  || x ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.9 || DRIVER ||  ||  ||  ||  ||  || x || x ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.9.1 || Theory of operation ||  ||  ||  ||  ||  || x || x ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.9.2 || Hardware design ||  ||  ||  ||  ||  || x || x ||  ||  || 5/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.9.3 || Software design ||  ||  ||  ||  ||  || x || x ||  ||  || 5/5 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.9.4 || Challenges ||  ||  ||  ||  ||  || x ||  ||  ||  || 5/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.10 || Mobile app ||  ||  ||  ||  ||  ||  || x || x || x || 4/18 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.10.1 || Theory of operation ||  ||  ||  ||  ||  ||  || x || x || x || 4/18 || 5/20 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.10.2 || Software design ||  ||  ||  ||  ||  ||  ||  ||  || x || 4/20 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.10.3 || Challenges ||  ||  ||  ||  ||  ||  ||  ||  || x || 4/18 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.11 || Overall PCB ||  ||  ||  ||  ||  ||  || x || x || x || 3/18 || 4/25 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.11.1 || Hardware design ||  ||  ||  ||  ||  ||  || x || x || x || 3/18 || 4/25 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.11.2 || Challenges ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/7 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 7.12 || Videography ||  ||  ||  ||  || x ||  || x ||  ||  || 5/23 || 5/23 || In Progress&lt;br /&gt;
|-&lt;br /&gt;
| 7.13 || Conclusion ||  ||  || x || x || x || x || x || x || x || 5/23 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Supervision/Advisory ||  ||  || x || x || x || x || x || x || x || 4/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 8.1 || Maintain knowledge of system architecture ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 8.2 || Assert code review ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 8.3 || Define system test approach ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 8.4 || Enforce coding style and practice ||  ||  ||  ||  ||  ||  || x ||  ||  || 4/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 8.5 || Tracking project deliverables ||  ||  || x || x || x || x || x || x || x || 4/1 || 5/23 || Done&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Final Demonstration ||  ||  || x || x || x || x || x || x || x || 5/22 || 5/23 || Done&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Cobra [https://www.amazon.com/gp/product/B076P84HM4/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&amp;amp;psc=1]&lt;br /&gt;
| 1&lt;br /&gt;
| $180.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers SN65HVD230&lt;br /&gt;
| Microchip [https://www.amazon.com/SN65HVD230-CAN-Board-Communication-Development/dp/B00KM6XMXO]&lt;br /&gt;
| 5&lt;br /&gt;
| $10&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
| LSM303 Compass&lt;br /&gt;
| Adafruit [https://www.adafruit.com/product/1120]&lt;br /&gt;
| 1&lt;br /&gt;
| $15&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
| ublox Neo-6m GPS&lt;br /&gt;
| Ublox [https://www.amazon.com/dp/B01H5FNA4K]&lt;br /&gt;
| 1&lt;br /&gt;
| $16&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
| Proximity Sensors - VL53L0X&lt;br /&gt;
| ST [https://www.adafruit.com/product/3317]&lt;br /&gt;
| 8&lt;br /&gt;
| $120&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
| Hall Effect Sensors&lt;br /&gt;
| Adafruit [https://www.amazon.com/gp/product/B008AS2YBM/]&lt;br /&gt;
| 3&lt;br /&gt;
| $24&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
| LiPo Batteries (3S 11.1V 5500 mAh)&lt;br /&gt;
| FLOUREON [https://www.amazon.com/dp/B06Y5ZGQB2]&lt;br /&gt;
| 2&lt;br /&gt;
| $34&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
| Printed Circuit Board&lt;br /&gt;
| Bay Area Circuits&lt;br /&gt;
| 1&lt;br /&gt;
| $60&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
| ESP32 Wireless Module&lt;br /&gt;
| Espressif [https://www.aliexpress.com/item/-/32885906652.html]&lt;br /&gt;
| 1&lt;br /&gt;
| $5&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
| Power Management Integrated Circuit (PMIC) &lt;br /&gt;
| Amazon [https://www.amazon.com/dp/B079N9BFZC]&lt;br /&gt;
| 1&lt;br /&gt;
| $12&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
| 2.2&amp;quot; TFT LCD display &lt;br /&gt;
| Adafruit [https://www.adafruit.com/product/1480]&lt;br /&gt;
| 1&lt;br /&gt;
| $25&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
We used the online tool Upverter to create our schematic and design the final PCB board. Both schematic and board can be found on Upverter using the link below.&lt;br /&gt;
&lt;br /&gt;
[https://upverter.com/eda/#designId=6fb74efa3ccbbaa4,tool=pcb PCB and Schematic]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
=== CAN BUS Messages ===&lt;br /&gt;
The DBC file that was used to generate our CAN messages can be found [[#CAN DBC File|below]]. Each message has a priority ID assigned to it that is used by the CAN protocol to see which device to listen to first in cases of bus arbitration; the lower the ID number the higher priority it has. In our case, the message with the highest priority at 10 is KILL_MOTOR. Since we are using LiPO (Lithium Polymer) batteries, the desire to disconnect all power for the battery depleted was high on the list. Should the car be driving at that time, the KILL_MOTOR_cmd shuts off the motor immediately, allowing us to catch up to the car and swap out batteries. The KILL_MOTOR_REMOTE message follows the KILL_MOTOR message in priority. This is simply a redundancy we built in to have the message delivered to the mobile app and notifying us that the battery is low. &lt;br /&gt;
&lt;br /&gt;
The priority decreases from there with HEARTBEAT from the Driver being the next highest. Since the Driver doesn't send many messages and it's there to collect data from all the other modules, it needs to let the others know it's still available. MOTOR_CMD follows as we wanted the car to move as quickly as possible, which leads to AVOIDANCE_LIDAR as the next highest. Knowing when we were in close proximity to an object is key to making sure we don't run into it. Note that while this message has &amp;quot;LIDAR&amp;quot; as part of the name, this is legacy nomenclature from when we initially had LIDAR for the car. They are now IR sensors. &lt;br /&gt;
&lt;br /&gt;
GPS, Compass, and Speed were assigned the lowest priorities. While knowing where we are in relation to where we are going is important, it was less demanding that knowing if we are about to hit something or if the battery was depleted. Overall, this choice in priority has served well in providing a functional autonomous car.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
Each of the modules are connected to a CAN transceiver via transmit and receive lines. The transceivers themselves are connected together through their CAN high and low pins (CANH/CANL) with each of those lines terminating with a 120 ohm resistor. &lt;br /&gt;
[[File:CANT_bus_hardware.png|thumb|400px|center|Figure 1: CAN bus architecture design]]&lt;br /&gt;
&lt;br /&gt;
==== CAN DBC File ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
BS_:&lt;br /&gt;
BU_: COMMS DRIVER LOCALIZE MOTOR AVOIDANCE&lt;br /&gt;
&lt;br /&gt;
BO_ 10 KILL_MOTOR: 1 DRIVER&lt;br /&gt;
 SG_ KILL_MOTOR_cmd : 0|8@1+ (1,0) [0|0] &amp;quot;&amp;quot; MOTOR,COMMS&lt;br /&gt;
 &lt;br /&gt;
BO_ 11 KILL_MOTOR_REMOTE: 1 COMMS&lt;br /&gt;
 SG_ KILL_MOTOR_cmd : 0|8@1+ (1,0) [0|0] &amp;quot;&amp;quot; DRIVER &lt;br /&gt;
 &lt;br /&gt;
BO_ 100 DRIVER_HEARTBEAT: 1 DRIVER&lt;br /&gt;
 SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] &amp;quot;&amp;quot; LOCALIZE,COMMS,AVOIDANCE,MOTOR &lt;br /&gt;
 &lt;br /&gt;
BO_ 101 MOTOR_CMD: 2 DRIVER&lt;br /&gt;
 SG_ MOTOR_CMD_steer : 0|3@1+ (1,-1) [-1|1] &amp;quot;degrees&amp;quot; MOTOR&lt;br /&gt;
 SG_ MOTOR_CMD_drive : 8|4@1+ (1,-2) [-2|5] &amp;quot;&amp;quot; MOTOR&lt;br /&gt;
 &lt;br /&gt;
BO_ 102 DRIVER_STATUS: 1 DRIVER&lt;br /&gt;
 SG_ DRIVER_STATUS_enum : 0|3@1+ (1,0) [0|0] &amp;quot;&amp;quot; COMMS&lt;br /&gt;
 &lt;br /&gt;
BO_ 200 AVOIDANCE_LIDAR: 8 AVOIDANCE&lt;br /&gt;
 SG_ LIDAR_f_right : 0|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_f_m_right : 8|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_f_middle : 16|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_f_m_l : 24|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_f_left : 32|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_b_right : 40|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_b_middle : 48|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
 SG_ LIDAR_b_left : 56|8@1+ (1,0) [0|0] &amp;quot;cm&amp;quot; DRIVER&lt;br /&gt;
&lt;br /&gt;
BO_ 201 DESIRED_VECTOR: 8 LOCALIZE&lt;br /&gt;
 SG_ DESIRED_HEADING : 0|32@1+ (0.1,0) [0|360.0] &amp;quot;degrees&amp;quot; DRIVER,COMMS&lt;br /&gt;
 SG_ DESIRED_DISTANCE : 32|32@1+ (0.00001,0) [0|0] &amp;quot;km&amp;quot; DRIVER,COMMS&lt;br /&gt;
&lt;br /&gt;
BO_ 300 LOCALIZE_GPS: 8 LOCALIZE&lt;br /&gt;
 SG_ GPS_STATUS : 0|8@1+ (1,0) [0|0] &amp;quot;&amp;quot; DRIVER,COMMS&lt;br /&gt;
 SG_ GPS_TX_LATITUDE : 8|24@1+ (0.000001,37.000000) [37.000000|38.000000] &amp;quot;degrees&amp;quot; DRIVER,COMMS&lt;br /&gt;
 SG_ GPS_TX_LONGITUDE : 32|32@1- (0.000001,-122.000000) [-122.000000|-121.000000] &amp;quot;degrees&amp;quot; DRIVER,COMMS&lt;br /&gt;
&lt;br /&gt;
BO_ 301 LOCALIZE_IMU: 8 LOCALIZE&lt;br /&gt;
 SG_ IMU_STATUS : 0|8@1+ (1,0) [0|0] &amp;quot;&amp;quot; DRIVER,COMMS&lt;br /&gt;
 SG_ IMU_COMPASS : 8|12@1+ (0.1,0) [0|360.0] &amp;quot;degrees&amp;quot; DRIVER,COMMS&lt;br /&gt;
 &lt;br /&gt;
BO_ 302 SPEED: 8 LOCALIZE&lt;br /&gt;
 SG_ SPEED_kph : 0|16@1- (0.001,0) [-5|10] &amp;quot;kph&amp;quot; COMMS,DRIVER&lt;br /&gt;
&lt;br /&gt;
BO_ 303 LOCALIZE_IMU_DEBUG: 8 LOCALIZE&lt;br /&gt;
 SG_ IMU_COMPASS_X : 0|10@1- (1,0) [-200|200] &amp;quot;&amp;quot; DBG&lt;br /&gt;
 SG_ IMU_COMPASS_Y : 10|10@1- (1,0) [-200|200] &amp;quot;&amp;quot; DBG&lt;br /&gt;
&lt;br /&gt;
BO_ 400 MOTOR_STATUS: 1 MOTOR&lt;br /&gt;
 SG_ MOTOR_STATUS_data : 0|8@1+ (1,0) [0|0] &amp;quot;&amp;quot; COMMS,DRIVER&lt;br /&gt;
 &lt;br /&gt;
BO_ 500 SET_WAYPOINT: 8 COMMS&lt;br /&gt;
 SG_ SET_WAYPOINT_LAT : 0|24@1+ (0.000001,37.331610) [37.331610|37.340132] &amp;quot;degrees&amp;quot; LOCALIZE,DRIVER&lt;br /&gt;
 SG_ SET_WAYPOINT_LONG : 24|24@1- (0.000001,-121.886025) [-121.886025|-121.876412] &amp;quot;degrees&amp;quot; LOCALIZE,DRIVER&lt;br /&gt;
&lt;br /&gt;
BO_ 501 SET_STATUS: 1 COMMS&lt;br /&gt;
 SG_ SET_STATUS_enum : 0|2@1+ (1,0) [0|0] &amp;quot;&amp;quot; DRIVER&lt;br /&gt;
&lt;br /&gt;
BO_ 700 DRIVER_DEBUG: 8 DRIVER&lt;br /&gt;
 SG_ VEL_ARR : 0|32@1+ (1,0) [0|0] &amp;quot;&amp;quot; AVOIDANCE&lt;br /&gt;
&lt;br /&gt;
BO_ 701 AVOIDANCE_DEBUG: 8 AVOIDANCE&lt;br /&gt;
 SG_ AVOIDANCE_COUNT : 0|32@1+ (1,0) [0|0] &amp;quot;&amp;quot; DRIVER&lt;br /&gt;
&lt;br /&gt;
BO_ 702 MOTOR_DEBUG: 4 MOTOR&lt;br /&gt;
 SG_ MOTOR_SPEED_DBG : 0|32@1+ (0.0001,0) [0|0] &amp;quot;ms&amp;quot; DRIVER&lt;br /&gt;
&lt;br /&gt;
BO_ 704 TACHOMETER_DEBUG: 8 LOCALIZE&lt;br /&gt;
 SG_ TACHOMETER_DBG : 0|16@1- (0.001,0) [-5|10] &amp;quot;kph&amp;quot; COMMS,DRIVER&lt;br /&gt;
&lt;br /&gt;
CM_ BU_ DRIVER &amp;quot;The driver controller driving the car&amp;quot;;&lt;br /&gt;
CM_ BU_ MOTOR &amp;quot;The motor controller of the car&amp;quot;;&lt;br /&gt;
CM_ BU_ LOCALIZE &amp;quot;The localization controller of the car&amp;quot;;&lt;br /&gt;
CM_ BU_ AVOIDANCE &amp;quot;The collision avoidance controller of the car&amp;quot;;&lt;br /&gt;
CM_ BU_ COMMS &amp;quot;The wireless comms and telemetry controller of the car&amp;quot;;&lt;br /&gt;
CM_ BO_ 100 &amp;quot;Sync message used to synchronize the controllers&amp;quot;;&lt;br /&gt;
CM_ BO_ 501 &amp;quot;0: stop, 1: ready, 2: navigate, 3: skip/next&amp;quot;&lt;br /&gt;
BA_DEF_ &amp;quot;BusType&amp;quot; STRING ;&lt;br /&gt;
BA_DEF_ BO_ &amp;quot;GenMsgCycleTime&amp;quot; INT 0 0;&lt;br /&gt;
BA_DEF_ SG_ &amp;quot;FieldType&amp;quot; STRING ;&lt;br /&gt;
BA_DEF_DEF_ &amp;quot;BusType&amp;quot; &amp;quot;CAN&amp;quot;;&lt;br /&gt;
BA_DEF_DEF_ &amp;quot;FieldType&amp;quot; &amp;quot;&amp;quot;;&lt;br /&gt;
BA_DEF_DEF_ &amp;quot;GenMsgCycleTime&amp;quot; 0;&lt;br /&gt;
BA_ &amp;quot;GenMsgCycleTime&amp;quot; BO_ 500 100;&lt;br /&gt;
BA_ &amp;quot;GenMsgCycleTime&amp;quot; BO_ 100 1000;&lt;br /&gt;
BA_ &amp;quot;GenMsgCycleTime&amp;quot; BO_ 101 100;&lt;br /&gt;
BA_ &amp;quot;GenMsgCycleTime&amp;quot; BO_ 400 100;&lt;br /&gt;
BA_ &amp;quot;GenMsgCycleTime&amp;quot; BO_ 200 100;&lt;br /&gt;
BA_ &amp;quot;FieldType&amp;quot; SG_ 102 DRIVER_STATUS_enum &amp;quot;DRIVER_STATUS_enum&amp;quot;;&lt;br /&gt;
BA_ &amp;quot;FieldType&amp;quot; SG_ 103 SET_STATUS_enum &amp;quot;SET_STATUS_enum&amp;quot;; &lt;br /&gt;
BA_ &amp;quot;FieldType&amp;quot; SG_ 500 DBC_TEST1_enum &amp;quot;DBC_TEST1_enum&amp;quot;;&lt;br /&gt;
BA_ &amp;quot;FieldType&amp;quot; SG_ 100 DRIVER_HEARTBEAT_cmd &amp;quot;DRIVER_HEARTBEAT_cmd&amp;quot;;&lt;br /&gt;
VAL_ 102 DRIVER_STATUS_enum 7 &amp;quot;STOP&amp;quot; 6 &amp;quot;FWD_R&amp;quot; 5 &amp;quot;REV_R&amp;quot; 4 &amp;quot;REV_M&amp;quot; 3 &amp;quot;REV_L&amp;quot; 2 &amp;quot;FWD_L&amp;quot; 1 &amp;quot;FWD_M&amp;quot; 0 &amp;quot;IDLE&amp;quot; ;&lt;br /&gt;
VAL_ 103 SET_STATUS_enum 1 &amp;quot;GO&amp;quot; 0 &amp;quot;STOP&amp;quot; ;&lt;br /&gt;
VAL_ 500 DBC_TEST1_enum 2 &amp;quot;DBC_TEST1_enum_val_two&amp;quot; 1 &amp;quot;DBC_TEST1_enum_val_one&amp;quot; ;&lt;br /&gt;
VAL_ 100 DRIVER_HEARTBEAT_cmd 2 &amp;quot;DRIVER_HEARTBEAT_cmd_REBOOT&amp;quot; 1 &amp;quot;DRIVER_HEARTBEAT_cmd_SYNC&amp;quot; 0 &amp;quot;DRIVER_HEARTBEAT_cmd_NOOP&amp;quot; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Proximity ECU ==&lt;br /&gt;
The Proximity ECU was also known as the Avoidance module and can be found [https://gitlab.com/cant-bus/cant-bus/tree/avoid_prox on GitLab here]. It's sole purpose is to monitor the environment around the car and take measurements of objects that break the threshold. &lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Proxy_Sensor.jpg|thumb|300px|center|Figure 2: VL530X]]&lt;br /&gt;
&lt;br /&gt;
Avoidance contains eight VL53L0X infrared sensors for obstacle detection that utilizes the I2C interface. The sensors measure a distance in centimeters with a maximum range of 2 meters with 1 millimeter resolution. The VL53L0X sensor used in the car was purchased pre-attached to a breakout board where the voltage was stepped down from 3.3V to 2.8V. The XSHUT pin on the sensor acts as an enable where they were wired to GPIO pins on the SJOne board. For the car, there were a total of 8 sensors used: 5 in the front, 3 in the back. &lt;br /&gt;
The sensors come preassigned to an address of 0x52 but can be reassigned to a different address. The table for sensor address assignment and GPIO are seen below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Sensor Position&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| GPIO pin&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Slave Address&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Front Right&lt;br /&gt;
|P2_2&lt;br /&gt;
|0x54&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Front Middle Right&lt;br /&gt;
|P0_30&lt;br /&gt;
|0x61&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Front Middle&lt;br /&gt;
|P2_1&lt;br /&gt;
|0x56&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Front Middle Left &lt;br /&gt;
|P0_29&lt;br /&gt;
|0x63&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Front Left&lt;br /&gt;
|P2_0&lt;br /&gt;
|0x58&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Back Right&lt;br /&gt;
|P2_5&lt;br /&gt;
|0x5A&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Back Middle&lt;br /&gt;
|P2_4&lt;br /&gt;
|0x5C&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Back Left&lt;br /&gt;
|P2_3&lt;br /&gt;
|0x5E&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|Default&lt;br /&gt;
|none&lt;br /&gt;
|0x52&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Power for the sensors came from the car power supply regulated for 3.3V instead of from the SJOne board. The problem and solution of assignment of the I2C address can be seen below in the software design. The block diagram for this module can be found below. Note that for brevity, not all 8 proximity sensors are shown. Each sensor is connected in the same manner each with its own dedicated GPIO pin.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[File:CANT bus avoidance.png|thumb|400px|center|Figure 3: Proximity IR sensors]]&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
For the software design, a C++ library was ported over from Pololu along with configuration of the library to work with the SJOne Board. A C wrapper was written to allow it to be unit tested and included in our periodic_callbacks.c file. There were difficulties with having a singleton object for 8 sensors that created conflict. This was resolved by having a table of addresses, that the singleton object would select and reassign its address with to sweep through the sensor addresses. The configuration of the reassignment of addresses also took careful consideration.&lt;br /&gt;
&lt;br /&gt;
To reassign the address, the modification to the VL53L0X library from the Pololu library can be seen below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void VL53L0X::setAddress(uint8_t new_addr, uint8_t i2c_write)&lt;br /&gt;
{&lt;br /&gt;
  if(i2c_write)&lt;br /&gt;
      writeReg(I2C_SLAVE_DEVICE_ADDRESS, (new_addr &amp;gt;&amp;gt; 1) &amp;amp; 0x7F);&lt;br /&gt;
  address = new_addr &amp;gt;&amp;gt; 1;&lt;br /&gt;
  _setAddress(new_addr);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this segment, we gave the option to change the software address instead of changing both software and hardware addresses. This gives us the ability to make a configuration change without changing the slave address register. The i2c_write signal is only enabled high on initialization and all device reads happen when i2c_write is low. This function is called before every switch to a new device. Since we adapted the VL53L0X library with the i2c read from the SJOne Board, we follow the convention of changing this software address before calling their modified method that retrieves and processes the sensor data.&lt;br /&gt;
&lt;br /&gt;
The initialization function for these sensors followed the flowchart below of how to reassign the addresses of each sensor even when they all start with the same address. The process would first enable the first sensor with XSHUT using the GPIO pin, the select the device based on the default address. The function would then assign it the addressed based on the table above. After initializing was completed for one sensor, the sensor would stay enabled, but the singleton object would be reset back to 0x52 to set the next sensor.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Bus_Avoidance_Chart.png|thumb|300px|center|Figure 4: Proximity IR Init Flowchart]]&lt;br /&gt;
&lt;br /&gt;
To collect and store data from each sensor, a data structure was created to be placed in a CAN message. A function was created where it would again sweep the address space of the address table, and store the data to its respective location in the data structure. The VL53L0X library outputs the sensor data in millimeters, but due to the size of the CAN message and having 8 different sensors - a conversion was required. We selected our units to be centimeters so our CAN message would contain 8 different sensors with a maximum of 255 centimeters. We preferred not to split the data into two CAN messages, because it was vital that the data being sent to DRIVER was accurate and complete across all the sensors. This occurs every 20 Hz, where a CAN message is broadcasted on the bus for DRIVER to use.&lt;br /&gt;
&lt;br /&gt;
* 100Hz periodic&lt;br /&gt;
** proxy_get_data(); - Call all 8 IR sensors, and retrieve data into structure&lt;br /&gt;
** pack_avoidance_data(data); - Pack avoidance struct into CAN message for DRIVER&lt;br /&gt;
** CAN_tx(can1, &amp;amp;can_msg_dbg, 0); - Send packaged avoidance struct on CAN bus&lt;br /&gt;
&lt;br /&gt;
* 1Hz periodic&lt;br /&gt;
** Reset CAN Bus if Bus OFF&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
The only issues with the proximity sensors came from using a library provided by Pololu that used a singleton object. To address this issue, a table of addresses was created where the singleton object would sweep the table of addresses to retrieve data from each sensor. The singleton object would reassign its own address from the table to access each sensor individually. The process described in the software design was also used for retrieving data from each sensor. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
[[File:Cmpe243_motor.png|thumb|400px|center|Figure 5: Architecture of Motor Controller]]&lt;br /&gt;
The Motor ECU also known as the Motor module was used to control the speed and direction of the RC car as well as determining the speed of the car.&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
[[File:ServoD645.png|thumb|400px|center|Figure 6: Architecture of Motor Controller]][[File:Brushmotor.png|thumb|400px|center|Figure 7: Architecture of Motor Controller]]       [[File:Hallsensor.png|thumb|400px|center|Figure 8: Architecture of Motor Controller]]&lt;br /&gt;
[[File:Motordriver.png|thumb|400px|center|Figure 9: Architecture of Motor Controller]]&lt;br /&gt;
Motor contains a MW645 HiTech servo motor, brushless motor, motor driver board, and a hall sensor switch. Servo motor used to control the steering of the RC car working at a frequency of 50Hz with dutycyles (8%-left, 6%-middle, and 4%-right) for maneuvering obstacles utilizing PWM to set the frequency. The brushless motor was used to control the speed of the RC car working at a frequency of 100Hz with dutycyles (60%backwards, 70%-stop, and 75-85%-forward), a motor driver board Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685 was used to control the motor via PWM as well, but at a different frequency. Lastly a hall switch was used to detect the speed of the RC car via GPIO pins set up as interrupts.&lt;br /&gt;
Power for the sensors and servo came from the car power supply regulated for 5V instead of from the SJOne board. The problem and solution of assignment can be seen in the technical challenges section of this module.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
For the software design a C wrapper was written to allow the servo, motor, and hall sensor to be utilized in the periodic call backs with unit-testing capabilities. The C wrapper included PWM for the servo control, interrupt for the hall sensor, and i2c for motor control, leds and button switches for manual control and calibration. Once all the functions are written: set_speed, set_steering, i2c_writte, i2c_read, i2c_ init, switch_button, display_led, they can be used to test and control the RC car functionalities as well as determining the speed.&lt;br /&gt;
The initialization function for this included initializing the PWM, i2c, interrupt, and CAN bus. Once everything is initialize only two main functions were use one to receive commands from driver and one to send the status of the RC car. The overall flow the program can be seen in the following figure where the receive can message checks for specific ID in order to kill the motor, set the speed and steering values, or driver heartbeat in order to determine if the driver is active.&lt;br /&gt;
Once the driver sends a command the motor module will set the values and will send the speed values in m/s right after as well as check for ramp. Next the second main function, will send a status value of 1 for debugging purposes using BUS Master. &lt;br /&gt;
[[File:Cmpe243_motor_sw.png|thumb|400px|center|Figure 10: Architecture of Motor Controller]]&lt;br /&gt;
==== Motor ====&lt;br /&gt;
'''Periodic Init''' &lt;br /&gt;
* Initializes CAN, servo PWM (50Hz), motor driver board PWM (100Hz), interrupt for hall sensor, and speed calibration&amp;lt;br&amp;gt;&lt;br /&gt;
'''1Hz Task''' &lt;br /&gt;
* Used to check the state of CAN and reset.&amp;lt;br&amp;gt;&lt;br /&gt;
'''10Hz Task'''&lt;br /&gt;
* Receive CAN message for Motor Control&lt;br /&gt;
* Send Motor Status&lt;br /&gt;
* Send Motor Speed&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
*Motor and Servo Frequencies&lt;br /&gt;
*Hall Sensor Speed Determination&lt;br /&gt;
&lt;br /&gt;
==== Motor and Servo Frequencies ====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Single frequency for PWM on SJone board&lt;br /&gt;
Using PWM on the SJOne board only allows for one PWM frequency on all the PWM pins. For Motor, we required two different frequencies (motor (100Hz) and servo (50Hz)). We solved this by using a motor driver board using i2c to create a second PWM frequency.&lt;br /&gt;
&lt;br /&gt;
*Fluctuating PWM Frequency&lt;br /&gt;
The PWM for MOTOR varied by a few Hz depending on the environment causing the duty cycle to control the motor to change. We set the frequency to be 100Hz, but varied between 98.7Hz. This caused the dutycycle to change from 70% to 80% to initiate the motor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Single frequency for PWM on SJone board&lt;br /&gt;
We solved this by using a motor driver board using i2c to create a second PWM frequency.&lt;br /&gt;
&lt;br /&gt;
*Fluctuating PWM Frequency&lt;br /&gt;
In order to be able to deal with any situation and environment the RC car will be in we created a function to manually calibrate the first speed by increasing the dutycycle by 1% using push buttons and automatically incrementing the higher speeds with it.&lt;br /&gt;
&lt;br /&gt;
==== Hall Sensor Speed Determination ====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Creating a secure mount with enough magnets&lt;br /&gt;
Having trouble to detect more than one interrupt from the hall sensor no matter what speed, periodic callback speed (10Hz, 20Hz, 100Hz), and magnets.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a secure mount with enough magnets&lt;br /&gt;
Created a custom mount with a magnet ring with alternating magnets with precise spacing to give the interrupt at 10Hz task and hall sensor enough time to reset.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Localize ECU ==&lt;br /&gt;
&lt;br /&gt;
The Localize ECU (also called GEO controller) can be found [https://gitlab.com/cant-bus/cant-bus/tree/kchan/localize on GitLab here]. It's sole purpose is to provide compass, GPS, and directional data to DRIVER and COMMs&lt;br /&gt;
&lt;br /&gt;
[[File:Localization1.jpg|thumb|400px|center|Figure 11: Geographic Controller]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
==== LSM303 ====&lt;br /&gt;
&lt;br /&gt;
The LSM303 was selected as the compass for the final product. The LSM303 is a digital compass that contains an acceleration sensor and temperature sensor onboard. It uses the I2C communication protocol and can be power via a 5V or 3.3V power source. For this sensor, the SJOne board directly powered the compass. The clock rate for the slave clock was set to 100 KHz. The compass requires calibration which will be described in the both the software and technical challenges.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Localize_LSM303_BlockDiagram.png |thumb|300px|center|Figure 12: LSM303 Block Diagram]]&lt;br /&gt;
&lt;br /&gt;
==== NEO-6M GPS ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:CANT Localize Neo6M image.jpg|thumb|300px|center|Figure 13: Neo-6M GPS Module]]&lt;br /&gt;
&lt;br /&gt;
The Neo-6M GPS module was the device used to supply the SJOne board with positioning information. It communicates using the UART protocol and sets information at a baud rate of 9600. When powered, the module automatically sends various NMEA sentences at a rate of 1 Hz. Its only connection to the SJOne board is through the Rx pin through the Neo-6M Tx pin. The module itself has two main components: the Neo-6M module and the receiver. For optimal results, the receiver and module were mounted separately and above all other components with the white side facing up and the metallic side of the receiver facing down. While results were not perfect, it provided the most accurate and consistent results.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&lt;br /&gt;
==== LSM303 ====&lt;br /&gt;
&lt;br /&gt;
For the LSM303, the compass required an initialization function to set all the registers. The slave address for writing to the LSM303 is 0x3D and to read from the registers is 0x3C. The data for the compass can be read from 6 8-bit registers, where X Y and Z axis are divided into high and low registers. The data is represented in two’s-complement where the conversion needed to be done after merging the two bytes together. As per the datasheet, the X axis is registers 3 and 4, where register 3 is the high byte and 4. The same goes for the Z axis which is registers 5 and 6, and Y is registers 7 and 8. After the raw coordinates are obtained, the calibration goes into effect.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| LSM303 Slave Address&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Operation&lt;br /&gt;
|-&lt;br /&gt;
|0x3D&lt;br /&gt;
|Write&lt;br /&gt;
|-&lt;br /&gt;
|0x3C&lt;br /&gt;
|Read&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
An example code sample for how we retrieved data can be seen below, where ret_data is a struct for the LSM303 data.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
    ret_data.xMag = twos_complement(buffer[0], buffer[1]);&lt;br /&gt;
    ret_data.yMag = twos_complement(buffer[4], buffer[5]);&lt;br /&gt;
    ret_data.zMag = twos_complement(buffer[2], buffer[3]);&lt;br /&gt;
&lt;br /&gt;
    //CALIBRATION:&lt;br /&gt;
    ret_data.xMag -=26;&lt;br /&gt;
    ret_data.yMag +=244;&lt;br /&gt;
&lt;br /&gt;
    //Shifting&lt;br /&gt;
    if(ret_data.yMag &amp;gt; 2)&lt;br /&gt;
        ret_data.yMag -= 135;&lt;br /&gt;
    if(ret_data.xMag &amp;lt; -42)&lt;br /&gt;
        ret_data.xMag += 133;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Localize_LSM303_Flowchart.png|thumb|300px|center|Figure 14: Compass Heading Calculation Flow]]&lt;br /&gt;
&lt;br /&gt;
To calibrate the compass, the X and Y points were plotted while negating the Z axis. The Z axis was negated because the calibration of the compass requires that the compass be perfectly level. A sample of points were collected, and the plot can be seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Localize_LSM303_plot1.png|thumb|300px|center|Figure 15: LSM303 raw data, no shifting, no calibration]]&lt;br /&gt;
&lt;br /&gt;
To calibrate the compass, offsets were added such that the circle is centered at 0,0. The calibration was then added, and it looks like the plot below.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Localize_LSM303_plot2.png|thumb|300px|center|Figure 16: LSM303 X shifted down 50, Y shifted down 50]]&lt;br /&gt;
&lt;br /&gt;
An additional feature that needed to be added was closing the gaps created from having the compass close to the car. Shifting was needed to close the circle when there were gaps in the calibration caused from the electronics of the car. &lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Localize_LSM303_plot3.png|thumb|300px|center|Figure 17: LSM303 data on car with gaps caused by electronics]]&lt;br /&gt;
&lt;br /&gt;
After the points have been calibrated, an angle was formed from the point in relation to 0,0. The points go counter clockwise it goes in the order of North - 0, East - 90, South - 180, West - 270. The X and Y points were outputted to the CAN bus as a debug message and the compass direction was used for pathing.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT_Localize_LSM303_plot4.png|thumb|300px|center|Figure 18: Compass direction based on points]]&lt;br /&gt;
&lt;br /&gt;
==== NEO-6M GPS ====&lt;br /&gt;
&lt;br /&gt;
There are three main stages to collecting data from the Neo-6M GPS module. The first is to store the raw data into a string from the UART receive buffer. The second step is the verify the validity of the message and the string and store the different parts of the message into a struct if the message is valid. The final step is to verify the coordinates stored in the struct.&lt;br /&gt;
&lt;br /&gt;
Message collection from the Neo-6M is handled through the UART library on the SJOne board. Two of the functions were used: &lt;br /&gt;
* '''is_Queue_Not_Empty()''' which returns the value of getRxQueueSize()&lt;br /&gt;
* '''gets()''' which stores the messages into a string and is ended through a timeout, reaching the final character of the string, or a new line character&lt;br /&gt;
&lt;br /&gt;
Due to messages arriving once per second, these two functions were necessary. The '''is_Queue_Not_Empty()''' function  only allows reading if a message is ready on the queue. This will prevent a message from being cut off due to timeout. Since every message is appended with a new line character, '''gets()''' will store the message into the buffer without storing parts of a new message.&lt;br /&gt;
&lt;br /&gt;
For the second part of the GPS data collection, the [https://github.com/mikalhart/TinyGPSPlus/blob/master/src/TinyGPS%2B%2B.h Tiny GPS++] library was used. This provided us resources to parse and store the data from the various NMEA libraries. Furthermore, the library contains a TinyGPSCustom class which allows us to focus only on the $GPRMC messages. If a message was stored into a buffer, then this second part of GPS data collection occurred. The first step is to run the Tiny GPS++ function '''encode(char c)'''. This function passes in a char and stores it in a substring. Each substring is created after receiving a $ and is eventually checked once the * character was received. If the checksum passes, then the '''commit()''' function is called which stores all of the data in the string into a struct. The following shows an example of the $GPRMC message.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fields of GPRMC are message time, current time in UTC, validity of GPS, latitude in degree-minute-second, north/south, longitude in degree-minute-sentence, east/west, speed over ground in knots, track angle, current date, magnetic variation, and checksum. Of these fields, the GPS validity, latitude, longitude, and checksum were used. When latitude and longitude are stored in the struct, they are converted into a decimal form from degree-minute-second.&lt;br /&gt;
&lt;br /&gt;
The final part of the GPS data collection is to validate the latitude and longitude values obtained from the Tiny GPS++ library. Due to nuances with the string, it is possible to obtain values that are inconsistent with the current location. It is also possible to get a latitude and longitude of 0 if the validity of GPS field of the $GPRMC message had a V for void. The check was performed by the '''valid_coordinates(float latitude, float longitude)''' function and would only return true if the latitude was between 37 and 38 and if the longitude was between -122 and -121. Should these conditions meet, the coordinates were updated and the value is sent to the CAN bus. If they aren't meet, the old values remain the same until a validity check changes them.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT Localize Neo6M flowchart.png|thumb|300px|center|Figure 19: GPS Data Collection Flow]]&lt;br /&gt;
&lt;br /&gt;
* 1Hz periodic&lt;br /&gt;
** Reset CAN Bus if Bus OFF&lt;br /&gt;
** getGPSData(); - Extract GPS data and place in GPS struct&lt;br /&gt;
** dbc_encode_DESIRED_VECTOR(); - Encode distance vector to CAN message&lt;br /&gt;
** dbc_encode_LOCALIZE_GPS(); - Encode GPS data to CAN message for Comms and Driver&lt;br /&gt;
** pack_compass_dbg(); - Pack compass data into CAN message&lt;br /&gt;
** CAN_tx(); - Send CAN Message&lt;br /&gt;
&lt;br /&gt;
* 10Hz periodic&lt;br /&gt;
** call_compass(); - Extract Compass Heading and Magnetic Flux values of X and Y&lt;br /&gt;
** find_direction(); - Generate a heading and distance vector based on GPS and compass data&lt;br /&gt;
&lt;br /&gt;
* 100 Hz periodic&lt;br /&gt;
** CAN_rx(); - Receive CAN message 500 if available for waypoint data&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
==== Compass Issues ====&lt;br /&gt;
* Issues with Calibration of LSM303&lt;br /&gt;
** The problem with the LSM303 and all digital compasses, is there is a lot of interference with magnetic fields in buildings that requires calibration for different environments. In addition, compasses do not come pre-calibrated as the strength of the North pole varies depending on location. To resolve this issue, we calibrated the compass in various locations. Our final calibration that we used and kept was the furthest away from any potential magnetic fields. Our selected location was on the top floor of the engineering building that was away from any lab rooms or elevators.&lt;br /&gt;
&lt;br /&gt;
==== Unreliable GPS lock ====&lt;br /&gt;
* Obtaining Coordinates&lt;br /&gt;
** When attempting to obtain coordinates, the GPS module took several minutes in order to connect to a satellite and return coordinates. This process took more time if the GPS module was in a building or in a non-open area.&lt;br /&gt;
** Information from the GPS module was delivered at a rate of 1 Hz. When this information arrived, there were several possibilities such as $GPGGA, $GPGSV, and $GPRMC.&lt;br /&gt;
***Coordinates were only obtained when $GPRMC messages were sent and it yielded an Active (A) coordinate.&lt;br /&gt;
***There was no way to manipulate the GPS module to only send $GPRMC messages.&lt;br /&gt;
&lt;br /&gt;
* Parsing Data&lt;br /&gt;
** All messages are appended with a new line &amp;quot;\r\n&amp;quot; at the end allowing it to be perfect candidates for the UART gets function. To help with consistency, the gets function was only called when there were characters in the queue to prevent the read from being timed out. &lt;br /&gt;
** Occasionally, some messages become cut off and merged with the next message. This skewed readings as commas were used to separate different sections of the data, including instances where $GPRMC was sent.&lt;br /&gt;
** To save resources, coordinates were only calculated when $GPRMC messages were sent with an (A) status message. This data is presented in a degree, minute, second format as opposed to the decimal format used by the SJOne and the mobile application. As a fail safe, converted coordinates were only saved and sent if the value yielded a latitude between 37 and 38 degrees and a longitude between -122 and -121 degrees.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comms ECU &amp;amp; LCD ==&lt;br /&gt;
The [https://gitlab.com/cant-bus/cant-bus/tree/ajavier/commstomobile Comms module source code] includes the code for the ESP32 WiFi device and LCD display. Below is the block diagram for this module's connections.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT bus comms.png|thumb|400px|center|Figure 20: Comms module diagram with LCD]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== LCD Display ====&lt;br /&gt;
The LCD display used is a 2.4&amp;quot; TFT display [https://www.adafruit.com/product/2478 made by Adafruit]. This display uses either the 8-bit or SPI protocol to transfer data. For this application, the SPI protocol was used in combination with an additional Data/Command line to distinguish between command packets (pulled low) or data packets (pulled high). The display is then connected via a controller that determines what pixels to activate and color. The controller itself uses the I2C protocol to communicate with the Comms board.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&lt;br /&gt;
==== ESP32 WiFi Module ====&lt;br /&gt;
&lt;br /&gt;
On the side of the SJOne board, the UART library is primarily used to communicate with the ESP32. For incoming messages, the SJOne relies on two primary functions: '''getRxQueueSize()''' and '''gets()'''. The former checks to see if there are any incoming messages from the ESP32 while the latter stores the message into a string. To mitigate the possibility of a message getting truncated due to being read late, the board will only read if anything is present in queue. Once the message is read, it is parsed. There are three possible messages from the ESP32: start, stop, and coordinate data. The start is denoted by an 'A' character while the stop is denoted by a single 'Z' character. For coordinates, it is formatted like the message below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
37.575790|-122.049126&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The type of message is determined through reading the first character of the string. If the first character is a '3', then the SJOne reads it as coordinates and uses the '|' to separate latitude and longitude. Both latitude and longitudes are stored in substrings until the end when they are converted to float using '''atof()'''.&lt;br /&gt;
&lt;br /&gt;
To simplify the use of web sockets, latitude, longitude, the status of a waypoint being reached, and a question mark are all sent. A sample of the message sent to the ESP is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
-121.881430w37.336863nO7.65?&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first field is longitude and then followed by 'w' for west. The next field is latitude followed by an 'n'. The third field is an O or N. This represents if a waypoint is reached with O meaning waypoint not reached and N representing a waypoint is reached. The status is determined if the distance is below 5 meters. All of this information is retrieved from the CAN bus and is appended together using the '''sprintf()''' function.&lt;br /&gt;
&lt;br /&gt;
==== LCD Display ====&lt;br /&gt;
The main elements we wanted to be able to see on the car were speed and destination. Destination is displayed in Lat/Long decimal degree coordinates and speed is in kilometers per hour. In addition, we also show the distance between our car and the destination and our current heading from due north. Due to the complexity of the display, each pixel requires about 7 bytes to activate, the possibility of overrunning the scheduler was high. As such, a controller was inserted to perform the actual data transfer to write pixels. The Comms module simply tells the controller what to update, via I2C, from the 1Hz periodic function. To make writing pixels a little easier, the [https://github.com/adafruit/Adafruit-GFX-Library Adafruit GFX Library] was used to create fonts, lines, and the triangles used to mimic a compass.&lt;br /&gt;
&lt;br /&gt;
[[File:CANT bus display.jpg|thumb|400px|center|Figure 21: LCD display]]&lt;br /&gt;
&lt;br /&gt;
There are five basic functions used to update the display, four are used to set values to a data struct and the fifth sends the data over I2C: &lt;br /&gt;
* '''set_display_waypoint()''' - packages the latitude and longitude destination struct values as a C-string&lt;br /&gt;
* '''set_display_speed()''' - packages the car's current speed struct value in a C-string.&lt;br /&gt;
* '''set_display_distance()''' - packages the distance remaining between the car and the destination in a C-string&lt;br /&gt;
* '''set_display_arrow()''' - selects which heading arrow the display should draw: N, S, E, W, NW, NE, SW, or SE&lt;br /&gt;
* '''updateDisplay()''' - sends the full struct that has been prepared by the above functions over I2C&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
==== LCD Issues ====&lt;br /&gt;
Originally the plan was to use a 2.2&amp;quot; TFT display by QVGA. This display had been used in previous projects before, however, in this project there was nothing but problems. The SPI communication from the SJOne board was not being received or sent by the display. When testing on a known board and the Adafruit library, the SPI comms would respond, but nothing would actually display on the screen. Assuming this particular display had been compromised, additional displays were purchased with the same results. After much Googling and more research, it turned out that this particular display is known for failures and inconsistencies. The Adafruit display was the original the QVGA was based on. Once that was purchased and tested, there were no further issues, both SPI communications and the display worked fine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Driver Module ==&lt;br /&gt;
&lt;br /&gt;
Driver module source code can be found on [https://gitlab.com/cant-bus/cant-bus/tree/driver/ GitLab here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
With respect to hardware, the DRIVER ECU design has very little going on. Other than the CAN transceiver, the only anticipated components were level-shifting operational amplifiers that would have served the purpose of providing voltage readings. Although designed, we decided to forego implementation for a simpler solution: battery indicator buzzers that will alert us if any cell of the Lithium Polymer batteries we use approach the fatal 3.0V voltage.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&lt;br /&gt;
The main purpose of the DRIVER ECU is to fuse the information AVOIDANCE and LOCALIZE, in order to inform MOTOR of the necessary steering and motor commands to assert on the steering servo motor and the brushed DC electric drive motor. The following diagrams informs you on at a high level on how the information is gathered from each of those ECUs, then fed to DRIVER.&lt;br /&gt;
&lt;br /&gt;
LOCALIZE:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:CANT Bus Logic - Localize.png]]&lt;br /&gt;
&lt;br /&gt;
AVOID:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:CANT Bus Logic - Avoidance.png]]&lt;br /&gt;
&lt;br /&gt;
DRIVER:&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:CANT Bus Logic - Driver.png]]&lt;br /&gt;
&lt;br /&gt;
Given the premise established in these diagrams, we wish to &lt;br /&gt;
1. translate the avoidance data into a set of permissible (or, in other words, admissible) velocities&lt;br /&gt;
2. use the heading and distance information to inform us on how to prioritize the velocities. As in, if the desired heading is straight ahead, we will prefer the forward velocity over all others.&lt;br /&gt;
3. assert the velocity - this is the motor_cmd value we send to MOTOR&lt;br /&gt;
&lt;br /&gt;
From this premise, we describe the key routine calls within our periodic function:&lt;br /&gt;
&lt;br /&gt;
* 100Hz periodic&lt;br /&gt;
** check_CAN_messages() - as the name suggests, this function checks the registers to see if any CAN messages were received and pulls the needed data from them.&lt;br /&gt;
&lt;br /&gt;
* 10Hz periodic&lt;br /&gt;
** determine_admissible_velocities() - based on the proximity sensor information from AVOID, determine whether traversal is feasible. If not, nullify the velocity for this 10Hz time slice.&lt;br /&gt;
** determine_system_state() - determine the mode and directionality for this time slice: &lt;br /&gt;
*** this can be IDLE, which informs the system that there are no waypoints being serviced&lt;br /&gt;
*** STOP, which informs that the car is currently stopped but is servicing a waypoint,&lt;br /&gt;
** and the directionalities: FORWARD_MID, FORWARD_LEFT, FORWARD_RIGHT for forward directions, and&lt;br /&gt;
*** REVERSE_MID, REVERSE_LEFT, and REVERSE_RIGHT&lt;br /&gt;
** choose_velocity_by_preference_order() - based on the state determined above, we can refer to a preset list of preferences for our directionality. From this, we select the best available velocity for this timeslice.&lt;br /&gt;
** set_velocity() - send the selected velocity (or non-velocity) to MOTOR&lt;br /&gt;
&lt;br /&gt;
* 1Hz periodic&lt;br /&gt;
** set_manual() - checks if manual mode has been selected, this is mostly used for testing and resetting to a known state.&lt;br /&gt;
** send_reset() - checks the status of CAN and if it needs to be, resets the bus&lt;br /&gt;
** set_heartbeat() - sends out a blank message to keep all the other modules in check&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
The biggest challenge we faced was the vector array algorithm as it involved a lot of math that some of us hadn't touched in many years. Eventually we were able create an algorithm what was able to take all the proximity values and plot a course of action to avoid objects while still maintaining a heading to our final destination. &lt;br /&gt;
&lt;br /&gt;
In fact, we attempted several iterations of the Dynamic Window Approach[https://en.wikipedia.org/wiki/Dynamic_window_approach] popularized by Sebastian Thrun, et al[https://www.researchgate.net/publication/3344494_The_Dynamic_Window_Approach_to_Collision_Avoidance]. At each phase, we had reduced our window size, until what we were left with was one speed forward, one speed back, and one direction to either side (no fractional angles for steering commands). This left us with an unstable platform (as you can see from the left-right zigzags where you would expect smooth forward motion. Perhaps it would have been better had we &lt;br /&gt;
1. Started with this as a base case, and expanded from there, and&lt;br /&gt;
2. Ran simulations&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mobile Application and ESP32==&lt;br /&gt;
[https://github.com/vijayvanapalli96/Final243App FinalAppPackage]&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
The App and the Car are connected via wifi and through the means of ESP32. The ESP32 can perform as a complete standalone system or as a slave to a host MCU, reducing communication stack overhead on  the main application processor. Here, the ESP32 is being used as a host that sets up a webserver on a desired wifi connection. The wifi connection is provided by the user’s shared hotspot. The credentials of these are to be entered within the source code of the application. &lt;br /&gt;
&lt;br /&gt;
Once the web server has been set up, both the ESP32 (on behalf of the SJOne board) and the App can publish messages to the web server as needed, through  the means of websockets. WebSocket is a computer communications protocol providing full-duplex  communication channels over a single TCP connection. The ESP32 receives a string via UART from the SJOne until a specified delimiter to differentiate between multiple messages. This string is published to the server, for the app to echo and read as necessary.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
The Mobile Application is tasked with utilizing Google Maps API, essentially acting as a UI between the user and the car. It relays the current position of the car, or allows the user to set the starting point of the car as needed - since the given point is a draggable. Similarly the destination is marked with a similar marker, which when on holding down gives the relevant descriptions of each point. &lt;br /&gt;
&lt;br /&gt;
The next challenge came with being able to track the current trajectory of the car. Therefore the set objectives, was to have the set marker track the position of the car in real time, along with the refresh rate of the GPS. In this case since the GPS coordinates are being updated in the 1 Hz task, therefore a handler function is enlisted in its design that periodically checks the debug info being relayed back and forth between the Car and the App. &lt;br /&gt;
&lt;br /&gt;
In order to navigate between the start and the stop point, we have to calculate the shortest possible distance between the two points. While this may be possible with just a simple distance formula, we still have to take on sample waypoints in anticipation of large obstacles or to follow  a set road. This is done by creating a graph, wherein the points are labeled either according to their index or a set naming convention, and distances between these points define the cost of traversing that particular edge.&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
Initially, the idea was to have the ESP32 publish a webpage at a specific IP Address that the phone may access with inline buttons to further act a UI. However this was very flawed in its approach as it meant accessing web pages and not utilizing or designing UI. HTML buttons as is would open more such webpages which would become redundant and difficult to manage, especially with reusing buttons. &lt;br /&gt;
&lt;br /&gt;
Websockets as a resource are limited and need to be managed efficiently so as to not lose count of the number of active websockets. As the app and the websocket server keeps running for a long time (20 minutes and over) we find a significant lag and backlog of messages being stored on the server before being published on the receivers end. &lt;br /&gt;
The ESP8266 and the ESP32 can only hold up to 4 websockets at a time. This is important to note since we encountered a problem where we would use up all the 4 resources simultaneously to send debug messages to the app from the car, while leaving no room for error or overflow. If overflow of resources does occur then the resources are stuck in an infinite loop and are left inaccessible.  The work around to this problem is to use 2 resources only, each allocated to either device viz the host ESP32 and the client App. The resources are withheld during their use but disconnected upon reading the message so that they do not populate.&lt;br /&gt;
&lt;br /&gt;
When running the dijkstra algorithm on a complete graph, the app essentially takes into consideration all the specified weights, including the distance between the start and destination point which is always a  straight line and thus always the shortest path. This is an undesirable result, hence one work around to this is to populate the graph less often rather than calculating all possible distances. Eventually it was easier to set all the distances between different points as the maximum possible traversable distance and then manually add legible and realistic distances as per CalcDistance(). Once this newer doctored graph is fed through Dijkstra’s algorithm we get a reasonable traversable path for the car to follow. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Over the course of this project, we learned about the importance of planning and communication while working in a large group. The difficulties of coordinating so many people was mitigated slightly by having multiple meetings during the week. Each member was encouraged to go to as many of those meetings as possible. Some were able to make it to all while others could only make it to 2 or 3. This allowed some continuity in combining all the modules together.  We learned about CAN bus protocol and how powerful of a tool it can be. The importance of unit testing was stressed as well and we learned effective ways to test each line of code as we designed the modules. This project gave us hands on experience with working with others to complete a united goal of building a RC car. Although we had some difficulties with scheduling meetings due to our different schedules - we managed to coordinate in person and on our Slack channel. Our project was to design and build an autonomous RC car that would travel to a selected GPS coordinate while passing through checkpoints and avoiding obstructions. Although our RC car did not quite reach the mark that we were expecting, much was learned from this experience that we can use in our future projects and industry jobs. &lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=w9LZ2Fikxn0&amp;amp;feature=youtu.be Link]&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
https://gitlab.com/cant-bus/cant-bus&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
* Form your team and start as EARLY as possible&lt;br /&gt;
* Buy spare parts, things will break when you least expect them to happen&lt;br /&gt;
* Don't wait to the last minute for full integration&lt;br /&gt;
* Buy quality parts rather than cheaper alternatives&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
We would like to thank Preetpal Kang for providing us the opportunity to learn about the CAN bus protocol and how to integrate it into an embedded system. We'd also like to thank our team leader, Nelson, for keeping us on task and always being there to help and provide counsel whenever it was needed. &lt;br /&gt;
=== References ===&lt;br /&gt;
[1] [https://stanford.edu/class/ee267/misc/MPU-9255-Register-Map.pdf MPU-9255 Data Sheet]&lt;br /&gt;
&lt;br /&gt;
[2] [https://stanford.edu/class/ee267/misc/MPU-9255-Register-Map.pdf MPU-9255 Register Map]&lt;br /&gt;
&lt;br /&gt;
[3] [https://www.akm.com/akm/en/file/datasheet/AK8963C.pdf Magnetometer Data Sheet]&lt;br /&gt;
&lt;br /&gt;
[4] [https://cdn-shop.adafruit.com/datasheets/LSM303DLHC.PDF LSM303 Data Sheet]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=51788</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=51788"/>
				<updated>2019-03-11T18:51:49Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LED Switch =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 and use existing API under '''gpio.hpp''':&lt;br /&gt;
&lt;br /&gt;
* Interface an external LED (such as P2.1) to &amp;quot;Board A&amp;quot;, which we will refer to as &amp;quot;LED Board&amp;quot;&lt;br /&gt;
* Interface an external switch (such as P2.2) to &amp;quot;Board B&amp;quot;, which we will refer to as &amp;quot;SW Board&amp;quot; (switch board)&lt;br /&gt;
* Connect the LED Board and SW Board together using &amp;quot;Port 2&amp;quot;&lt;br /&gt;
*:  Example: P2.0 of LED board connects to P2.0 on the SW Board&lt;br /&gt;
*:  Do not forget common ground&lt;br /&gt;
* LED board Software is simple, whenever P2.0 (which is interfaced to the SW Board) is detected HIGH, light up its LED (on P2.1), else turn it off&lt;br /&gt;
* On the SW Board, use &amp;quot;External Interrupt&amp;quot; API (eint.h) to detect when the switch gets pressed&lt;br /&gt;
*:  The callback should simply turn a flag (global variable) to true&lt;br /&gt;
*:  The callback '''''MUST NOT POLL''''', and '''''MUST NOT DELAY''''', and '''''EXIT IMMEDIATELY''''' since it is an interrupt function&lt;br /&gt;
*:  Use period_init() function to initialize the callback.  This initialization function is only called once before starting the RTOS&lt;br /&gt;
* On the SW Board, use the periodic callbacks, and when the flag is true, toggle the P2.0 for at least 500ms&lt;br /&gt;
*:  Turn on the periodic scheduler at main.cpp&lt;br /&gt;
*:  Deploy your code to periodic_callbacks.cpp (like 10Hz function)&lt;br /&gt;
* Bonus points: Use a binary semaphore in the interrupt, and have the 10Hz task wait on this semaphore with 0 ms block time.  See the FreeRTOS video about the binary semaphore&lt;br /&gt;
*:  Note that if you use a periodic callback, you will have to use zero block time for the semaphore since you do not want to block in a period function.&lt;br /&gt;
*: '''[https://www.youtube.com/watch?v=grXuVMttVuU: Binary Semaphores]'''&lt;br /&gt;
&lt;br /&gt;
For the demo:&lt;br /&gt;
*  The SW Board should detect its switch press by an external interrupt and toggle its P2.0&lt;br /&gt;
*  The LED Board should detect its own P2.0 and light up the LED&lt;br /&gt;
&lt;br /&gt;
This assignment demonstrates the use of external interrupts, and how to interface different boards together.  Furthermore, you should have learned the concepts of different tasks that you can run in FreeRTOS.  In general, you should never have to poll for events, and you should use interrupt functionality as much as possible.  Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp&lt;br /&gt;
Indicate at the top of the file who you worked with.  (Do not have the other person turn in anything)&lt;br /&gt;
&lt;br /&gt;
= Form Groups =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Communicate with one of the class ISA to setup your groups @ Canvas.  Be sure to have your group name ready and use an appropriate group name.&lt;br /&gt;
&lt;br /&gt;
Failure to do so by the deadline will result in '''''zero points''''' for the assignment.  Be sure to do this before leaving the class.&lt;br /&gt;
&lt;br /&gt;
Also, order CAN transceiver hardware for your entire team (1 per person)&lt;br /&gt;
&lt;br /&gt;
= Serial Communication =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Use either UART2 or UART3 to communicate between two boards.  You can work in groups of 2.&lt;br /&gt;
&lt;br /&gt;
*  Locate the UART pins on your board.  &lt;br /&gt;
*:  Use the schematic or Wikipedia board article.&lt;br /&gt;
*  Interface to the UART pins on someone else's board.  &lt;br /&gt;
*:  If you use UART2, you cannot use UART2 on the 2nd board (use UART3 instead).&lt;br /&gt;
*  Prove that both of your boards and communicate with each other.  &lt;br /&gt;
*  Bonus points for doing something creative, such as one board acting like a random sensor, and the second board outputting the sensor reading on the LED display.&lt;br /&gt;
*  This assignment demonstrates how to communicate with another device using UART.  The UART driver is based on queues, there is no need to poll for data to arrive, or for data to be sent.  Size your queues appropriately and they shouldn't be too large or too small.  For example, if you service the received data every 100ms, then your queues should only  need to be as big as the number of characters you expect to receive within 100ms (38400bps can provide 400 chars in 100ms).&lt;br /&gt;
&lt;br /&gt;
Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
* Only turn in the relevant source code, such as main.cpp for both boards&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://socialledge.com/sjsu/index.php/Autonomous_RC_Car_Project_Report_Template browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= CAN Communication =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
You can work in groups of 2:&lt;br /&gt;
&lt;br /&gt;
*Build and interface the CAN transceiver with another person's CAN transceiver.&lt;br /&gt;
*Initialize the CAN Bus (read can.h in the drivers directory).&lt;br /&gt;
*Use a simple periodic message (every 100ms) that is sent from BoardA to BoardB.&lt;br /&gt;
*: For example, if BoardA senses a switch pressed, send a 1-byte message with 0xAA, otherwise send 0x00 if button is not pressed&lt;br /&gt;
*For robustness, if the CAN Bus turns off, simply turn it back on at 1Hz (every 1000ms)&lt;br /&gt;
*On BoardB, simply light up an LED  (or otherwise turn it off) based on the CAN message data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This assignment gives you an overview of practical use of the CAN Bus, and later, by utilizing the DBC file and auto-generation of code, sending and receiving data becomes very easy.  &lt;br /&gt;
&lt;br /&gt;
While this provides bare bones knowledge of how communication works, the future lectures will focus on the application layer while abstracting away the details of CAN messages' data encoding and decoding.&lt;br /&gt;
&lt;br /&gt;
Although the real-time periodic scheduler was not discussed, it might be worth your time to simply turn it on (using #define) since it can help you send periodic messages fairly easily.  This will also help you prepare in advance for the future lectures.&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp for both boards.&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Autonomous_RC_Car_Project_Report_Template&amp;diff=51787</id>
		<title>Autonomous RC Car Project Report Template</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Autonomous_RC_Car_Project_Report_Template&amp;diff=51787"/>
				<updated>2019-03-11T18:49:39Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;== Project Title == &amp;lt;Team Name&amp;gt;  == Abstract == &amp;lt;2-3 sentence abstract&amp;gt;  === Introduction ===  The project was divided into N modules:  * Sensor ... * Motor.. * ... * Android...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Project Title ==&lt;br /&gt;
&amp;lt;Team Name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&amp;lt;2-3 sentence abstract&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The project was divided into N modules:&lt;br /&gt;
&lt;br /&gt;
* Sensor ...&lt;br /&gt;
* Motor..&lt;br /&gt;
* ...&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
&amp;lt;Team Picture&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gitlab Project Link - [https://gitlab.com/...]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Provide ECU names and members responsible&amp;gt;&lt;br /&gt;
&amp;lt;One member may participate in more than one ECU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sensor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Motor&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Geographical&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Communication Bridge Controller &amp;amp; LCD&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Android Application&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
* Testing Team&lt;br /&gt;
** Link to Gitlab user1&lt;br /&gt;
** Link to Gitlab user2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Start Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| End Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Status&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 09/15/2017&lt;br /&gt;
| 09/16/2017&lt;br /&gt;
|&lt;br /&gt;
* Read previous projects, gather information and discuss among the group members.&lt;br /&gt;
* Distribute modules to each team member.&lt;br /&gt;
&lt;br /&gt;
| Completed&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| 09/17/2017&lt;br /&gt;
| 10/03/2017&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Item#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Part Desciption&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Vendor&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Qty&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Cost&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| RC Car &lt;br /&gt;
| Traxxas&lt;br /&gt;
| 1&lt;br /&gt;
| $250.00&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
| CAN Transceivers MCP2551-I/P&lt;br /&gt;
| Microchip [http://www.microchip.com/wwwproducts/en/en010405]&lt;br /&gt;
| 8&lt;br /&gt;
| Free Samples&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Printed Circuit Board  ==&lt;br /&gt;
&amp;lt;Picture and information, including links to your PCB&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN Communication ==&lt;br /&gt;
&amp;lt;Talk about your message IDs or communication strategy, such as periodic transmission, MIA management etc.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&amp;lt;Show your CAN bus hardware design&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DBC File ===&lt;br /&gt;
&amp;lt;Gitlab link to your DBC file&amp;gt;&lt;br /&gt;
&amp;lt;You can optionally use an inline image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Sensor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Unreliable sonor sensors ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Motor ECU ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Unreliable Servo Motors ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Geographical Controller ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Unreliable GPS lock ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Communication Bridge Controller &amp;amp; LCD ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Insane Bug ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Master Module ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Improper Unit Testing ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Mobile Application ==&lt;br /&gt;
&amp;lt;Picture and link to Gitlab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
&amp;lt;List the code modules that are being called periodically.&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Technical Challenges ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Bullet or Headings of a module&amp;gt;&lt;br /&gt;
==== Wifi Link Reliability ====&lt;br /&gt;
&amp;lt;Problem Summary&amp;gt;&lt;br /&gt;
&amp;lt;Problem Resolution&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&amp;lt;Organized summary of the project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;What did you learn?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
&lt;br /&gt;
=== Advise for Future Students ===&lt;br /&gt;
&amp;lt;Bullet points and discussion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=51786</id>
		<title>Industrial Application using CAN Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=51786"/>
				<updated>2019-03-11T18:28:43Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Class Information =&lt;br /&gt;
==Presentation on Autonomous Vehicles==&lt;br /&gt;
http://www.slideshare.net/ShantanuVashishtha1/autonomous-vehicles-70049669&lt;br /&gt;
&lt;br /&gt;
== Useful Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
[[Basic Git Tutorial]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CAN Bus ===&lt;br /&gt;
[[CAN BUS Tutorial | CAN BUS]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[DBC Format]] ===&lt;br /&gt;
DBC format is a well known format to describe the format of a CAN message.  This is essentially the schema of the data that is communicated over the CAN bus.  Please view the linked [[DBC Format]] article for details before reading further.&lt;br /&gt;
&lt;br /&gt;
=== BusMaster Tutorial ===&lt;br /&gt;
[[BusMaster | BusMaster Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Class Assignments ==&lt;br /&gt;
=== [[Lab Assignments]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Class Project ==&lt;br /&gt;
=== [[Self-driving Car]] ===&lt;br /&gt;
In this class project, students accomplish a self-drivable RC car with the following learning objectives:&lt;br /&gt;
*  Learn CAN Bus and how to communicate in an industrial or  automotive environment.&lt;br /&gt;
*  Learn integration and testing across different controllers.&lt;br /&gt;
*  Learn how to work in teams.&lt;br /&gt;
*  Learn basics of an RTOS.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Autonomous RC Car Project Report Template]]&lt;br /&gt;
&lt;br /&gt;
== Class Project Reports ==&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2019 | Spring 2019]] ===&lt;br /&gt;
*  [[S19: CANT Bus | S19: CANT Bus]]&lt;br /&gt;
*  [[S19: Tech Savy | S19: Tech Savy]]&lt;br /&gt;
*  [[S19: Mystery Machine | S19: Mystery Machine]]&lt;br /&gt;
*  [[S19: Run D.B.C | S19: Run D.B.C]]&lt;br /&gt;
*  [[S19: Hot Wheels | S19: Hot Wheels]]&lt;br /&gt;
*  [[S19: Zeus | S19: Zeus]]&lt;br /&gt;
*  [[S19: Automophiles | S19: Automophiles]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2017 | Fall 2017]] ===&lt;br /&gt;
*  [[F17: Alpha | F17: Alpha]]&lt;br /&gt;
*  [[F17: FoxP2 | F17 FoxP2]]&lt;br /&gt;
*  [[F17: Optimus | F17 Optimus]]&lt;br /&gt;
*  [[F17: Tata Nano | F17 Tata Nano]]&lt;br /&gt;
*  [[F17: Viserion | F17 Viserion]]&lt;br /&gt;
*  [[F17: Vindicators100 | F17 Vindicators100]]&lt;br /&gt;
*  [[F17: Rolling Thunder | F17: Rolling Thunder]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
*  [[F16: Spartan and Furious | F16: Spartan and Furious]]&lt;br /&gt;
*  [[F16: Titans | F16: Titans]]&lt;br /&gt;
*  [[F16: Kasper | F16: Kasper]]&lt;br /&gt;
*  [[F16: AutoNav | F16: AutoNav]]&lt;br /&gt;
*  [[F16: Thunderbolt| F16: Thunderbolt]]&lt;br /&gt;
*  [[F16: The-Nine| F16: The-Nine]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
* [[F15: Quadcopter by Thomas]]&lt;br /&gt;
* [[F15: Undergrads++]]&lt;br /&gt;
* [[F15: TopGun]]&lt;br /&gt;
* [[F15: Fury]]&lt;br /&gt;
* [[F15: Minion]]&lt;br /&gt;
* [[F15: ThunderBird]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE243 Fall 2014 | Fall 2014]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F14: Team2-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team3-Self Driving Car - Optimus Prime]]&lt;br /&gt;
* [[F14: Team4-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team5-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Self Driving Undergrad Team]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=51344</id>
		<title>Lab Assignments</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Lab_Assignments&amp;diff=51344"/>
				<updated>2019-02-21T23:20:44Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Unit Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;BackToTop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot; style=&amp;quot;background-color:#FAFAFA; position:fixed; bottom:2%; left:0.25%; padding:0; margin:0;&amp;quot;&amp;gt;&lt;br /&gt;
[[#top|Back to the Top]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Hello World =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
*Get the development environment from sourceforge.&lt;br /&gt;
: '''[https://sourceforge.net/projects/armdevpkg/files/: SourceForge SJSU Development Package]'''   &lt;br /&gt;
&lt;br /&gt;
*Compile a sample FreeRTOS sample project&lt;br /&gt;
&lt;br /&gt;
*Load it onto the processor&lt;br /&gt;
&lt;br /&gt;
*Add a terminal command to your project, have it do something creative (Like print temperature on the screen)&lt;br /&gt;
&lt;br /&gt;
Reference this article on how to add a terminal command:&lt;br /&gt;
&lt;br /&gt;
http://www.socialledge.com/sjsu/index.php?title=SJ_One_Board&lt;br /&gt;
&lt;br /&gt;
SUBMIT YOUR CODE online (copy/paste to Text Entry box).  Or simply provide me a link if you use Gitlab or other online repository for your code submission.&lt;br /&gt;
&lt;br /&gt;
Only submit the relevant code, or just the code you added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LED Switch =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 and use existing API under '''gpio.hpp''':&lt;br /&gt;
&lt;br /&gt;
* Interface an external LED (such as P2.1) to &amp;quot;Board A&amp;quot;, which we will refer to as &amp;quot;LED Board&amp;quot;&lt;br /&gt;
* Interface an external switch (such as P2.2) to &amp;quot;Board B&amp;quot;, which we will refer to as &amp;quot;SW Board&amp;quot; (switch board)&lt;br /&gt;
* Connect the LED Board and SW Board together using &amp;quot;Port 2&amp;quot;&lt;br /&gt;
*:  Example: P2.0 of LED board connects to P2.0 on the SW Board&lt;br /&gt;
*:  Do not forget common ground&lt;br /&gt;
* LED board Software is simple, whenever P2.0 (which is interfaced to the SW Board) is detected HIGH, light up its LED (on P2.1), else turn it off&lt;br /&gt;
* On the SW Board, use &amp;quot;External Interrupt&amp;quot; API (eint.h) to detect when the switch gets pressed&lt;br /&gt;
*:  The callback should simply turn a flag (global variable) to true&lt;br /&gt;
*:  The callback '''''MUST NOT POLL''''', and '''''MUST NOT DELAY''''', and '''''EXIT IMMEDIATELY''''' since it is an interrupt function&lt;br /&gt;
*:  Use period_init() function to initialize the callback.  This initialization function is only called once before starting the RTOS&lt;br /&gt;
* On the SW Board, use the periodic callbacks, and when the flag is true, toggle the P2.0 for at least 500ms&lt;br /&gt;
*:  Turn on the periodic scheduler at main.cpp&lt;br /&gt;
*:  Deploy your code to periodic_callbacks.cpp (like 10Hz function)&lt;br /&gt;
* Bonus points: Use a binary semaphore in the interrupt, and have the 10Hz task wait on this semaphore with 0 ms block time.  See the FreeRTOS video about the binary semaphore&lt;br /&gt;
*:  Note that if you use a periodic callback, you will have to use zero block time for the semaphore since you do not want to block in a period function.&lt;br /&gt;
*: '''[https://www.youtube.com/watch?v=grXuVMttVuU: Binary Semaphores]'''&lt;br /&gt;
&lt;br /&gt;
For the demo:&lt;br /&gt;
*  The SW Board should detect its switch press by an external interrupt and toggle its P2.0&lt;br /&gt;
*  The LED Board should detect its own P2.0 and light up the LED&lt;br /&gt;
&lt;br /&gt;
This assignment demonstrates the use of external interrupts, and how to interface different boards together.  Furthermore, you should have learned the concepts of different tasks that you can run in FreeRTOS.  In general, you should never have to poll for events, and you should use interrupt functionality as much as possible.  Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp&lt;br /&gt;
Indicate at the top of the file who you worked with.  (Do not have the other person turn in anything)&lt;br /&gt;
&lt;br /&gt;
= Form Groups =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Communicate with one of the class ISA to setup your groups @ Canvas.  Be sure to have your group name ready and use an appropriate group name.&lt;br /&gt;
&lt;br /&gt;
Failure to do so by the deadline will result in '''''zero points''''' for the assignment.  Be sure to do this before leaving the class.&lt;br /&gt;
&lt;br /&gt;
Also, order CAN transceiver hardware for your entire team (1 per person)&lt;br /&gt;
&lt;br /&gt;
= Serial Communication =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Use either UART2 or UART3 to communicate between two boards.  You can work in groups of 2.&lt;br /&gt;
&lt;br /&gt;
*  Locate the UART pins on your board.  &lt;br /&gt;
*:  Use the schematic or Wikipedia board article.&lt;br /&gt;
*  Interface to the UART pins on someone else's board.  &lt;br /&gt;
*:  If you use UART2, you cannot use UART2 on the 2nd board (use UART3 instead).&lt;br /&gt;
*  Prove that both of your boards and communicate with each other.  &lt;br /&gt;
*  Bonus points for doing something creative, such as one board acting like a random sensor, and the second board outputting the sensor reading on the LED display.&lt;br /&gt;
*  This assignment demonstrates how to communicate with another device using UART.  The UART driver is based on queues, there is no need to poll for data to arrive, or for data to be sent.  Size your queues appropriately and they shouldn't be too large or too small.  For example, if you service the received data every 100ms, then your queues should only  need to be as big as the number of characters you expect to receive within 100ms (38400bps can provide 400 chars in 100ms).&lt;br /&gt;
&lt;br /&gt;
Turn in ONE SUBMISSION per group with the following:&lt;br /&gt;
* Only turn in the relevant source code, such as main.cpp for both boards&lt;br /&gt;
&lt;br /&gt;
= Unit Testing =&lt;br /&gt;
&lt;br /&gt;
Perform the &amp;quot;Lab 1&amp;quot; exercise here: &lt;br /&gt;
[https://gitlab.com/sibros_public/public/wikis/c/unit_tests#lab-1]&lt;br /&gt;
&lt;br /&gt;
= Project Setup =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Setup your Project Report Template:&lt;br /&gt;
&lt;br /&gt;
* Go to your class webpage:&lt;br /&gt;
*:  [http://www.socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus CmpE 243 Home Page]&lt;br /&gt;
* There should be a &amp;quot;Red Link&amp;quot; that I created for you to edit; Red-link means that &amp;quot;This Wiki article doesn't exist yet&amp;quot;&lt;br /&gt;
*:  Make sure you are logged into the SocialLedge Wiki, and then click to edit this page&lt;br /&gt;
*:  Rename one of these bullet points to your project name (use a wise name for your project):&lt;br /&gt;
*:  Tag your project with &amp;quot;F17&amp;quot; or similar, such as:&lt;br /&gt;
*:  &amp;lt;nowiki&amp;gt;[[F17: Spartan and Furious | F17: Spartan and Furious]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*:  Click to save this page&lt;br /&gt;
* In a separate window, [http://www.socialledge.com/sjsu/index.php?title=Sample_Project_Report browse to this page], click &amp;quot;Edit&amp;quot; and COPY the entire Wikipedia markup&lt;br /&gt;
*:  Now click on the red link that belongs to your project&lt;br /&gt;
*:  Paste this template for your project, and work on setting weekly goals in your schedule section.&lt;br /&gt;
*:  Save the template&lt;br /&gt;
* Now go back to your project's Wiki page, click &amp;quot;EDIT&amp;quot;&lt;br /&gt;
*: Add information about the team members&lt;br /&gt;
*: Add a link to your GITLAB project and add users who can access your project:&lt;br /&gt;
*:  My GITLAB username is simply, &amp;quot;'''preet'''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= CAN Communication =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
You can work in groups of 2:&lt;br /&gt;
&lt;br /&gt;
*Build and interface the CAN transceiver with another person's CAN transceiver.&lt;br /&gt;
*Initialize the CAN Bus (read can.h in the drivers directory).&lt;br /&gt;
*Use a simple periodic message (every 100ms) that is sent from BoardA to BoardB.&lt;br /&gt;
*: For example, if BoardA senses a switch pressed, send a 1-byte message with 0xAA, otherwise send 0x00 if button is not pressed&lt;br /&gt;
*For robustness, if the CAN Bus turns off, simply turn it back on at 1Hz (every 1000ms)&lt;br /&gt;
*On BoardB, simply light up an LED  (or otherwise turn it off) based on the CAN message data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This assignment gives you an overview of practical use of the CAN Bus, and later, by utilizing the DBC file and auto-generation of code, sending and receiving data becomes very easy.  &lt;br /&gt;
&lt;br /&gt;
While this provides bare bones knowledge of how communication works, the future lectures will focus on the application layer while abstracting away the details of CAN messages' data encoding and decoding.&lt;br /&gt;
&lt;br /&gt;
Although the real-time periodic scheduler was not discussed, it might be worth your time to simply turn it on (using #define) since it can help you send periodic messages fairly easily.  This will also help you prepare in advance for the future lectures.&lt;br /&gt;
&lt;br /&gt;
Only turn in the relevant source code, such as main.cpp for both boards.&lt;br /&gt;
&lt;br /&gt;
= Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Write a schedule that is a list of your team's milestones.  This is a tool for you to assign responsibilities and deadlines for your project's milestones.  In general, this should list out when the team as a whole expects a certain functionality to be delivered.&lt;br /&gt;
&lt;br /&gt;
The grading will depend on how well you have assigned your milestones and if the goals are measurable.  For example, milestones such as &amp;quot;interface sensor and send sensor data over CAN messages&amp;quot; and &amp;quot;add a filter for the sensor data&amp;quot; are measurable goals, whereas, &amp;quot;interface sensor&amp;quot;, and &amp;quot;send data&amp;quot; are too generic and un-measurable goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Periodic Scheduler =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
INDIVIDUAL HOMEWORK:&lt;br /&gt;
&lt;br /&gt;
Easy homework, use the periodic tasks to add two functions that they call, run your program, and then do the following:&lt;br /&gt;
&lt;br /&gt;
*Modify main.cpp to configure the periodic scheduler, and leave the terminal task present that you will use later in the assignment&lt;br /&gt;
*Design a Software based &amp;quot;filter&amp;quot;.  The simplest one could be to average a few readings but read and research more on Wikipedia (they even have Psuedocode)&lt;br /&gt;
*Add the two new &amp;quot;Sensor&amp;quot; periodic callbacks, one at 1Hz, the other at 10Hz&lt;br /&gt;
*:  In the 10Hz callback, design a Software filter to filter the Light sensor readings&lt;br /&gt;
*:  In the 1Hz callback, print out the filtered sensor reading.&lt;br /&gt;
*Do more experiments with the &amp;quot;Logging&amp;quot; capability&lt;br /&gt;
*:  Log some data using LOG_INFO() or similar message from file_logger.h&lt;br /&gt;
*Use &amp;quot;info 5000&amp;quot; command to see CPU utilization for 5 seconds.&lt;br /&gt;
*Use &amp;quot;cat log.csv&amp;quot; to view the log file data.&lt;br /&gt;
&lt;br /&gt;
Attach your output to Canvas along with your code.&lt;br /&gt;
&lt;br /&gt;
= CAN TX / RX using Auto-gen code =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Work in groups of 2 by assuming one board is the DRIVER while the other board is the MOTOR or SENSOR.&lt;br /&gt;
&lt;br /&gt;
The objective of the assignment is to demonstrate CAN data handling using the auto-generated code.  Follow these steps:&lt;br /&gt;
&lt;br /&gt;
*Define a DBC message that your controller sends (TX)&lt;br /&gt;
*Define a DBC message that your controller receives (RX)&lt;br /&gt;
*Attempt to recover the CAN Bus (from Bus OFF) at 1Hz (both Boards)&lt;br /&gt;
*Send the TX message from BoardA at a fixed frequency, such as 10Hz&lt;br /&gt;
*Attempt to receive the RX message (on BoardB) at the designated frequency, and light up an LED when the message enters the MIA state&lt;br /&gt;
*Prove that the MIA handling is occurring as intended (simple LED test by disconnecting the board that sends you a periodic message).&lt;br /&gt;
*Prove that valid data is being received and reacted upon (such as displaying received sensor reading on the LED display)&lt;br /&gt;
&lt;br /&gt;
This is a powerful assignment that demonstrates how to send and receive data using the auto-generated code that is derived from your DBC file.  This will be the stepping stone of the overall CAN communication that will occur in your project.&lt;br /&gt;
&lt;br /&gt;
= Final Wiki Schedule =&lt;br /&gt;
&lt;br /&gt;
= DBC File =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Create your CAN communication format for each controller and link your DBC file to your Project report at your wikipedia page.&lt;br /&gt;
&lt;br /&gt;
Make sure that the auto-generated code is created as intended and that you don't run into a DBC or the auto-generation issue.  In other words, the auto-generated code should compile on all controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Communication Demo =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Demonstrate that each ECU is able to communicate over the CAN Bus&lt;br /&gt;
&lt;br /&gt;
*Code should utilize the auto-generated artifacts from the DBC file&lt;br /&gt;
*MIA handling should occur on the messages that are expected to be received&lt;br /&gt;
*:  Upon MIA, an LED indicator should indicate that there is 1 or more message in the MIA state&lt;br /&gt;
&lt;br /&gt;
In person demonstration should be given for this assignment and there is nothing to turn in otherwise.&lt;br /&gt;
&lt;br /&gt;
= Producer / Consumer Tasks =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
*Create a task that polls the acceleration sensor, and determines the orientation of the board, such as &amp;quot;up, down, left, right&amp;quot;.  Create an enumeration such as &amp;quot;typdef enum { invalid, up, down, left, right, }orientation_t;&lt;br /&gt;
*Create a queue, and have the first task send orientation values every second to the queue.&lt;br /&gt;
*:  Print something BEFORE and AFTER sending the enumeration value to the queue.&lt;br /&gt;
*Create a task that is waiting on the orientation enumeration to be sent by the previous task.&lt;br /&gt;
*:  Print something immediately after the second task receives the data from the queue.&lt;br /&gt;
*Use same priority for both tasks and note down the print-outs.&lt;br /&gt;
*Alter the priority of second task to use higher priority, and note down the print-outs&lt;br /&gt;
*:  Note down your results, and submit it at the top of your code submission.&lt;br /&gt;
&lt;br /&gt;
= Project Prototypes =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Project prototypes are expected to demonstrate the following:&lt;br /&gt;
&lt;br /&gt;
*Reliable CAN communication between different ECUs&lt;br /&gt;
*Basic obstacle avoidance (free-run mode)&lt;br /&gt;
*Reliable sensor inputs (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Reasonable motor commands (PCAN will be used by class mentors to assess)&lt;br /&gt;
*Extra credit if you go above and beyond and show even more progress such as a working Android app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Git =&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
&lt;br /&gt;
Your GIT repositories will be audited to assess how much contribution you have made to your GIT project.  At minimum, there should be something checked-into the main branch to demonstrate that you know how to use GIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Individual Contribution =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be grading your group members based on how much or how little they contributed to the project.  You must be ethical, and honest, and not go based on your &amp;quot;emotions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Name	Letter Grade	Notes&lt;br /&gt;
Last1, First1	A	This student was involved in all aspects of the project design and was present at all group meetings.&lt;br /&gt;
Last2, First2	C-	This student contributed to writing the report but was absent for many group meetings.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=51343</id>
		<title>Industrial Application using CAN Bus</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Industrial_Application_using_CAN_Bus&amp;diff=51343"/>
				<updated>2019-02-20T04:39:27Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Class Project Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Class Information =&lt;br /&gt;
==Presentation on Autonomous Vehicles==&lt;br /&gt;
http://www.slideshare.net/ShantanuVashishtha1/autonomous-vehicles-70049669&lt;br /&gt;
&lt;br /&gt;
== Useful Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
[[Basic Git Tutorial]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CAN Bus ===&lt;br /&gt;
[[CAN BUS Tutorial | CAN BUS]]&lt;br /&gt;
&amp;lt;BR/ &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[DBC Format]] ===&lt;br /&gt;
DBC format is a well known format to describe the format of a CAN message.  This is essentially the schema of the data that is communicated over the CAN bus.  Please view the linked [[DBC Format]] article for details before reading further.&lt;br /&gt;
&lt;br /&gt;
=== BusMaster Tutorial ===&lt;br /&gt;
[[BusMaster | BusMaster Tutorial]]&lt;br /&gt;
&lt;br /&gt;
== Class Assignments ==&lt;br /&gt;
=== [[Lab Assignments]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Class Project ==&lt;br /&gt;
=== [[Self-driving Car]] ===&lt;br /&gt;
In this class project, students accomplish a self-drivable RC car with the following learning objectives:&lt;br /&gt;
*  Learn CAN Bus and how to communicate in an industrial or  automotive environment.&lt;br /&gt;
*  Learn integration and testing across different controllers.&lt;br /&gt;
*  Learn how to work in teams.&lt;br /&gt;
*  Learn basics of an RTOS.&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Project Reports ==&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2019 | Spring 2019]] ===&lt;br /&gt;
*  [[S19: Tech Savy | F19: Tech Savy]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2017 | Fall 2017]] ===&lt;br /&gt;
*  [[F17: Alpha | F17: Alpha]]&lt;br /&gt;
*  [[F17: FoxP2 | F17 FoxP2]]&lt;br /&gt;
*  [[F17: Optimus | F17 Optimus]]&lt;br /&gt;
*  [[F17: Tata Nano | F17 Tata Nano]]&lt;br /&gt;
*  [[F17: Viserion | F17 Viserion]]&lt;br /&gt;
*  [[F17: Vindicators100 | F17 Vindicators100]]&lt;br /&gt;
*  [[F17: Rolling Thunder | F17: Rolling Thunder]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
*  [[F16: Spartan and Furious | F16: Spartan and Furious]]&lt;br /&gt;
*  [[F16: Titans | F16: Titans]]&lt;br /&gt;
*  [[F16: Kasper | F16: Kasper]]&lt;br /&gt;
*  [[F16: AutoNav | F16: AutoNav]]&lt;br /&gt;
*  [[F16: Thunderbolt| F16: Thunderbolt]]&lt;br /&gt;
*  [[F16: The-Nine| F16: The-Nine]]&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
* [[F15: Quadcopter by Thomas]]&lt;br /&gt;
* [[F15: Undergrads++]]&lt;br /&gt;
* [[F15: TopGun]]&lt;br /&gt;
* [[F15: Fury]]&lt;br /&gt;
* [[F15: Minion]]&lt;br /&gt;
* [[F15: ThunderBird]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE243 Fall 2014 | Fall 2014]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F14: Team2-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team3-Self Driving Car - Optimus Prime]]&lt;br /&gt;
* [[F14: Team4-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Team5-Self Driving Car - AUG]]&lt;br /&gt;
* [[F14: Self Driving Undergrad Team]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F18:_Flappy_Bird&amp;diff=48649</id>
		<title>F18: Flappy Bird</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F18:_Flappy_Bird&amp;diff=48649"/>
				<updated>2018-10-10T02:37:28Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /* Schedule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
This section should be a couple lines to describe what your project does.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Yaron Alexandrovich&lt;br /&gt;
**   &lt;br /&gt;
*  Emil Kurian&lt;br /&gt;
**   &lt;br /&gt;
*  Gerard Ramos&lt;br /&gt;
**   &lt;br /&gt;
*  Fred Sun&lt;br /&gt;
**   &lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
Show a simple table or figures that show your scheduled as planned before you started working on the project.  Then in another table column, write down the actual schedule so that readers can see the planned vs. actual goals.  The point of the schedule is for readers to assess how to pace themselves if they are doing a similar project.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Actual&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/8&lt;br /&gt;
| Task list&lt;br /&gt;
| Completed?  Problems Encountered?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/15&lt;br /&gt;
| Task list 2&lt;br /&gt;
| Completed?  Problems Encountered??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=F18:_Flappy_Bird&amp;diff=48648</id>
		<title>F18: Flappy Bird</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=F18:_Flappy_Bird&amp;diff=48648"/>
				<updated>2018-10-10T02:35:25Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: Created page with &amp;quot;=== Grading Criteria === &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; *  How well is Software &amp;amp; Hardware Design described? *  How well can this report be used to reproduce this project? *  Code Quali...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Grading Criteria ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
*  How well is Software &amp;amp; Hardware Design described?&lt;br /&gt;
*  How well can this report be used to reproduce this project?&lt;br /&gt;
*  Code Quality&lt;br /&gt;
*  Overall Report Quality:&lt;br /&gt;
**  Software Block Diagrams&lt;br /&gt;
**  Hardware Block Diagrams&lt;br /&gt;
**:  Schematic Quality&lt;br /&gt;
**  Quality of technical challenges and solutions adopted.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Title ==&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
This section should be a couple lines to describe what your project does.&lt;br /&gt;
&lt;br /&gt;
== Objectives &amp;amp; Introduction ==&lt;br /&gt;
Show list of your objectives.  This section includes the high level details of your project.  You can write about the various sensors or peripherals you used to get your project completed.&lt;br /&gt;
&lt;br /&gt;
=== Team Members &amp;amp; Responsibilities ===&lt;br /&gt;
*  Yaron Alexandrovich&lt;br /&gt;
**   &lt;br /&gt;
*  Emil Kurian&lt;br /&gt;
**   &lt;br /&gt;
*  Gerard Ramos&lt;br /&gt;
**   &lt;br /&gt;
*  Fred Sun&lt;br /&gt;
**   &lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
Show a simple table or figures that show your scheduled as planned before you started working on the project.  Then in another table column, write down the actual schedule so that readers can see the planned vs. actual goals.  The point of the schedule is for readers to assess how to pace themselves if they are doing a similar project.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Week#&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Date&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Task&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Actual&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
| 10/8&lt;br /&gt;
| Task list&lt;br /&gt;
| Completed?  Problems Encountered?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Parts List &amp;amp; Cost ==&lt;br /&gt;
Give a simple list of the cost of your project broken down by components.  Do not write long stories here.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Implementation ==&lt;br /&gt;
The design section can go over your hardware and software design.  Organize this section using sub-sections that go over your design and implementation.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Design ===&lt;br /&gt;
Discuss your hardware design here.  Show detailed schematics, and the interface here.&lt;br /&gt;
&lt;br /&gt;
=== Hardware Interface ===&lt;br /&gt;
In this section, you can describe how your hardware communicates, such as which BUSes used.  You can discuss your driver implementation here, such that the '''Software Design''' section is isolated to talk about high level workings rather than inner working of your project.&lt;br /&gt;
&lt;br /&gt;
=== Software Design ===&lt;br /&gt;
Show your software design.  For example, if you are designing an MP3 Player, show the tasks that you are using, and what they are doing at a high level.  Do not show the details of the code.  For example, do not show exact code, but you may show psuedocode and fragments of code.  Keep in mind that you are showing DESIGN of your software, not the inner workings of it.  &lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
This section includes implementation, but again, not the details, just the high level.  For example, you can list the steps it takes to communicate over a sensor, or the steps needed to write a page of memory onto SPI Flash.  You can include sub-sections for each of your component implementation.&lt;br /&gt;
&lt;br /&gt;
== Testing &amp;amp; Technical Challenges ==&lt;br /&gt;
Describe the challenges of your project.  What advise would you give yourself or someone else if your project can be started from scratch again?&lt;br /&gt;
Make a smooth transition to testing section and described what it took to test your project.&lt;br /&gt;
&lt;br /&gt;
Include sub-sections that list out a problem and solution, such as:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;Bug/issue name&amp;gt; ===&lt;br /&gt;
Discuss the issue and resolution.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
Conclude your project here.  You can recap your testing and problems.  You should address the &amp;quot;so what&amp;quot; part here to indicate what you ultimately learnt from this project.  How has this project increased your knowledge?&lt;br /&gt;
&lt;br /&gt;
=== Project Video ===&lt;br /&gt;
Upload a video of your project and post the link here.&lt;br /&gt;
&lt;br /&gt;
=== Project Source Code ===&lt;br /&gt;
*  [https://sourceforge.net/projects/sjsu/files/CmpE_S2016/ Sourceforge Source Code Link]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
=== Acknowledgement ===&lt;br /&gt;
Any acknowledgement that you may wish to provide can be included here.&lt;br /&gt;
&lt;br /&gt;
=== References Used ===&lt;br /&gt;
List any references used in project.&lt;br /&gt;
&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
You can list the references you used.&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=48647</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=48647"/>
				<updated>2018-10-10T02:33:37Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: /*  Fall 2018 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
*  [[F18: Catch me if you can]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=48646</id>
		<title>Realtime OS on Embedded Systems</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=Realtime_OS_on_Embedded_Systems&amp;diff=48646"/>
				<updated>2018-10-10T02:33:08Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Program History ==&lt;br /&gt;
My contribution in Embedded System courses started with CmpE146.  This course teaches students on how to write UART, SPI, and I2C Drivers and interface their drivers to peripherals.  There are about 8 weekly labs in which students not only write drivers, but also learn the core of Real-time Operating Systems including threading (tasks), and inter-task communication using Queues and Semaphores.  FreeRTOS is the operating system used with C/C++ Compiler based on GNU.&lt;br /&gt;
&lt;br /&gt;
When the course was started by Dr. Ozemek @ SJSU (sometime before 2005), not many resources were out there.  Still, with helpful guidance from Dr. Ozemek, interesting projects were created.  This is when I started to help out in Embedded System Courses, and by collecting and sharing knowledge, we've raised the bar at SJSU!  &lt;br /&gt;
&lt;br /&gt;
There have been many great projects at SJSU, but since no one knew about them, the hard work went to a waste for anyone but the creator.  But now we've got the infrastructure to share the projects, which turn out as great references for future students.  Here is my project that started around 2007, and turned into Bachelor's Senior Design Project: &amp;lt;br/&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp YouTube Video of Self-Navigating Car]&lt;br /&gt;
&lt;br /&gt;
As of 2013, I have broadened my contribution to other embedded system courses like CmpE240, CmpE243 and CmpE244.&lt;br /&gt;
&lt;br /&gt;
== Lab Assignments ==&lt;br /&gt;
This article contains laboratory assignments and resources.  The assignments are under construction as we move towards SJ-One development board.&lt;br /&gt;
*  [[Embedded System Tutorial Tasks | Lesson 0: Multiple Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial GPIO | Lesson 1 : GPIO]]&lt;br /&gt;
*  [[Embedded System Tutorial UART | Lesson 2 : UART]]&lt;br /&gt;
*  [[Embedded System Tutorial SPI  | Lesson 3 : SPI]]&lt;br /&gt;
*  [[Embedded System I2C Tutorial  | Lesson 4 : I2C]]&lt;br /&gt;
*  [[Embedded System Tutorial Interrupts | Lesson 5 : Interrupts]]&lt;br /&gt;
*  [[Embedded System Tutorial FreeRTOS | Lesson 6 : FreeRTOS Tasks]]&lt;br /&gt;
*  [[Embedded System Tutorial File I/O | Lesson 7 : FreeRTOS Application Programming]]&lt;br /&gt;
&lt;br /&gt;
==== Class Project ====&lt;br /&gt;
* [[MP3 Player]]&lt;br /&gt;
&lt;br /&gt;
==Other reference articles==&lt;br /&gt;
*  [[Bitmasking Tutorial]] (+ GPIO Example)&lt;br /&gt;
*  [[ LPC17xx Memory Map &amp;amp; Interrupts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Senior Design Projects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
== Semester Projects ==&lt;br /&gt;
Every semester, students are given about 7-10 weeks to complete their projects.  During this short time-span, students form groups, order parts, and begin working on their projects.  The work performed during the semester is documented at this Wiki.&lt;br /&gt;
&lt;br /&gt;
Here is the list of Preet's documented projects:&amp;lt;BR/&amp;gt;&lt;br /&gt;
*  [[Preet's Relay Controller Project]]&lt;br /&gt;
*  [[Nordic Low Powered Mesh Network stack]]&lt;br /&gt;
*  [http://www.youtube.com/watch?v=QEadXdRl3ws&amp;amp;feature=plcp Senior Design Project (MS-CmpE) Video]&lt;br /&gt;
&lt;br /&gt;
Here is another resource for good project references :&lt;br /&gt;
[http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/ Cornell EE476 Projects]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
=== Appendix ===&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2018 | Fall 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[F18: Flappy Bird]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2018 | Spring 2018]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S18: Team Nemesis(SJSU Cam)]]&lt;br /&gt;
*  [[S18: Death Race]]&lt;br /&gt;
*  [[S18: Hand gesture controlled multiplayer game]]&lt;br /&gt;
*  [[S18: Smart Rock Paper Scissors]]&lt;br /&gt;
*  [[S18: Spybot]]&lt;br /&gt;
*  [[S18: Audio Spectrum Analyzer with Graphics Display]]&lt;br /&gt;
*  [[S18: XY-Plotter]]&lt;br /&gt;
*  [[S18: RGB LED Sound Behavior on a Skateboard]]&lt;br /&gt;
*  [[S18: Spark - MP3 Music Player with Audio Spectrum]]&lt;br /&gt;
*  [[S18: Traffic Menace Video Game]]&lt;br /&gt;
*  [[S18: M.E.O.W]]&lt;br /&gt;
*  [[S18: Rahee]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2017 | Spring 2017]] ===&lt;br /&gt;
&lt;br /&gt;
*  [[S17: Wake up Barista]]&lt;br /&gt;
*  [[S17: Propeller Clock]]&lt;br /&gt;
*  [[S17: Sky Knight]]&lt;br /&gt;
*  [[S17: MyAutoHealth]]&lt;br /&gt;
*  [[S17: Logan]]&lt;br /&gt;
*  [[S17: ElectricBoard]]&lt;br /&gt;
*  [[S17: CamBot]]&lt;br /&gt;
*  [[S17: Sphero Droid]]&lt;br /&gt;
*  [[S17: Smart Planter]]&lt;br /&gt;
*  [[S17: Boom-Z Equalizer]]&lt;br /&gt;
*  [[S17: Interactive Snake and ladder ]]&lt;br /&gt;
*  [[S17: Smart Health Gear]]&lt;br /&gt;
*  [[S17: Halo]]&lt;br /&gt;
*  [[S17: Squad]]&lt;br /&gt;
*  [[S17: Smart security system]]&lt;br /&gt;
&amp;lt;BR/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2016 | Fall 2016]] ===&lt;br /&gt;
&lt;br /&gt;
CMPE146:&lt;br /&gt;
* [http://www.socialledge.com/sjsu/index.php?title=F16:_Seismograph F16: Seismograph]&lt;br /&gt;
* [[F16: Piano Glove]]&lt;br /&gt;
* [[F16: Object Detector]]&lt;br /&gt;
* [[F16: Autonomous Nautical System]]&lt;br /&gt;
* [[F16: Autonomous Fire Extinguishing Vehicle]]&lt;br /&gt;
* [[F16: Autonomous Runaway Alarm Car]]&lt;br /&gt;
* [[F16: E-Bike]]&lt;br /&gt;
* [[F16: NotifyBox]]&lt;br /&gt;
* [[F16: Wireless Tilt Controlled Camera Arm]]&lt;br /&gt;
* [[F16: OBD2 Reader]]&lt;br /&gt;
* [[F16: Micro Watch Monitoring System]]&lt;br /&gt;
* [[F16: Door Alarm System]]&lt;br /&gt;
* [[http://www.socialledge.com/sjsu/index.php?title=F16:_I2Coffee F16: UART Coffee]]&lt;br /&gt;
* [[F16: SJone to FPGA wireless integration]]&lt;br /&gt;
&lt;br /&gt;
=== [[Spring 2016 | Spring 2016]] ===&lt;br /&gt;
*  [[S16: Fantastic Four]]&lt;br /&gt;
*  [[S16: Simpsons]]&lt;br /&gt;
*  [[S16: Mars 1]]&lt;br /&gt;
*  [[S16: OpenSJ Bluz]]&lt;br /&gt;
*  [[S16: Motion Copy Bot]]&lt;br /&gt;
*  [[S16: Biker Assist]]&lt;br /&gt;
*  [[S16: Helios]]&lt;br /&gt;
*  [[S16: Sound Buddy]]&lt;br /&gt;
*  [[S16: Warriors]]&lt;br /&gt;
*  [[S16: Expendables]]&lt;br /&gt;
*  [[S16: Ahava]]&lt;br /&gt;
*  [[S16: Number 1]]&lt;br /&gt;
*  [[S16: SkyNet]]&lt;br /&gt;
*  [[S16: SmartDoorLock]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cmpe 146:&lt;br /&gt;
*  [[S16: Camera Gimbal]]&lt;br /&gt;
*  [[S16: Laser Harp]]&lt;br /&gt;
*  &amp;lt;strike&amp;gt;[[S16: Laser Cutter Motor Controller]]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*  [[S16: Sprinkler]]&lt;br /&gt;
*  [[S16: The Jatrick Car]]&lt;br /&gt;
*  [[S16: Dan]]&lt;br /&gt;
*  [[S16: Robolamp]]&lt;br /&gt;
*  [[S16: Pinball]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Fall 2015 | Fall 2015]] ===&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[F15: Autonomous Mobile]]&lt;br /&gt;
* [[F15: Car Report]]&lt;br /&gt;
* [[F15: Electronic Piano]]&lt;br /&gt;
* [[F15: Doorknock over Bluetooth]]&lt;br /&gt;
* [[F15: Smart Car]]&lt;br /&gt;
* [[F15: Plant Control]]&lt;br /&gt;
* [[F15: Laser Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;HR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2015 | Spring 2015]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S15: Quadcopter - It flies]]&lt;br /&gt;
* [[S15: Remote Learner]]&lt;br /&gt;
* [[S15: Protocol Interface: I2C - CAN Bridge]]&lt;br /&gt;
* [[S15: Vision RC Car]]&lt;br /&gt;
* [[S15: SJeight Octocopter]]&lt;br /&gt;
* [[S15: Swarm Robots]]&lt;br /&gt;
* [[S15: Smart Sparta Parking System]]&lt;br /&gt;
* [[S15: Touch Navigator]]&lt;br /&gt;
* [[S15: Wizard's Chess System]]&lt;br /&gt;
* [[S15: Bug Rider]]&lt;br /&gt;
* [[S15: Real Time Brake Assist (RTBA)]]&lt;br /&gt;
* [[S15: Wireless Mesh Network]]&lt;br /&gt;
* [[S15: Wireless Power Transfer System]]&lt;br /&gt;
* [[S15: Drone]]&lt;br /&gt;
* [[S15: Tree Node using Google Protocol Buffers]]&lt;br /&gt;
* [[S15: Multi-media Car]]&lt;br /&gt;
* [[S15: Hand Gesture Recognition using IR Sensors]]&lt;br /&gt;
* [[S15: CAN controlled RGB LED cubes]]&lt;br /&gt;
* [[S15: Rubik's Cube Solver]]&lt;br /&gt;
* [[S15: RFID Security Box]]&lt;br /&gt;
* [[S15: Automated Meeting Room Reservation]]&lt;br /&gt;
* [[S15: Patient Buddy System (PBS)]]&lt;br /&gt;
&lt;br /&gt;
CmpE146:&lt;br /&gt;
* [[S15: Hovercopter]]&lt;br /&gt;
* [[S15: Triclops: Smart RC Car]]&lt;br /&gt;
* [[S15: Connect Four - Robotic Player]]&lt;br /&gt;
* [[S15: Self-Balancing Robot]]&lt;br /&gt;
* [[S15: MP3 Player with Graphic Equalizer Display]]&lt;br /&gt;
* [[S15: Motion-Controlled RC Car]]&lt;br /&gt;
* [[S15: MENL (Monster Encounter Night Light) ]]&lt;br /&gt;
* [[S15: Tilt Motion Controlled LED Alarm Clock]]&lt;br /&gt;
* [[S15: Alarm Based Coffee Maker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE244 Spring 2014 | Spring 2014]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
*  Senior Project: [[Project Advising: Remote Security System]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* [[S14: Quadcopter]]&lt;br /&gt;
* [[S14: Smart Weather Clock]]&lt;br /&gt;
* [[S14: Divine WINd]]&lt;br /&gt;
* [[S14: Data Acquisition using CAN bus]]&lt;br /&gt;
* [[S14: E-Ink Display for Shopping Tags]]&lt;br /&gt;
* [[S14: Spectrum Analyzer for Audio Frequency Signals]]&lt;br /&gt;
* [[S14: CAN Firmware Uploader]]&lt;br /&gt;
* [[S14: Asset Management and Location System]]&lt;br /&gt;
* [[S14: Location  Tracker]]&lt;br /&gt;
* [[S14:  Androbot]]&lt;br /&gt;
* [[S14: Virtual Dog]]&lt;br /&gt;
* [[S14: Android based Automation]]&lt;br /&gt;
* [[S14: FaceTime Robo]]&lt;br /&gt;
* [[S14: Wireless Control Car]]&lt;br /&gt;
* [[S14: Power Efficient Security Door System for Light-rail using CAN Bus]]&lt;br /&gt;
* [[S14: Android based home monitoring system]]&lt;br /&gt;
* [[S14: Need For Speed]]&lt;br /&gt;
&lt;br /&gt;
CmpE146&lt;br /&gt;
* [[S14: Hyperintelligent NFC Locker of the Future]]&lt;br /&gt;
* [[S14: Smart Planter]]&lt;br /&gt;
* [[S14: Modular Security System]]&lt;br /&gt;
* [[S14: Autonomous Control System]]&lt;br /&gt;
* [[S14: Anti-Crash Car]]&lt;br /&gt;
* [[S14: Tricopter]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE240 Fall 2013 | Fall 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F13: POV Display]]&lt;br /&gt;
* [[F13: Line Following Robot]]&lt;br /&gt;
* [[F13: LED Display]]&lt;br /&gt;
* [[F13: Bulb Ramper]]&lt;br /&gt;
* [[F13: Garage Parking Assistant]]&lt;br /&gt;
* [[F13: Quadcopter]]&lt;br /&gt;
* [[F13: BarkMaster2000]]&lt;br /&gt;
* [[F13: Remote Control Car]]&lt;br /&gt;
* [[F13: Obstacle Avoidance Robot]]&lt;br /&gt;
* [[F13: Vehicle On Board Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2013 | Spring 2013]] ===&lt;br /&gt;
&lt;br /&gt;
* [[S13: 2D Plotter]]&lt;br /&gt;
* [[S13: Smart Cube]]&lt;br /&gt;
* [[S13: Garage Parking Aid]]&lt;br /&gt;
* [[S13: Smart Security]]&lt;br /&gt;
* [[S13: Door Alarm System]]&lt;br /&gt;
* [[S13: Solar Panel Tracker]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Fall 2012|Fall 2012]] ===&lt;br /&gt;
&lt;br /&gt;
* [[F12: Evil Watchdog]]&lt;br /&gt;
* [[F12: Smart Bulb]]&lt;br /&gt;
* [[F12: All Your Base are Belong to You]]&lt;br /&gt;
* [[F12: Android Controlled MP3]]&lt;br /&gt;
* [[F12: Unified Wireless Health Monitoring System]]&lt;br /&gt;
* [[F12: OBD-II Android Monitor]]&lt;br /&gt;
* [[F12: Self-Driving GPS Following Car]]&lt;br /&gt;
* [[F12: Android Door Lock]]&lt;br /&gt;
&lt;br /&gt;
=== [[CmpE146 Spring 2012|Spring 2012]] ===&lt;br /&gt;
*  [[S12: FreeRTOS based QuadCopter]]&lt;br /&gt;
*  [[S12: Web-based MP3 Player]]&lt;br /&gt;
*  [[S12: Self Drive Car]]&lt;br /&gt;
*  [[S12: VAndroid]]&lt;br /&gt;
*  [[S12: Traffic Light Sensing Vehicle]]&lt;br /&gt;
*  [[S12: Sound Reader]]&lt;br /&gt;
*  [[S12: Remote Controlled MP3 Player]]&lt;br /&gt;
*  [[S12: Android Controlled Robot]]&lt;br /&gt;
*  [[S12: Eyes-Free GPS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handy References ==&lt;br /&gt;
*  [[Sample Project Report]]&lt;br /&gt;
*  [[Project Proposal Guidelines]]&lt;br /&gt;
*  [[CmpE146 Lab. Resources]]&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=VM_Development_Package&amp;diff=48645</id>
		<title>VM Development Package</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=VM_Development_Package&amp;diff=48645"/>
				<updated>2018-08-30T04:28:29Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download ===&lt;br /&gt;
*  [https://sourceforge.net/projects/armdevpkg/files/virtualbox_experimental Download this virtual hard disk] file from Sourceforge&lt;br /&gt;
*  Unzip the virtual hard disk to somewhere safe and permanent, such as '''C:/Documents/sjsu_vm/'''&lt;br /&gt;
&lt;br /&gt;
=== Setup VM on VirtualBox ===&lt;br /&gt;
*  Download and install '''VirtualBox''' for your operating system (Windows, MacOS etc.)&lt;br /&gt;
*  Install and run '''VirtualBox'''&lt;br /&gt;
*  Click on '''NEW'''&lt;br /&gt;
*  Give your VM (virtual machine) a name&lt;br /&gt;
*  Select the '''Type''' as '''Linux'''&lt;br /&gt;
*  Select '''Version''' as '''Ubuntu (64-bit)''' and click '''Continue'''&lt;br /&gt;
*  Choose 2560 or more MB of RAM and click '''Continue'''&lt;br /&gt;
*  Choose '''Use an existing virtual hard disk file''' and browse to the VM disk you downloaded, and then click '''Create'''&lt;br /&gt;
&lt;br /&gt;
=== Configure VM ===&lt;br /&gt;
*  Click on the VM you created in VirtualBox, then click '''Settings'''&lt;br /&gt;
*  Go to '''Advanced''' and under '''Shared Clipboard''', select '''Bidirectional'''&lt;br /&gt;
*  Click on '''System''' and ensure 2560 Mbytes (2.5 GBytes) or greater RAM (assuming your laptop has at least 8 Gbytes or so&lt;br /&gt;
*  If your system allows, use 2 CPUs under '''Processor'''&lt;br /&gt;
*  Under '''Display''' use '''128Mbytes''' of RAM&lt;br /&gt;
*  Under '''Audio''', de-select to disable Audio&lt;br /&gt;
&lt;br /&gt;
=== Setup COM port on VM ===&lt;br /&gt;
*  Start your Ubuntu OS&lt;br /&gt;
*  Plugin your USB cable to the board and ensure your board has power&lt;br /&gt;
*  After the system boots, go to '''Devices''' on VirtualBox menu, then '''USB''' and select the USB board to virtually plug into the VM&lt;br /&gt;
&lt;br /&gt;
=== Use Development Environment ===&lt;br /&gt;
*  Open the '''SJSU_dev''' folder when the Ubuntu VM boots&lt;br /&gt;
*  Double click on '''run_eclipse''' to start Eclipse IDE&lt;br /&gt;
*  Develop your code and hit '''Ctrl + B''' to compile in Eclipse&lt;br /&gt;
**  Ensure the program has compiled successfully&lt;br /&gt;
*  Right click anywhere (but not on a file) in '''SJSU_dev''' folder and then click on '''Open terminal'''&lt;br /&gt;
*  Type '''sudo ./run_flash''' to program the compiled HEX file to the board&lt;br /&gt;
**  Note that this assumes you have a file built at '''projects/lpc1758_freertos/_build/lpc1758_freertos.hex'''&lt;br /&gt;
**  Note that this assumes your serial port is at '''/dev/ttyUSB0'''&lt;br /&gt;
**  If the assumptions above are not true, you can edit the '''run_flash''' file&lt;br /&gt;
&lt;br /&gt;
=== Be an Engineer ===&lt;br /&gt;
* Figure out how to use '''Minicom''' on your own&lt;br /&gt;
** This will let you open up the serial port and interact with your board and see the Board's output data from printf()&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=VM_Development_Package&amp;diff=48644</id>
		<title>VM Development Package</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=VM_Development_Package&amp;diff=48644"/>
				<updated>2018-08-30T04:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download ===&lt;br /&gt;
*  [https://sourceforge.net/projects/armdevpkg/files/virtualbox_experimental Download this virtual hard disk] file from Sourceforge&lt;br /&gt;
*  Unzip the virtual hard disk to somewhere safe and permanent, such as '''C:/Documents/sjsu_vm/'''&lt;br /&gt;
&lt;br /&gt;
=== Setup VM on VirtualBox ===&lt;br /&gt;
*  Download and install '''VirtualBox''' for your operating system (Windows, MacOS etc.)&lt;br /&gt;
*  Install and run '''VirtualBox'''&lt;br /&gt;
*  Click on '''NEW'''&lt;br /&gt;
*  Give your VM (virtual machine) a name&lt;br /&gt;
*  Select the '''Type''' as '''Linux'''&lt;br /&gt;
*  Select '''Version''' as '''Ubuntu (64-bit)''' and click '''Continue'''&lt;br /&gt;
*  Choose 2560 or more MB of RAM and click '''Continue'''&lt;br /&gt;
*  Choose '''Use an existing virtual hard disk file''' and browse to the VM disk you downloaded, and then click '''Create'''&lt;br /&gt;
&lt;br /&gt;
=== Configure VM ===&lt;br /&gt;
*  Click on the VM you created in VirtualBox, then click '''Settings'''&lt;br /&gt;
*  Go to '''Advanced''' and under '''Shared Clipboard''', select '''Bidirectional'''&lt;br /&gt;
*  Click on '''System''' and ensure 2560 Mbytes (2.5 GBytes) or greater RAM (assuming your laptop has at least 8 Gbytes or so&lt;br /&gt;
*  If your system allows, use 2 CPUs under '''Processor'''&lt;br /&gt;
*  Under '''Display''' use '''128Mbytes''' of RAM&lt;br /&gt;
*  Under '''Audio''', de-select to disable Audio&lt;br /&gt;
&lt;br /&gt;
=== Setup COM port on VM ===&lt;br /&gt;
*  Start your Ubuntu OS&lt;br /&gt;
*  Plugin your USB cable to the board and ensure your board has power&lt;br /&gt;
*  After the system boots, go to '''Devices''' on VirtualBox menu, then '''USB''' and select the USB board to virtually plug into the VM&lt;br /&gt;
&lt;br /&gt;
=== Use Development Environment ===&lt;br /&gt;
*  Open the '''SJSU_dev''' folder when the Ubuntu VM boots&lt;br /&gt;
*  Double click on '''run_eclipse''' to start Eclipse IDE&lt;br /&gt;
*  Develop your code and hit '''Ctrl + B''' to compile in Eclipse&lt;br /&gt;
**  Ensure the program has compiled successfully&lt;br /&gt;
*  Right click anywhere (but not on a file) in '''SJSU_dev''' folder and then click on '''Open terminal'''&lt;br /&gt;
*  Type '''sudo ./run_flash''' to program the compiled HEX file to the board&lt;br /&gt;
**  Note that this assumes you have a file built at '''projects/lpc1758_freertos/_build/lpc1758_freertos.hex'''&lt;br /&gt;
**  Note that this assumes your serial port is at '''/dev/ttyUSB0'''&lt;br /&gt;
**  If the assumptions above are not true, you can edit the '''run_flash''' file&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	<entry>
		<id>http://socialledge.com/sjsu/index.php?title=VM_Development_Package&amp;diff=48643</id>
		<title>VM Development Package</title>
		<link rel="alternate" type="text/html" href="http://socialledge.com/sjsu/index.php?title=VM_Development_Package&amp;diff=48643"/>
				<updated>2018-08-30T04:26:12Z</updated>
		
		<summary type="html">&lt;p&gt;Preet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Download ===&lt;br /&gt;
*  [https://sourceforge.net/projects/armdevpkg/files/virtualbox_experimental Download this virtual hard disk] file from Sourceforge&lt;br /&gt;
*  Unzip the virtual hard disk to somewhere safe and permanent, such as '''C:/Documents/sjsu_vm/'''&lt;br /&gt;
&lt;br /&gt;
=== Setup VM on VirtualBox ===&lt;br /&gt;
*  Download and install '''VirtualBox''' for your operating system (Windows, MacOS etc.)&lt;br /&gt;
*  Install and run '''VirtualBox'''&lt;br /&gt;
*  Click on '''NEW'''&lt;br /&gt;
*  Give your VM (virtual machine) a name&lt;br /&gt;
*  Select the '''Type''' as '''Linux'''&lt;br /&gt;
*  Select '''Version''' as '''Ubuntu (64-bit)''' and click '''Continue'''&lt;br /&gt;
*  Choose 2560 or more MB of RAM and click '''Continue'''&lt;br /&gt;
*  Choose '''Use an existing virtual hard disk file''' and browse to the VM disk you downloaded, and then click '''Create'''&lt;br /&gt;
&lt;br /&gt;
=== Configure VM ===&lt;br /&gt;
*  Click on the VM you created in VirtualBox, then click '''Settings'''&lt;br /&gt;
*  Go to '''Advanced''' and under '''Shared Clipboard''', select '''Bidirectional'''&lt;br /&gt;
*  Click on '''System''' and ensure 2560 Mbytes (2.5 GBytes) or greater RAM (assuming your laptop has at least 8 Gbytes or so&lt;br /&gt;
*  If your system allows, use 2 CPUs under '''Processor'''&lt;br /&gt;
*  Under '''Display''' use '''128Mbytes''' of RAM&lt;br /&gt;
*  Under '''Audio''', de-select to disable Audio&lt;br /&gt;
&lt;br /&gt;
=== Setup COM port on VM ===&lt;br /&gt;
*  Start your Ubuntu OS&lt;br /&gt;
*  Plugin your USB cable to the board and ensure your board has power&lt;br /&gt;
*  After the system boots, go to '''Devices''' on VirtualBox menu, then '''USB&amp;quot; and select the USB board to virtually plug into the VM&lt;br /&gt;
&lt;br /&gt;
=== Use Development Environment ===&lt;br /&gt;
*  Open the '''SJSU_dev''' folder when the Ubuntu VM boots&lt;br /&gt;
*  Double click on '''run_eclipse''' to start Eclipse IDE&lt;br /&gt;
*  Develop your code and hit '''Ctrl + B''' to compile in Eclipse&lt;br /&gt;
**  Ensure the program has compiled successfully&lt;br /&gt;
*  Right click anywhere (but not on a file) in '''SJSU_dev''' folder and then click on '''Open terminal'''&lt;br /&gt;
*  Type '''sudo ./run_flash''' to program the compiled HEX file to the board&lt;br /&gt;
**  Note that this assumes you have a file built at '''projects/lpc1758_freertos/_build/lpc1758_freertos.hex'''&lt;br /&gt;
**  Note that this assumes your serial port is at '''/dev/ttyUSB0'''&lt;br /&gt;
**  If the assumptions above are not true, you can edit the '''run_flash''' file&lt;/div&gt;</summary>
		<author><name>Preet</name></author>	</entry>

	</feed>