mirror of
https://github.com/thearn/Python-Arduino-Command-API.git
synced 2026-01-10 15:08:18 -05:00
Create gh-pages branch via GitHub
This commit is contained in:
BIN
images/bg_hr.png
Normal file
BIN
images/bg_hr.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 943 B |
BIN
images/blacktocat.png
Normal file
BIN
images/blacktocat.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
images/icon_download.png
Normal file
BIN
images/icon_download.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
images/sprite_download.png
Normal file
BIN
images/sprite_download.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
260
index.html
Normal file
260
index.html
Normal file
@@ -0,0 +1,260 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
|
||||
<meta name="description" content="Python-arduino-command-api : A Python library for communicating with Arduino microcontroller boards" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css">
|
||||
|
||||
<title>Python-arduino-command-api</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- HEADER -->
|
||||
<div id="header_wrap" class="outer">
|
||||
<header class="inner">
|
||||
<a id="forkme_banner" href="https://github.com/thearn/Python-Arduino-Command-API">View on GitHub</a>
|
||||
|
||||
<h1 id="project_title">Python-arduino-command-api</h1>
|
||||
<h2 id="project_tagline">A Python library for communicating with Arduino microcontroller boards</h2>
|
||||
|
||||
<section id="downloads">
|
||||
<a class="zip_download_link" href="https://github.com/thearn/Python-Arduino-Command-API/zipball/master">Download this project as a .zip file</a>
|
||||
<a class="tar_download_link" href="https://github.com/thearn/Python-Arduino-Command-API/tarball/master">Download this project as a tar.gz file</a>
|
||||
</section>
|
||||
</header>
|
||||
</div>
|
||||
|
||||
<!-- MAIN CONTENT -->
|
||||
<div id="main_content_wrap" class="outer">
|
||||
<section id="main_content" class="inner">
|
||||
<h1>
|
||||
<a name="python-arduino-command-api" class="anchor" href="#python-arduino-command-api"><span class="octicon octicon-link"></span></a>Python Arduino Command API</h1>
|
||||
|
||||
<p>The Python Arduino Command API is a light-weight Python library for
|
||||
communicating with <a href="http://www.arduino.cc/">Arduino microcontroller boards</a> from a connected computer using
|
||||
standard serial IO, either physically
|
||||
or wirelessly. It is written using a custom protocol, similar to <a href="http://firmata.org/wiki/Main_Page">Firmata</a>. </p>
|
||||
|
||||
<p>This allows a user to quickly protoype programs for Arduino using Python code, or to
|
||||
simply read/control/troubleshoot/experiment
|
||||
with harware connected to an Arduino board without ever having to recompile and reload sketches to the board itself.</p>
|
||||
|
||||
<p>Method names within the Python Arduino Command API are designed to be as close
|
||||
as possible to their Arduino programming language counterparts</p>
|
||||
|
||||
<h2>
|
||||
<a name="simple-usage-example-led-blink" class="anchor" href="#simple-usage-example-led-blink"><span class="octicon octicon-link"></span></a>Simple usage example (LED blink)</h2>
|
||||
|
||||
<div class="highlight highlight-python"><pre><span class="c">#!/usr/bin/env python</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Blinks an LED on digital pin 13</span>
|
||||
<span class="sd"> in 1 second intervals</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">Arduino</span> <span class="kn">import</span> <span class="n">Arduino</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
|
||||
<span class="n">board</span> <span class="o">=</span> <span class="n">Arduino</span><span class="p">(</span><span class="s">'9600'</span><span class="p">)</span> <span class="c">#plugged in via USB, serial com at rate 9600</span>
|
||||
|
||||
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">digitalWrite</span><span class="p">(</span><span class="mi">13</span><span class="p">,</span> <span class="s">"LOW"</span><span class="p">)</span>
|
||||
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">digitalWrite</span><span class="p">(</span><span class="mi">13</span><span class="p">,</span> <span class="s">"HIGH"</span><span class="p">)</span>
|
||||
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
<h2>
|
||||
<a name="requirements" class="anchor" href="#requirements"><span class="octicon octicon-link"></span></a>Requirements:</h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="http://python.org/">Python</a> 2.3 or higher (Python 3.x not yet tested, but would probably work)</li>
|
||||
<li>
|
||||
<a href="http://pyserial.sourceforge.net/">pyserial</a> 2.6 or higher</li>
|
||||
<li>Any <a href="https://www.sparkfun.com/categories/242">Arduino compatible microcontroller</a> with at least 14KB of flash memory </li>
|
||||
</ul><h2>
|
||||
<a name="setup" class="anchor" href="#setup"><span class="octicon octicon-link"></span></a>Setup:</h2>
|
||||
|
||||
<ol>
|
||||
<li>Run <code>setup.py build install</code> to install the library</li>
|
||||
<li>Verify that your Arduino board communicates at the baud rate specified in the
|
||||
<code>setup()</code> function (line 348) in <code>prototype.ino</code>. Change it there if necessary.</li>
|
||||
<li>Load the <code>prototype.ino</code> sketch onto your Arduino board, using the Arduino IDE.</li>
|
||||
<li>Set up some kind of serial I/O communication between the Arduino board and your computer (via physical USB cable,
|
||||
bluetooth, xbee, etc + associated drivers)</li>
|
||||
<li>Add <code>from Arduino import Arduino</code> into your python script to communicate with your Arduino</li>
|
||||
</ol><p>For a collection of examples, see <code>examples.py</code>. This file contains methods which replicate
|
||||
the functionality of many Arduino demo sketches. </p>
|
||||
|
||||
<h2>
|
||||
<a name="testing" class="anchor" href="#testing"><span class="octicon octicon-link"></span></a>Testing:</h2>
|
||||
|
||||
<p>The <code>tests</code> directory contains some basic tests for the library. Extensive code coverage is a bit difficult to expect for every release, since a positive test involves actually
|
||||
connecting and issuing commands to a live Arduino, hosting any hardware
|
||||
required to test a particular function. But a core of basic communication tests
|
||||
should at least be maintained here and used before merging into the <code>master</code> branch.</p>
|
||||
|
||||
<p>After installation, the interactive tests can be run from the source directory:</p>
|
||||
|
||||
<div class="highlight highlight-bash"><pre><span class="nv">$ </span>python tests/test_main.py
|
||||
</pre></div>
|
||||
|
||||
<p>Automated tests can be run from the source directory with:</p>
|
||||
|
||||
<div class="highlight highlight-bash"><pre><span class="nv">$ </span>python tests/test_arduino.py
|
||||
</pre></div>
|
||||
|
||||
<h2>
|
||||
<a name="classes" class="anchor" href="#classes"><span class="octicon octicon-link"></span></a>Classes</h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino(baud)</code> - Set up communication with currently connected and powered
|
||||
Arduino. </li>
|
||||
</ul><div class="highlight highlight-python"><pre><span class="n">board</span> <span class="o">=</span> <span class="n">Arduino</span><span class="p">(</span><span class="s">"9600"</span><span class="p">)</span> <span class="c">#Example</span>
|
||||
</pre></div>
|
||||
|
||||
<p>The device name / COM port of the connected Arduino will be auto-detected.
|
||||
If there are more than one Arduino boards connected,
|
||||
the desired COM port can be also be passed as an optional argument:</p>
|
||||
|
||||
<div class="highlight highlight-python"><pre><span class="n">board</span> <span class="o">=</span> <span class="n">Arduino</span><span class="p">(</span><span class="s">"9600"</span><span class="p">,</span> <span class="n">port</span> <span class="o">=</span> <span class="s">"COM3"</span><span class="p">)</span> <span class="c">#Windows example</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="highlight highlight-python"><pre><span class="n">board</span> <span class="o">=</span> <span class="n">Arduino</span><span class="p">(</span><span class="s">"9600"</span><span class="p">,</span> <span class="n">port</span> <span class="o">=</span> <span class="s">"/dev/tty.usbmodemfa141"</span><span class="p">)</span> <span class="c">#OSX example</span>
|
||||
</pre></div>
|
||||
|
||||
<p>A time-out for reading from the Arduino can also be specified as an optional
|
||||
argument:</p>
|
||||
|
||||
<div class="highlight highlight-python"><pre><span class="n">board</span> <span class="o">=</span> <span class="n">Arduino</span><span class="p">(</span><span class="s">"9600"</span><span class="p">,</span> <span class="n">timeout</span> <span class="o">=</span> <span class="mi">2</span><span class="p">)</span> <span class="c">#Serial reading functions will </span>
|
||||
<span class="c">#wait for no more than 2 seconds</span>
|
||||
</pre></div>
|
||||
|
||||
<h2>
|
||||
<a name="methods" class="anchor" href="#methods"><span class="octicon octicon-link"></span></a>Methods</h2>
|
||||
|
||||
<p><strong>Digital I/O</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.digitalWrite(pin_number, state)</code> turn digital pin on/off</li>
|
||||
<li>
|
||||
<code>Arduino.digitalRead(pin_number)</code> read state of a digital pin</li>
|
||||
</ul><div class="highlight highlight-python"><pre><span class="c">#Digital read / write example</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">digitalWrite</span><span class="p">(</span><span class="mi">13</span><span class="p">,</span> <span class="s">"HIGH"</span><span class="p">)</span> <span class="c">#Set digital pin 13 voltage</span>
|
||||
<span class="n">state_1</span> <span class="o">=</span> <span class="n">board</span><span class="o">.</span><span class="n">digitalRead</span><span class="p">(</span><span class="mi">13</span><span class="p">)</span> <span class="c">#Will return integer 1</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">digitalWrite</span><span class="p">(</span><span class="mi">13</span><span class="p">,</span> <span class="s">"LOW"</span><span class="p">)</span> <span class="c">#Set digital pin 13 voltage</span>
|
||||
<span class="n">state_2</span> <span class="o">=</span> <span class="n">board</span><span class="o">.</span><span class="n">digitalRead</span><span class="p">(</span><span class="mi">13</span><span class="p">)</span> <span class="c">#Will return integer 0</span>
|
||||
</pre></div>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.pinMode(pin_number, io_mode)</code> set pin I/O mode</li>
|
||||
<li>
|
||||
<code>Arduino.pulseIn(pin_number, state)</code> measures a pulse<br>
|
||||
</li>
|
||||
<li>
|
||||
<code>Arduino.pulseIn_set(pin_number, state)</code> measures a pulse, with preconditioning</li>
|
||||
</ul><div class="highlight highlight-python"><pre><span class="c">#Digital mode / pulse example</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">pinMode</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="s">"INPUT"</span><span class="p">)</span> <span class="c">#Set digital pin 7 mode to INPUT</span>
|
||||
<span class="n">duration</span> <span class="o">=</span> <span class="n">board</span><span class="o">.</span><span class="n">pulseIn</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="s">"HIGH"</span><span class="p">)</span> <span class="c">#Return pulse width measurement on pin 7</span>
|
||||
</pre></div>
|
||||
|
||||
<p><strong>Analog I/O</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.analogRead(pin_number)</code> returns the analog value</li>
|
||||
<li>
|
||||
<code>Arduino.analogWrite(pin_number, value)</code> sets the analog value</li>
|
||||
</ul><div class="highlight highlight-python"><pre><span class="c">#Analog I/O examples</span>
|
||||
<span class="n">val</span><span class="o">=</span><span class="n">board</span><span class="o">.</span><span class="n">analogRead</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="c">#Read value on analog pin 5 (integer 0 to 1023)</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">val</span> <span class="o">/</span> <span class="mi">4</span> <span class="c"># scale to 0 - 255</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">analogWrite</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span> <span class="c">#Set analog value (PWM) based on analog measurement</span>
|
||||
</pre></div>
|
||||
|
||||
<p><strong>Shift Register</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.shiftIn(dataPin, clockPin, bitOrder)</code> shift a byte in and returns it</li>
|
||||
<li>
|
||||
<code>Arduino.shiftOut(dataPin, clockPin, bitOrder, value)</code> shift the given byte out</li>
|
||||
</ul><p><code>bitOrder</code> should be either <code>"MSBFIRST"</code> or <code>"LSBFIRST"</code></p>
|
||||
|
||||
<p><strong>Servo Library Functionality</strong>
|
||||
Support is included for up to 8 servos. </p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.Servos.attach(pin, min = 544, max = 2400)</code> Create servo instance. Only 8 servos can be used at one time. </li>
|
||||
<li>
|
||||
<code>Arduino.Servos.read(pin)</code> Returns the angle of the servo attached to the specified pin</li>
|
||||
<li>
|
||||
<code>Arduino.Servos.write(pin, angle)</code> Move an attached servo on a pin to a specified angle</li>
|
||||
<li>
|
||||
<code>Arduino.Servos.writeMicroseconds(pin, uS)</code> Write a value in microseconds to the servo on a specified pin</li>
|
||||
<li>
|
||||
<code>Arduino.Servos.detach(pin)</code> Detaches the servo on the specified pin</li>
|
||||
</ul><div class="highlight highlight-python"><pre><span class="c">#Servo example</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">Servos</span><span class="o">.</span><span class="n">attach</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span> <span class="c">#declare servo on pin 9</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">Servos</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="mi">9</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="c">#move servo on pin 9 to 0 degrees</span>
|
||||
<span class="k">print</span> <span class="n">board</span><span class="o">.</span><span class="n">Servos</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span> <span class="c"># should be 0</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">Servos</span><span class="o">.</span><span class="n">detach</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span> <span class="c">#free pin 9</span>
|
||||
</pre></div>
|
||||
|
||||
<p><strong>Software Serial Functionality</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.SoftwareSerial.begin(ss_rxPin,ss_txPin,ss_device_baud)</code> initialize software serial device on
|
||||
specified pins.
|
||||
Only one sofware serial device can be used at a time. Existing software serial instance will
|
||||
be be overwritten by calling this method, both in Python and on the arduino board.</li>
|
||||
<li>
|
||||
<code>Arduino.SoftwareSerial.write(data)</code> send data using the arduino 'write' function to the existing software
|
||||
serial connection.</li>
|
||||
<li>
|
||||
<code>Arduino.SoftwareSerial.read()</code> returns one byte from the existing software serial connection</li>
|
||||
</ul><div class="highlight highlight-python"><pre><span class="c">#Software serial example</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">SoftwareSerial</span><span class="o">.</span><span class="n">begin</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="s">"19200"</span><span class="p">)</span> <span class="c"># Start software serial for transmit only (tx on pin 7)</span>
|
||||
<span class="n">board</span><span class="o">.</span><span class="n">SoftwareSerial</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">" test "</span><span class="p">)</span> <span class="c">#Send some data </span>
|
||||
<span class="n">response_char</span> <span class="o">=</span> <span class="n">board</span><span class="o">.</span><span class="n">SoftwareSerial</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="c">#read response character</span>
|
||||
</pre></div>
|
||||
|
||||
<p><strong>Misc</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>Arduino.close()</code> closes serial connection to the Arduino.</li>
|
||||
</ul><h2>
|
||||
<a name="to-do-list" class="anchor" href="#to-do-list"><span class="octicon octicon-link"></span></a>To-do list:</h2>
|
||||
|
||||
<ul>
|
||||
<li>Expand software serial functionality (<code>print()</code> and <code>println()</code>)</li>
|
||||
<li>Add simple reset functionality that zeros out all pin values</li>
|
||||
<li>Add I2C / TWI function support (Arduino <code>Wire.h</code> commands)</li>
|
||||
<li>Include a wizard which generates 'prototype.ino' with selected serial baud rate and Arduino function support
|
||||
(to help reduce memory requirements).</li>
|
||||
<li>Multi-serial support for Arduino mega (<code>Serial1.read()</code>, etc)</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- FOOTER -->
|
||||
<div id="footer_wrap" class="outer">
|
||||
<footer class="inner">
|
||||
<p class="copyright">Python-arduino-command-api maintained by <a href="https://github.com/thearn">thearn</a></p>
|
||||
<p>Published with <a href="http://pages.github.com">GitHub Pages</a></p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
1
javascripts/main.js
Normal file
1
javascripts/main.js
Normal file
@@ -0,0 +1 @@
|
||||
console.log('This would be the main JS file.');
|
||||
1
params.json
Normal file
1
params.json
Normal file
File diff suppressed because one or more lines are too long
70
stylesheets/pygment_trac.css
Normal file
70
stylesheets/pygment_trac.css
Normal file
@@ -0,0 +1,70 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #f0f3f3; }
|
||||
.highlight .c { color: #0099FF; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */
|
||||
.highlight .k { color: #006699; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #555555 } /* Operator */
|
||||
.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #009999 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */
|
||||
.highlight .go { color: #AAAAAA } /* Generic.Output */
|
||||
.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #99CC66 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #006699 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #FF6600 } /* Literal.Number */
|
||||
.highlight .s { color: #CC3300 } /* Literal.String */
|
||||
.highlight .na { color: #330099 } /* Name.Attribute */
|
||||
.highlight .nb { color: #336666 } /* Name.Builtin */
|
||||
.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #336600 } /* Name.Constant */
|
||||
.highlight .nd { color: #9999FF } /* Name.Decorator */
|
||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #CC00FF } /* Name.Function */
|
||||
.highlight .nl { color: #9999FF } /* Name.Label */
|
||||
.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #003333 } /* Name.Variable */
|
||||
.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #FF6600 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #CC3300 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #CC3300 } /* Literal.String.Double */
|
||||
.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #AA0000 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #CC3300 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #33AAAA } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #CC3300 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #003333 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #003333 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #003333 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */
|
||||
|
||||
.type-csharp .highlight .k { color: #0000FF }
|
||||
.type-csharp .highlight .kt { color: #0000FF }
|
||||
.type-csharp .highlight .nf { color: #000000; font-weight: normal }
|
||||
.type-csharp .highlight .nc { color: #2B91AF }
|
||||
.type-csharp .highlight .nn { color: #000000 }
|
||||
.type-csharp .highlight .s { color: #A31515 }
|
||||
.type-csharp .highlight .sc { color: #A31515 }
|
||||
427
stylesheets/stylesheet.css
Normal file
427
stylesheets/stylesheet.css
Normal file
@@ -0,0 +1,427 @@
|
||||
/*******************************************************************************
|
||||
Slate Theme for GitHub Pages
|
||||
by Jason Costello, @jsncostello
|
||||
*******************************************************************************/
|
||||
|
||||
@import url(pygment_trac.css);
|
||||
|
||||
/*******************************************************************************
|
||||
MeyerWeb Reset
|
||||
*******************************************************************************/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
blockquote, q {
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
Theme Styles
|
||||
*******************************************************************************/
|
||||
|
||||
body {
|
||||
box-sizing: border-box;
|
||||
color:#373737;
|
||||
background: #212121;
|
||||
font-size: 16px;
|
||||
font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin: 10px 0;
|
||||
font-weight: 700;
|
||||
color:#222222;
|
||||
font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 36px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
h2 {
|
||||
padding-bottom: 10px;
|
||||
font-size: 32px;
|
||||
background: url('../images/bg_hr.png') repeat-x bottom;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 10px 0 15px 0;
|
||||
}
|
||||
|
||||
footer p {
|
||||
color: #f2f2f2;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #007edf;
|
||||
text-shadow: none;
|
||||
|
||||
transition: color 0.5s ease;
|
||||
transition: text-shadow 0.5s ease;
|
||||
-webkit-transition: color 0.5s ease;
|
||||
-webkit-transition: text-shadow 0.5s ease;
|
||||
-moz-transition: color 0.5s ease;
|
||||
-moz-transition: text-shadow 0.5s ease;
|
||||
-o-transition: color 0.5s ease;
|
||||
-o-transition: text-shadow 0.5s ease;
|
||||
-ms-transition: color 0.5s ease;
|
||||
-ms-transition: text-shadow 0.5s ease;
|
||||
}
|
||||
|
||||
#main_content a:hover {
|
||||
color: #0069ba;
|
||||
text-shadow: #0090ff 0px 0px 2px;
|
||||
}
|
||||
|
||||
footer a:hover {
|
||||
color: #43adff;
|
||||
text-shadow: #0090ff 0px 0px 2px;
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
max-width: 739px;
|
||||
padding: 5px;
|
||||
margin: 10px 0 10px 0;
|
||||
border: 1px solid #ebebeb;
|
||||
|
||||
box-shadow: 0 0 5px #ebebeb;
|
||||
-webkit-box-shadow: 0 0 5px #ebebeb;
|
||||
-moz-box-shadow: 0 0 5px #ebebeb;
|
||||
-o-box-shadow: 0 0 5px #ebebeb;
|
||||
-ms-box-shadow: 0 0 5px #ebebeb;
|
||||
}
|
||||
|
||||
pre, code {
|
||||
width: 100%;
|
||||
color: #222;
|
||||
background-color: #fff;
|
||||
|
||||
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
|
||||
font-size: 14px;
|
||||
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
pre {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
box-shadow: 0 0 10px rgba(0,0,0,.1);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 3px;
|
||||
margin: 0 3px;
|
||||
box-shadow: 0 0 10px rgba(0,0,0,.1);
|
||||
}
|
||||
|
||||
pre code {
|
||||
display: block;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
color: #666;
|
||||
margin-bottom: 20px;
|
||||
padding: 0 0 0 20px;
|
||||
border-left: 3px solid #bbb;
|
||||
}
|
||||
|
||||
ul, ol, dl {
|
||||
margin-bottom: 15px
|
||||
}
|
||||
|
||||
ul li {
|
||||
list-style: inside;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
ol li {
|
||||
list-style: decimal inside;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
dl dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dl dd {
|
||||
padding-left: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
dl p {
|
||||
padding-left: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 1px;
|
||||
margin-bottom: 5px;
|
||||
border: none;
|
||||
background: url('../images/bg_hr.png') repeat-x center;
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid #373737;
|
||||
margin-bottom: 20px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
padding: 10px;
|
||||
background: #373737;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 10px;
|
||||
border: 1px solid #373737;
|
||||
}
|
||||
|
||||
form {
|
||||
background: #f2f2f2;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
Full-Width Styles
|
||||
*******************************************************************************/
|
||||
|
||||
.outer {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.inner {
|
||||
position: relative;
|
||||
max-width: 640px;
|
||||
padding: 20px 10px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#forkme_banner {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top:0;
|
||||
right: 10px;
|
||||
z-index: 10;
|
||||
padding: 10px 50px 10px 10px;
|
||||
color: #fff;
|
||||
background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%;
|
||||
font-weight: 700;
|
||||
box-shadow: 0 0 10px rgba(0,0,0,.5);
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
#header_wrap {
|
||||
background: #212121;
|
||||
background: -moz-linear-gradient(top, #373737, #212121);
|
||||
background: -webkit-linear-gradient(top, #373737, #212121);
|
||||
background: -ms-linear-gradient(top, #373737, #212121);
|
||||
background: -o-linear-gradient(top, #373737, #212121);
|
||||
background: linear-gradient(top, #373737, #212121);
|
||||
}
|
||||
|
||||
#header_wrap .inner {
|
||||
padding: 50px 10px 30px 10px;
|
||||
}
|
||||
|
||||
#project_title {
|
||||
margin: 0;
|
||||
color: #fff;
|
||||
font-size: 42px;
|
||||
font-weight: 700;
|
||||
text-shadow: #111 0px 0px 10px;
|
||||
}
|
||||
|
||||
#project_tagline {
|
||||
color: #fff;
|
||||
font-size: 24px;
|
||||
font-weight: 300;
|
||||
background: none;
|
||||
text-shadow: #111 0px 0px 10px;
|
||||
}
|
||||
|
||||
#downloads {
|
||||
position: absolute;
|
||||
width: 210px;
|
||||
z-index: 10;
|
||||
bottom: -40px;
|
||||
right: 0;
|
||||
height: 70px;
|
||||
background: url('../images/icon_download.png') no-repeat 0% 90%;
|
||||
}
|
||||
|
||||
.zip_download_link {
|
||||
display: block;
|
||||
float: right;
|
||||
width: 90px;
|
||||
height:70px;
|
||||
text-indent: -5000px;
|
||||
overflow: hidden;
|
||||
background: url(../images/sprite_download.png) no-repeat bottom left;
|
||||
}
|
||||
|
||||
.tar_download_link {
|
||||
display: block;
|
||||
float: right;
|
||||
width: 90px;
|
||||
height:70px;
|
||||
text-indent: -5000px;
|
||||
overflow: hidden;
|
||||
background: url(../images/sprite_download.png) no-repeat bottom right;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.zip_download_link:hover {
|
||||
background: url(../images/sprite_download.png) no-repeat top left;
|
||||
}
|
||||
|
||||
.tar_download_link:hover {
|
||||
background: url(../images/sprite_download.png) no-repeat top right;
|
||||
}
|
||||
|
||||
#main_content_wrap {
|
||||
background: #f2f2f2;
|
||||
border-top: 1px solid #111;
|
||||
border-bottom: 1px solid #111;
|
||||
}
|
||||
|
||||
#main_content {
|
||||
padding-top: 40px;
|
||||
}
|
||||
|
||||
#footer_wrap {
|
||||
background: #212121;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Small Device Styles
|
||||
*******************************************************************************/
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
body {
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
#downloads {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.inner {
|
||||
min-width: 320px;
|
||||
max-width: 480px;
|
||||
}
|
||||
|
||||
#project_title {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
code, pre {
|
||||
min-width: 320px;
|
||||
max-width: 480px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user