<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://projectswiki.eleceng.adelaide.edu.au/projects/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A1607975</id>
	<title>Projects - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://projectswiki.eleceng.adelaide.edu.au/projects/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A1607975"/>
	<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php/Special:Contributions/A1607975"/>
	<updated>2026-04-24T11:15:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.4</generator>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3597</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3597"/>
		<updated>2015-08-26T06:51:51Z</updated>

		<summary type="html">&lt;p&gt;A1607975: /* Keypad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Provide an application layer which allocates addresses to clients. If I send a text as: &amp;quot;#57 Mr. Watson - Come here&amp;quot;&lt;br /&gt;
I want to see your number then the message: &amp;quot;Mr. Watson - Come here&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
As mentioned throughout this wiki article, the overall aim of this project is to develop a platform that can be used to teach basic &lt;br /&gt;
real-time concepts in a limited embedded system. &amp;lt; br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this reason, the C programming language has been chosen as the main language in this project. C provides a low enough level of abstraction &lt;br /&gt;
for students to be able to appreciate the underlying effects of real-time paradigms, without becoming wrapped up in something like assembly code.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
This project aims to produce an open source local area network (LAN). It is to be based on&lt;br /&gt;
the Arduino platform and use the C programming language. This must operate over an I2C&lt;br /&gt;
bus on the Arduino units with each unit to have its own bus connecting to a centralised server.&lt;br /&gt;
Each client unit must also have its own display and keypad for input/output interaction with&lt;br /&gt;
users. The purpose of this is to create a simple, low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. This system is to include an application layer which&lt;br /&gt;
allocates addresses to clients however there will not be any security or encryption included.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
The University of Adelaide course, Real Time and Embedded Systems, utilises the C pro-&lt;br /&gt;
gramming language to teach real-time and concurrency methodologies. To ensure this is&lt;br /&gt;
effective as possible it is best to use teaching tools which are grounded in familiar tools.&lt;br /&gt;
This is why the example of a LAN implemented in Arduino units using C is a compelling&lt;br /&gt;
choice. Likewise I2C is a well-developed and extensively used bus protocol. Exposing students &lt;br /&gt;
to these tools and protocols which are actively being used in industry is an invaluable&lt;br /&gt;
experience. In previous years, the course has utilised desktop computers to teach the C in&lt;br /&gt;
practicals and the PIC microprocessors as a teaching tool for the embedded systems theory.&lt;br /&gt;
The outcome of this project will enable the two sets of theory taught by the course to be&lt;br /&gt;
concatenated thus removing current disjointed approach of practicals.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
With several closed source networking options available, providing a simple open source alternative is&lt;br /&gt;
an advantage. Physical implementation is left to the user, and such this system might find itself in large scale remote sensing and monitoring situations. &amp;lt;br /&amp;gt;&lt;br /&gt;
Some examples might include: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Vineyard water table level monitoring. &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Mine environment variable sensing.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Technical Details&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Screen&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
The chosen screen was the LCD12864 and is shown in appendix C. This screen was chosen&lt;br /&gt;
for its flexibility and low cost as discussed above in the budget. It communicates to the&lt;br /&gt;
Arduino through SPI however this is mostly abstracted away and is not of concern to&lt;br /&gt;
this project. The Screen is a 128 x 64 pixel LCD shield. The header bar&lt;br /&gt;
allows for identification information and incoming message alert. Under this there is room&lt;br /&gt;
for the received or in progress outgoing message. The size of this is three rows of sixteen&lt;br /&gt;
characters allowing for a maximum message size of forty five characters long. This is well&lt;br /&gt;
within the memory requirements of the Arduino Uno and should allow for several messages&lt;br /&gt;
to be queued. &lt;br /&gt;
&lt;br /&gt;
A library of code was found for the screen. A significant proportion of this is written&lt;br /&gt;
in C meaning little work is required to utilise this as part of the project. The useful&lt;br /&gt;
inclusions from this library in the context of the project are the font library, the ability to&lt;br /&gt;
draw lines and the cursor function. The font library allows us to select from a wide variety&lt;br /&gt;
of sizes and characters. This will be further discussed below. The line drawing functions allow &lt;br /&gt;
the screen to be sectioned of into user-editable and non-user-editable sections. This also increases &lt;br /&gt;
readability and usability. The cursor function allows for easier message editing but does however bring further design choices.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Keypad&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As discussed in previous sections the keypad being used as the primary input device for this&lt;br /&gt;
project is the FIT0129 membrane keypad. Text input will be&lt;br /&gt;
entered in the style of old mobile phone keypad. The keypad&lt;br /&gt;
is to be connected to the Arduino Uno through the digital pass through connectors on the&lt;br /&gt;
screen shield.&lt;br /&gt;
To investigate the waveform of the button presses, one horizontal line was connected to&lt;br /&gt;
a five Volt power source and a vertical line was connected to the oscilloscope. This allowed the waveform to be inspected and the shortest press to be estimated.&lt;br /&gt;
The waveform has very little bounce which implies that including a de-bounce algorithm is&lt;br /&gt;
not necessary in this project. The minimum button press&lt;br /&gt;
time was fifty milliseconds. This is an important as it effects the polling time and total&lt;br /&gt;
utilisation of processing time.&lt;br /&gt;
When a button is held down, the waveform persists. This means a choice has to be made&lt;br /&gt;
between the press counting as a single press or as many presses until the button is released.&lt;br /&gt;
The programming of these two choices is equally challenging and thus it was decided to treat&lt;br /&gt;
21&lt;br /&gt;
the long press as a single press and to wait for the button to be released before looking for&lt;br /&gt;
the new press.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
The cursor functionality has been started as the included library mentioned above includes&lt;br /&gt;
cursor functions. This has been worked with and functions allowing the cursor to work with&lt;br /&gt;
the chosen screen layout and specifc message size have been outlined in the code. Functions&lt;br /&gt;
allowing the cursor to be moved between characters in all situations have also been created&lt;br /&gt;
for the specifc screen layout that has been chosen. This has lead to a number of design&lt;br /&gt;
decisions which have been made.&lt;br /&gt;
The first is whether the text should be inserted or overridden when the cursor has been&lt;br /&gt;
backtracked through the text. Overriding the text is less intensive computationally and is&lt;br /&gt;
simpler to program. However from a usability perspective insert is the more natural option&lt;br /&gt;
as this is the method of many modern devices. For these reasons override has been chosen&lt;br /&gt;
initially however if time and resources permit insert is an extension goal to the project.&lt;br /&gt;
Secondly a choice between allowing users to insert text anywhere in the message string,&lt;br /&gt;
even after blank space, or only where text has already been placed (or a adding to the end).&lt;br /&gt;
A decision was made to&lt;br /&gt;
allow the user to insert characters anywhere in the message, regardless of unused space and to fill the unused space with spaces.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Inter Integrated Circuit&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Messaging&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;References and Standards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We are currently implementing the threads using [http://dunkels.com/adam/pt/ Protothreads], a low-overhead, stackless approach. &amp;lt;br /&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/u8glib/ Universal Graphics Library (u8glib)], is a general graphics library for communication with various (read many)&lt;br /&gt;
standard graphical screens. We chose this as a simple and easy to use library, we many options available for extension if required. &amp;lt;br /&amp;gt;&lt;br /&gt;
Communication will be through the [https://en.wikipedia.org/wiki/I%C2%B2C I2C] protocol. This protocol is simple to follow, and a good introduction for students with limited exposure to &lt;br /&gt;
embedded communication. &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3594</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3594"/>
		<updated>2015-08-26T06:42:25Z</updated>

		<summary type="html">&lt;p&gt;A1607975: /* Significance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Provide an application layer which allocates addresses to clients. If I send a text as: &amp;quot;#57 Mr. Watson - Come here&amp;quot;&lt;br /&gt;
I want to see your number then the message: &amp;quot;Mr. Watson - Come here&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
As mentioned throughout this wiki article, the overall aim of this project is to develop a platform that can be used to teach basic &lt;br /&gt;
real-time concepts in a limited embedded system. &amp;lt; br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this reason, the C programming language has been chosen as the main language in this project. C provides a low enough level of abstraction &lt;br /&gt;
for students to be able to appreciate the underlying effects of real-time paradigms, without becoming wrapped up in something like assembly code.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
This project aims to produce an open source local area network (LAN). It is to be based on&lt;br /&gt;
the Arduino platform and use the C programming language. This must operate over an I2C&lt;br /&gt;
bus on the Arduino units with each unit to have its own bus connecting to a centralised server.&lt;br /&gt;
Each client unit must also have its own display and keypad for input/output interaction with&lt;br /&gt;
users. The purpose of this is to create a simple, low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. This system is to include an application layer which&lt;br /&gt;
allocates addresses to clients however there will not be any security or encryption included.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
The University of Adelaide course, Real Time and Embedded Systems, utilises the C pro-&lt;br /&gt;
gramming language to teach real-time and concurrency methodologies. To ensure this is&lt;br /&gt;
effective as possible it is best to use teaching tools which are grounded in familiar tools.&lt;br /&gt;
This is why the example of a LAN implemented in Arduino units using C is a compelling&lt;br /&gt;
choice. Likewise I2C is a well-developed and extensively used bus protocol. Exposing students &lt;br /&gt;
to these tools and protocols which are actively being used in industry is an invaluable&lt;br /&gt;
experience. In previous years, the course has utilised desktop computers to teach the C in&lt;br /&gt;
practicals and the PIC microprocessors as a teaching tool for the embedded systems theory.&lt;br /&gt;
The outcome of this project will enable the two sets of theory taught by the course to be&lt;br /&gt;
concatenated thus removing current disjointed approach of practicals.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
With several closed source networking options available, providing a simple open source alternative is&lt;br /&gt;
an advantage. Physical implementation is left to the user, and such this system might find itself in large scale remote sensing and monitoring situations. &amp;lt;br /&amp;gt;&lt;br /&gt;
Some examples might include: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Vineyard water table level monitoring. &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Mine environment variable sensing.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Technical Details&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Screen&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
The chosen screen was the LCD12864 and is shown in appendix C. This screen was chosen&lt;br /&gt;
for its flexibility and low cost as discussed above in the budget. It communicates to the&lt;br /&gt;
Arduino through SPI however this is mostly abstracted away and is not of concern to&lt;br /&gt;
this project. The Screen is a 128 x 64 pixel LCD shield. The header bar&lt;br /&gt;
allows for identification information and incoming message alert. Under this there is room&lt;br /&gt;
for the received or in progress outgoing message. The size of this is three rows of sixteen&lt;br /&gt;
characters allowing for a maximum message size of forty five characters long. This is well&lt;br /&gt;
within the memory requirements of the Arduino Uno and should allow for several messages&lt;br /&gt;
to be queued. &lt;br /&gt;
&lt;br /&gt;
A library of code was found for the screen. A significant proportion of this is written&lt;br /&gt;
in C meaning little work is required to utilise this as part of the project. The useful&lt;br /&gt;
inclusions from this library in the context of the project are the font library, the ability to&lt;br /&gt;
draw lines and the cursor function. The font library allows us to select from a wide variety&lt;br /&gt;
of sizes and characters. This will be further discussed below. The line drawing functions allow &lt;br /&gt;
the screen to be sectioned of into user-editable and non-user-editable sections. This also increases &lt;br /&gt;
readability and usability. The cursor function allows for easier message editing but does however bring further design choices.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Keypad&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As discussed in previous sections the keypad being used as the primary input device for this&lt;br /&gt;
project is the FIT0129 membrane keypad. Text input will be&lt;br /&gt;
entered in the style of old mobile phone keypad. The keypad&lt;br /&gt;
is to be connected to the Arduino Uno through the digital pass through connectors on the&lt;br /&gt;
screen shield.&lt;br /&gt;
To investigate the waveform of the button presses, one horizontal line was connected to&lt;br /&gt;
a five Volt power source and a vertical line was connected to the oscilloscope. This allowed the waveform to be inspected and the shortest press to be estimated.&lt;br /&gt;
The waveform has very little bounce which implies that including a de-bounce algorithm is&lt;br /&gt;
not necessary in this project. This is pictured in appendix E. The minimum button press&lt;br /&gt;
time was fifty milliseconds. This is an important as it effects the polling time and total&lt;br /&gt;
utilisation of processing time.&lt;br /&gt;
When a button is held down, the waveform persists. This means a choice has to be made&lt;br /&gt;
between the press counting as a single press or as many presses until the button is released.&lt;br /&gt;
The programming of these two choices is equally challenging and thus it was decided to treat&lt;br /&gt;
21&lt;br /&gt;
the long press as a single press and to wait for the button to be released before looking for&lt;br /&gt;
the new press.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
The cursor functionality has been started as the included library mentioned above includes&lt;br /&gt;
cursor functions. This has been worked with and functions allowing the cursor to work with&lt;br /&gt;
the chosen screen layout and specifc message size have been outlined in the code. Functions&lt;br /&gt;
allowing the cursor to be moved between characters in all situations have also been created&lt;br /&gt;
for the specifc screen layout that has been chosen. This has lead to a number of design&lt;br /&gt;
decisions which have been made.&lt;br /&gt;
The first is whether the text should be inserted or overridden when the cursor has been&lt;br /&gt;
backtracked through the text. Overriding the text is less intensive computationally and is&lt;br /&gt;
simpler to program. However from a usability perspective insert is the more natural option&lt;br /&gt;
as this is the method of many modern devices. For these reasons override has been chosen&lt;br /&gt;
initially however if time and resources permit insert is an extension goal to the project.&lt;br /&gt;
Secondly a choice between allowing users to insert text anywhere in the message string,&lt;br /&gt;
even after blank space, or only where text has already been placed (or a adding to the end).&lt;br /&gt;
A decision was made to&lt;br /&gt;
allow the user to insert characters anywhere in the message, regardless of unused space and to fill the unused space with spaces.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Inter Integrated Circuit&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Messaging&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;References and Standards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We are currently implementing the threads using [http://dunkels.com/adam/pt/ Protothreads], a low-overhead, stackless approach. &amp;lt;br /&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/u8glib/ Universal Graphics Library (u8glib)], is a general graphics library for communication with various (read many)&lt;br /&gt;
standard graphical screens. We chose this as a simple and easy to use library, we many options available for extension if required. &amp;lt;br /&amp;gt;&lt;br /&gt;
Communication will be through the [https://en.wikipedia.org/wiki/I%C2%B2C I2C] protocol. This protocol is simple to follow, and a good introduction for students with limited exposure to &lt;br /&gt;
embedded communication. &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3593</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3593"/>
		<updated>2015-08-26T06:41:24Z</updated>

		<summary type="html">&lt;p&gt;A1607975: /* Screen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Provide an application layer which allocates addresses to clients. If I send a text as: &amp;quot;#57 Mr. Watson - Come here&amp;quot;&lt;br /&gt;
I want to see your number then the message: &amp;quot;Mr. Watson - Come here&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
As mentioned throughout this wiki article, the overall aim of this project is to develop a platform that can be used to teach basic &lt;br /&gt;
real-time concepts in a limited embedded system. &amp;lt; br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this reason, the C programming language has been chosen as the main language in this project. C provides a low enough level of abstraction &lt;br /&gt;
for students to be able to appreciate the underlying effects of real-time paradigms, without becoming wrapped up in something like assembly code.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
This project aims to produce an open source local area network (LAN). It is to be based on&lt;br /&gt;
the Arduino platform and use the C programming language. This must operate over an I2C&lt;br /&gt;
bus on the Arduino units with each unit to have its own bus connecting to a centralised server.&lt;br /&gt;
Each client unit must also have its own display and keypad for input/output interaction with&lt;br /&gt;
users. The purpose of this is to create a simple, low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. This system is to include an application layer which&lt;br /&gt;
allocates addresses to clients however there will not be any security or encryption included.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
The University of Adelaide course, Real Time and Embedded Systems, utilises the C pro-&lt;br /&gt;
gramming language to teach real-time and concurrency methodologies. To ensure this is&lt;br /&gt;
effective as possible it is best to use teaching tools which are grounded in familiar tools.&lt;br /&gt;
This is why the example of a LAN implemented in Arduino units using C is a compelling&lt;br /&gt;
choice. Likewise I2C is a well-developed and extensively used bus protocol. Exposing students &lt;br /&gt;
to these tools and protocols which are actively being used in industry is an invaluable&lt;br /&gt;
experience. In previous years, the course has utilised desktop computers to teach the C in&lt;br /&gt;
practicals and the PIC microprocessors as a teaching tool for the embedded systems theory.&lt;br /&gt;
The outcome of this project will enable the two sets of theory taught by the course to be&lt;br /&gt;
concatenated thus removing current disjointed approach of practicals.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
With several closed source networking options available, providing a simple open source alternative is&lt;br /&gt;
an advantage. Physical implementation is left to the user, and such this system might find itself in large remote sensingand monitoring situations. &amp;lt;br /&amp;gt;&lt;br /&gt;
Some examples might include: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Vineyard water table level monitoring. &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Mine environment variable sensing.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Technical Details&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Screen&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
The chosen screen was the LCD12864 and is shown in appendix C. This screen was chosen&lt;br /&gt;
for its flexibility and low cost as discussed above in the budget. It communicates to the&lt;br /&gt;
Arduino through SPI however this is mostly abstracted away and is not of concern to&lt;br /&gt;
this project. The Screen is a 128 x 64 pixel LCD shield. The header bar&lt;br /&gt;
allows for identification information and incoming message alert. Under this there is room&lt;br /&gt;
for the received or in progress outgoing message. The size of this is three rows of sixteen&lt;br /&gt;
characters allowing for a maximum message size of forty five characters long. This is well&lt;br /&gt;
within the memory requirements of the Arduino Uno and should allow for several messages&lt;br /&gt;
to be queued. &lt;br /&gt;
&lt;br /&gt;
A library of code was found for the screen. A significant proportion of this is written&lt;br /&gt;
in C meaning little work is required to utilise this as part of the project. The useful&lt;br /&gt;
inclusions from this library in the context of the project are the font library, the ability to&lt;br /&gt;
draw lines and the cursor function. The font library allows us to select from a wide variety&lt;br /&gt;
of sizes and characters. This will be further discussed below. The line drawing functions allow &lt;br /&gt;
the screen to be sectioned of into user-editable and non-user-editable sections. This also increases &lt;br /&gt;
readability and usability. The cursor function allows for easier message editing but does however bring further design choices.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Keypad&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As discussed in previous sections the keypad being used as the primary input device for this&lt;br /&gt;
project is the FIT0129 membrane keypad. Text input will be&lt;br /&gt;
entered in the style of old mobile phone keypad. The keypad&lt;br /&gt;
is to be connected to the Arduino Uno through the digital pass through connectors on the&lt;br /&gt;
screen shield.&lt;br /&gt;
To investigate the waveform of the button presses, one horizontal line was connected to&lt;br /&gt;
a five Volt power source and a vertical line was connected to the oscilloscope. This allowed the waveform to be inspected and the shortest press to be estimated.&lt;br /&gt;
The waveform has very little bounce which implies that including a de-bounce algorithm is&lt;br /&gt;
not necessary in this project. This is pictured in appendix E. The minimum button press&lt;br /&gt;
time was fifty milliseconds. This is an important as it effects the polling time and total&lt;br /&gt;
utilisation of processing time.&lt;br /&gt;
When a button is held down, the waveform persists. This means a choice has to be made&lt;br /&gt;
between the press counting as a single press or as many presses until the button is released.&lt;br /&gt;
The programming of these two choices is equally challenging and thus it was decided to treat&lt;br /&gt;
21&lt;br /&gt;
the long press as a single press and to wait for the button to be released before looking for&lt;br /&gt;
the new press.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
The cursor functionality has been started as the included library mentioned above includes&lt;br /&gt;
cursor functions. This has been worked with and functions allowing the cursor to work with&lt;br /&gt;
the chosen screen layout and specifc message size have been outlined in the code. Functions&lt;br /&gt;
allowing the cursor to be moved between characters in all situations have also been created&lt;br /&gt;
for the specifc screen layout that has been chosen. This has lead to a number of design&lt;br /&gt;
decisions which have been made.&lt;br /&gt;
The first is whether the text should be inserted or overridden when the cursor has been&lt;br /&gt;
backtracked through the text. Overriding the text is less intensive computationally and is&lt;br /&gt;
simpler to program. However from a usability perspective insert is the more natural option&lt;br /&gt;
as this is the method of many modern devices. For these reasons override has been chosen&lt;br /&gt;
initially however if time and resources permit insert is an extension goal to the project.&lt;br /&gt;
Secondly a choice between allowing users to insert text anywhere in the message string,&lt;br /&gt;
even after blank space, or only where text has already been placed (or a adding to the end).&lt;br /&gt;
A decision was made to&lt;br /&gt;
allow the user to insert characters anywhere in the message, regardless of unused space and to fill the unused space with spaces.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Inter Integrated Circuit&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Messaging&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;References and Standards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We are currently implementing the threads using [http://dunkels.com/adam/pt/ Protothreads], a low-overhead, stackless approach. &amp;lt;br /&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/u8glib/ Universal Graphics Library (u8glib)], is a general graphics library for communication with various (read many)&lt;br /&gt;
standard graphical screens. We chose this as a simple and easy to use library, we many options available for extension if required. &amp;lt;br /&amp;gt;&lt;br /&gt;
Communication will be through the [https://en.wikipedia.org/wiki/I%C2%B2C I2C] protocol. This protocol is simple to follow, and a good introduction for students with limited exposure to &lt;br /&gt;
embedded communication. &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3592</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3592"/>
		<updated>2015-08-26T06:39:59Z</updated>

		<summary type="html">&lt;p&gt;A1607975: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Provide an application layer which allocates addresses to clients. If I send a text as: &amp;quot;#57 Mr. Watson - Come here&amp;quot;&lt;br /&gt;
I want to see your number then the message: &amp;quot;Mr. Watson - Come here&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
As mentioned throughout this wiki article, the overall aim of this project is to develop a platform that can be used to teach basic &lt;br /&gt;
real-time concepts in a limited embedded system. &amp;lt; br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this reason, the C programming language has been chosen as the main language in this project. C provides a low enough level of abstraction &lt;br /&gt;
for students to be able to appreciate the underlying effects of real-time paradigms, without becoming wrapped up in something like assembly code.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
This project aims to produce an open source local area network (LAN). It is to be based on&lt;br /&gt;
the Arduino platform and use the C programming language. This must operate over an I2C&lt;br /&gt;
bus on the Arduino units with each unit to have its own bus connecting to a centralised server.&lt;br /&gt;
Each client unit must also have its own display and keypad for input/output interaction with&lt;br /&gt;
users. The purpose of this is to create a simple, low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. This system is to include an application layer which&lt;br /&gt;
allocates addresses to clients however there will not be any security or encryption included.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
The University of Adelaide course, Real Time and Embedded Systems, utilises the C pro-&lt;br /&gt;
gramming language to teach real-time and concurrency methodologies. To ensure this is&lt;br /&gt;
effective as possible it is best to use teaching tools which are grounded in familiar tools.&lt;br /&gt;
This is why the example of a LAN implemented in Arduino units using C is a compelling&lt;br /&gt;
choice. Likewise I2C is a well-developed and extensively used bus protocol. Exposing students &lt;br /&gt;
to these tools and protocols which are actively being used in industry is an invaluable&lt;br /&gt;
experience. In previous years, the course has utilised desktop computers to teach the C in&lt;br /&gt;
practicals and the PIC microprocessors as a teaching tool for the embedded systems theory.&lt;br /&gt;
The outcome of this project will enable the two sets of theory taught by the course to be&lt;br /&gt;
concatenated thus removing current disjointed approach of practicals.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
With several closed source networking options available, providing a simple open source alternative is&lt;br /&gt;
an advantage. Physical implementation is left to the user, and such this system might find itself in large remote sensingand monitoring situations. &amp;lt;br /&amp;gt;&lt;br /&gt;
Some examples might include: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Vineyard water table level monitoring. &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Mine environment variable sensing.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Technical Details&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Screen&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
The chosen screen was the LCD12864 and is shown in appendix C. This screen was chosen&lt;br /&gt;
for its &lt;br /&gt;
exibility and low cost as discussed above in the budget. It communicates to the&lt;br /&gt;
Arduino through SPI however this is mostly abstracted away and is not of concern to&lt;br /&gt;
this project. The Screen is a 128 x 64 pixel LCD shield. This allows for a layout as shown in&lt;br /&gt;
appendix D. This layout has been made but is not interactive at this stage. The header bar&lt;br /&gt;
allows for identifcation information and incoming message alert. Under this there is room&lt;br /&gt;
for the received or in progress outgoing message. The size of this is three rows of sixteen&lt;br /&gt;
characters allowing for a maximum message size of forty five characters long. This is well&lt;br /&gt;
within the memory requirements of the Arduino Uno and should allow for several messages&lt;br /&gt;
to be queued. &lt;br /&gt;
&lt;br /&gt;
A library of code was found for the screen. A significant proportion of this is written&lt;br /&gt;
in C meaning little to no work is required to utilise this as part of the project. The useful&lt;br /&gt;
inclusions from this library in the context of the project are the font library, the ability to&lt;br /&gt;
draw lines and the cursor function. The font library allows us to select from a wide variety&lt;br /&gt;
of sizes and characters. This will be further discussed below. The line drawing functions al-&lt;br /&gt;
low the screen to be sectioned of into user-editable and non-user-editable sections. This also increases readability and usability. The cursor function allows for easier message editing but does however bring further design choice.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Keypad&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As discussed in previous sections the keypad being used as the primary input device for this&lt;br /&gt;
project is the FIT0129 membrane keypad. Text input will be&lt;br /&gt;
entered in the style of old mobile phone keypad. The keypad&lt;br /&gt;
is to be connected to the Arduino Uno through the digital pass through connectors on the&lt;br /&gt;
screen shield.&lt;br /&gt;
To investigate the waveform of the button presses, one horizontal line was connected to&lt;br /&gt;
a five Volt power source and a vertical line was connected to the oscilloscope. This allowed the waveform to be inspected and the shortest press to be estimated.&lt;br /&gt;
The waveform has very little bounce which implies that including a de-bounce algorithm is&lt;br /&gt;
not necessary in this project. This is pictured in appendix E. The minimum button press&lt;br /&gt;
time was fifty milliseconds. This is an important as it effects the polling time and total&lt;br /&gt;
utilisation of processing time.&lt;br /&gt;
When a button is held down, the waveform persists. This means a choice has to be made&lt;br /&gt;
between the press counting as a single press or as many presses until the button is released.&lt;br /&gt;
The programming of these two choices is equally challenging and thus it was decided to treat&lt;br /&gt;
21&lt;br /&gt;
the long press as a single press and to wait for the button to be released before looking for&lt;br /&gt;
the new press.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
The cursor functionality has been started as the included library mentioned above includes&lt;br /&gt;
cursor functions. This has been worked with and functions allowing the cursor to work with&lt;br /&gt;
the chosen screen layout and specifc message size have been outlined in the code. Functions&lt;br /&gt;
allowing the cursor to be moved between characters in all situations have also been created&lt;br /&gt;
for the specifc screen layout that has been chosen. This has lead to a number of design&lt;br /&gt;
decisions which have been made.&lt;br /&gt;
The first is whether the text should be inserted or overridden when the cursor has been&lt;br /&gt;
backtracked through the text. Overriding the text is less intensive computationally and is&lt;br /&gt;
simpler to program. However from a usability perspective insert is the more natural option&lt;br /&gt;
as this is the method of many modern devices. For these reasons override has been chosen&lt;br /&gt;
initially however if time and resources permit insert is an extension goal to the project.&lt;br /&gt;
Secondly a choice between allowing users to insert text anywhere in the message string,&lt;br /&gt;
even after blank space, or only where text has already been placed (or a adding to the end).&lt;br /&gt;
A decision was made to&lt;br /&gt;
allow the user to insert characters anywhere in the message, regardless of unused space and to fill the unused space with spaces.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Inter Integrated Circuit&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Messaging&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;References and Standards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We are currently implementing the threads using [http://dunkels.com/adam/pt/ Protothreads], a low-overhead, stackless approach. &amp;lt;br /&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/u8glib/ Universal Graphics Library (u8glib)], is a general graphics library for communication with various (read many)&lt;br /&gt;
standard graphical screens. We chose this as a simple and easy to use library, we many options available for extension if required. &amp;lt;br /&amp;gt;&lt;br /&gt;
Communication will be through the [https://en.wikipedia.org/wiki/I%C2%B2C I2C] protocol. This protocol is simple to follow, and a good introduction for students with limited exposure to &lt;br /&gt;
embedded communication. &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3591</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3591"/>
		<updated>2015-08-26T06:39:27Z</updated>

		<summary type="html">&lt;p&gt;A1607975: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Provide an application layer which allocates addresses to clients. If I send a text as: &amp;quot;#57 Mr. Watson - Come here&amp;quot;&lt;br /&gt;
I want to see your number then the message: &amp;quot;Mr. Watson - Come here&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
As mentioned throughout this wiki article, the overall aim of this project is to develop a platform that can be used to teach basic &lt;br /&gt;
real-time concepts in a limited embedded system. &amp;lt; br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this reason, the C programming language has been chosen as the main language in this project. C provides a low enough level of abstraction &lt;br /&gt;
for students to be able to appreciate the underlying effects of real-time paradigms, without becoming wrapped up in something like assembly code.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
This project aims to produce an open source local area network (LAN). It is to be based on&lt;br /&gt;
the Arduino platform and use the C programming language. This must operate over an I2C&lt;br /&gt;
bus on the Arduino units with each unit to have its own bus connecting to a centralised server.&lt;br /&gt;
Each client unit must also have its own display and keypad for input/output interaction with&lt;br /&gt;
users. The purpose of this is to create a simple, low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. This system is to include an application layer which&lt;br /&gt;
allocates addresses to clients however there will not be any security or encryption included.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
The University of Adelaide course, Real Time and Embedded Systems, utilises the C pro-&lt;br /&gt;
gramming language to teach real-time and concurrency methodologies. To ensure this is&lt;br /&gt;
effective as possible it is best to use teaching tools which are grounded in familiar tools.&lt;br /&gt;
This is why the example of a LAN implemented in Arduino units using C is a compelling&lt;br /&gt;
choice. Likewise I2C is a well-developed and extensively used bus protocol. Exposing stu-&lt;br /&gt;
dents to these tools and protocols which are actively being used in industry is an invaluable&lt;br /&gt;
experience. In previous years, the course has utilised desktop computers to teach the C in&lt;br /&gt;
practicals and the Pic microprocessors as a teaching tool for the embedded systems theory.&lt;br /&gt;
The outcome of this project will enable the two sets of theory taught by the course to be&lt;br /&gt;
concatenated thus removing current disjointed approach of practicals.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
With several closed source networking options available, providing a simple open source alternative is&lt;br /&gt;
an advantage. Physical implementation is left to the user, and such this system might find itself in large remote sensingand monitoring situations. &amp;lt;br /&amp;gt;&lt;br /&gt;
Some examples might include: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Vineyard water table level monitoring. &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Mine environment variable sensing.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Technical Details&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Screen&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
The chosen screen was the LCD12864 and is shown in appendix C. This screen was chosen&lt;br /&gt;
for its &lt;br /&gt;
exibility and low cost as discussed above in the budget. It communicates to the&lt;br /&gt;
Arduino through SPI however this is mostly abstracted away and is not of concern to&lt;br /&gt;
this project. The Screen is a 128 x 64 pixel LCD shield. This allows for a layout as shown in&lt;br /&gt;
appendix D. This layout has been made but is not interactive at this stage. The header bar&lt;br /&gt;
allows for identifcation information and incoming message alert. Under this there is room&lt;br /&gt;
for the received or in progress outgoing message. The size of this is three rows of sixteen&lt;br /&gt;
characters allowing for a maximum message size of forty five characters long. This is well&lt;br /&gt;
within the memory requirements of the Arduino Uno and should allow for several messages&lt;br /&gt;
to be queued. &lt;br /&gt;
&lt;br /&gt;
A library of code was found for the screen. A significant proportion of this is written&lt;br /&gt;
in C meaning little to no work is required to utilise this as part of the project. The useful&lt;br /&gt;
inclusions from this library in the context of the project are the font library, the ability to&lt;br /&gt;
draw lines and the cursor function. The font library allows us to select from a wide variety&lt;br /&gt;
of sizes and characters. This will be further discussed below. The line drawing functions al-&lt;br /&gt;
low the screen to be sectioned of into user-editable and non-user-editable sections. This also increases readability and usability. The cursor function allows for easier message editing but does however bring further design choice.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Keypad&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As discussed in previous sections the keypad being used as the primary input device for this&lt;br /&gt;
project is the FIT0129 membrane keypad. Text input will be&lt;br /&gt;
entered in the style of old mobile phone keypad. The keypad&lt;br /&gt;
is to be connected to the Arduino Uno through the digital pass through connectors on the&lt;br /&gt;
screen shield.&lt;br /&gt;
To investigate the waveform of the button presses, one horizontal line was connected to&lt;br /&gt;
a five Volt power source and a vertical line was connected to the oscilloscope. This allowed the waveform to be inspected and the shortest press to be estimated.&lt;br /&gt;
The waveform has very little bounce which implies that including a de-bounce algorithm is&lt;br /&gt;
not necessary in this project. This is pictured in appendix E. The minimum button press&lt;br /&gt;
time was fifty milliseconds. This is an important as it effects the polling time and total&lt;br /&gt;
utilisation of processing time.&lt;br /&gt;
When a button is held down, the waveform persists. This means a choice has to be made&lt;br /&gt;
between the press counting as a single press or as many presses until the button is released.&lt;br /&gt;
The programming of these two choices is equally challenging and thus it was decided to treat&lt;br /&gt;
21&lt;br /&gt;
the long press as a single press and to wait for the button to be released before looking for&lt;br /&gt;
the new press.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
The cursor functionality has been started as the included library mentioned above includes&lt;br /&gt;
cursor functions. This has been worked with and functions allowing the cursor to work with&lt;br /&gt;
the chosen screen layout and specifc message size have been outlined in the code. Functions&lt;br /&gt;
allowing the cursor to be moved between characters in all situations have also been created&lt;br /&gt;
for the specifc screen layout that has been chosen. This has lead to a number of design&lt;br /&gt;
decisions which have been made.&lt;br /&gt;
The first is whether the text should be inserted or overridden when the cursor has been&lt;br /&gt;
backtracked through the text. Overriding the text is less intensive computationally and is&lt;br /&gt;
simpler to program. However from a usability perspective insert is the more natural option&lt;br /&gt;
as this is the method of many modern devices. For these reasons override has been chosen&lt;br /&gt;
initially however if time and resources permit insert is an extension goal to the project.&lt;br /&gt;
Secondly a choice between allowing users to insert text anywhere in the message string,&lt;br /&gt;
even after blank space, or only where text has already been placed (or a adding to the end).&lt;br /&gt;
A decision was made to&lt;br /&gt;
allow the user to insert characters anywhere in the message, regardless of unused space and to fill the unused space with spaces.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Inter Integrated Circuit&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Messaging&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;References and Standards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We are currently implementing the threads using [http://dunkels.com/adam/pt/ Protothreads], a low-overhead, stackless approach. &amp;lt;br /&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/u8glib/ Universal Graphics Library (u8glib)], is a general graphics library for communication with various (read many)&lt;br /&gt;
standard graphical screens. We chose this as a simple and easy to use library, we many options available for extension if required. &amp;lt;br /&amp;gt;&lt;br /&gt;
Communication will be through the [https://en.wikipedia.org/wiki/I%C2%B2C I2C] protocol. This protocol is simple to follow, and a good introduction for students with limited exposure to &lt;br /&gt;
embedded communication. &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3313</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3313"/>
		<updated>2015-08-19T02:34:14Z</updated>

		<summary type="html">&lt;p&gt;A1607975: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Provide an application layer which allocates addresses to clients. If I send a text as: &amp;quot;#57 Mr. Watson - Come here&amp;quot;&lt;br /&gt;
I want to see your number then the message: &amp;quot;Mr. Watson - Come here&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
As mentioned throughout this wiki article, the overall aim of this project is to develop a platform that can be used to teach basic &lt;br /&gt;
real-time concepts in a limited embedded system. &amp;lt; br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this reason, the c programming language has been chosen as the main language in this project. C provides a low enough level of abstraction &lt;br /&gt;
for students to be able to appreciate the underlying effects of real-time paradigms, without becoming wrapped up in something like assembly code.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
This project aims to produce an open source local area network (LAN). It is to be based on&lt;br /&gt;
the Arduino platform and use the C programming language. This must operate over an I2C&lt;br /&gt;
bus on the Arduino units with each unit to have its own bus connecting to a centralised server.&lt;br /&gt;
Each client unit must also have its own display and keypad for input/output interaction with&lt;br /&gt;
users. The purpose of this is to create a simple, low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. This system is to include an application layer which&lt;br /&gt;
allocates addresses to clients however there will not be any security or encryption included.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
The University of Adelaide course, Real Time and Embedded Systems, utilises the C pro-&lt;br /&gt;
gramming language to teach real-time and concurrency methodologies. To ensure this is&lt;br /&gt;
effective as possible it is best to use teaching tools which are grounded in familiar tools.&lt;br /&gt;
This is why the example of a LAN implemented in Arduino units using C is a compelling&lt;br /&gt;
choice. Likewise I2C is a well-developed and extensively used bus protocol. Exposing stu-&lt;br /&gt;
dents to these tools and protocols which are actively being used in industry is an invaluable&lt;br /&gt;
experience. In previous years, the course has utilised desktop computers to teach the C in&lt;br /&gt;
practicals and the Pic microprocessors as a teaching tool for the embedded systems theory.&lt;br /&gt;
The outcome of this project will enable the two sets of theory taught by the course to be&lt;br /&gt;
concatenated thus removing current disjointed approach of practicals.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
With several closed source networking options available, providing a simple open source alternative is&lt;br /&gt;
an advantage. Physical implementation is left to the user, and such this system might find itself in large remote sensingand monitoring situations. &amp;lt;br /&amp;gt;&lt;br /&gt;
Some examples might include: &amp;lt;br /&amp;gt;&lt;br /&gt;
1. Vineyard water table level monitoring. &amp;lt;br /&amp;gt;&lt;br /&gt;
2. Mine environment variable sensing.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;4. References and Standards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We are currently implementing the threads using [http://dunkels.com/adam/pt/ Protothreads], a low-overhead, stackless approach. &amp;lt;br /&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/u8glib/ Universal Graphics Library (u8glib)], is a general graphics library for communication with various (read many)&lt;br /&gt;
standard graphical screens. We chose this as a simple and easy to use library, we many options available for extension if required. &amp;lt;br /&amp;gt;&lt;br /&gt;
Communication will be through the [https://en.wikipedia.org/wiki/I%C2%B2C I2C] protocol. This protocol is simple to follow, and a good introduction for students with limited exposure to &lt;br /&gt;
embedded communication. &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
	<entry>
		<id>https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3171</id>
		<title>Projects:2015s1-12 An Open-Source Local Area Network (LAN)</title>
		<link rel="alternate" type="text/html" href="https://projectswiki.eleceng.adelaide.edu.au/projects/index.php?title=Projects:2015s1-12_An_Open-Source_Local_Area_Network_(LAN)&amp;diff=3171"/>
		<updated>2015-08-06T02:54:49Z</updated>

		<summary type="html">&lt;p&gt;A1607975: Created page with &amp;quot;  == &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==   == &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; == &amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt; Robert Long&amp;lt;br /&amp;gt; Oscar Evans&amp;lt;br /&amp;gt; Luke Hub-Mayner Warner&amp;lt;br /&amp;gt; Leigh-Anthony Noye&amp;lt;br /&amp;gt;  &amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Introduction&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Team&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Members:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Robert Long&amp;lt;br /&amp;gt;&lt;br /&gt;
Oscar Evans&amp;lt;br /&amp;gt;&lt;br /&gt;
Luke Hub-Mayner Warner&amp;lt;br /&amp;gt;&lt;br /&gt;
Leigh-Anthony Noye&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supervisors:&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Andrew Allison&amp;lt;br /&amp;gt;&lt;br /&gt;
Braden Phillips&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Project Information&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
We will develop an Open-Source Local Area Network (LAN), based on the Arduino platform, and using the C&lt;br /&gt;
programming language. The purpose of this network is to serve as a simple low-cost platform for teaching principles&lt;br /&gt;
of real-time and embedded systems. There are three stages of development:&amp;lt;br /&amp;gt;&lt;br /&gt;
1/ Get the Arduino up and working with an LCD display and a number pad, and program it as a glass type-writer, with&lt;br /&gt;
modes for the alphabetic characters, after the fashion of many mobile telephones. Students will need to use multiple&lt;br /&gt;
processes (threads) to control the display and the keypad, and to buffer characters.&amp;lt;br /&amp;gt;&lt;br /&gt;
2/ Get Two, or more, Arduino microcontrollers exchanging text on an I2C bus. At this stage there is no collision&lt;br /&gt;
detection or addressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
3/ Provide an application layer which allocates addresses to clients. If I send a text as: #57 Mr. Watson - Come here -&lt;br /&gt;
I want to see you# then the message: &amp;quot;Mr. Watson - Come here - I want to see you&amp;quot; appears only on the display of&lt;br /&gt;
client #57, and no other client. (There is still no encryption or security, just the convenience of an address.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
-&amp;gt; some background here&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Tech Background&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Aim&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Motivation&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Significance&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Approach/Architecture Design&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Potential Issues&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;4. References&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Protothreads yo&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>A1607975</name></author>
		
	</entry>
</feed>