subduino 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Readme.textile +48 -2
- data/VERSION +1 -1
- data/bin/subduino +21 -5
- data/duino/Makefile +53 -50
- data/duino/duino.pde +271 -5
- data/lib/subduino.rb +1 -1
- data/lib/subduino/parse.rb +23 -34
- data/lib/subduino/parse/bool.rb +13 -0
- data/lib/subduino/parse/lux.rb +13 -0
- data/lib/subduino/parse/temp.rb +17 -0
- data/lib/subduino/scaffold/Makefile +59 -51
- data/lib/subduino/store.rb +21 -12
- data/subduino.gemspec +88 -2
- data/webapp/config.yml +20 -0
- data/webapp/lib/app.rb +2 -2
- data/webapp/lib/duino.rb +9 -16
- data/webapp/public/custom.js +187 -0
- data/webapp/public/date_input.css +149 -0
- data/webapp/public/facebox.css +83 -0
- data/webapp/public/facebox.js +319 -0
- data/webapp/public/favicon.ico +0 -0
- data/webapp/public/icons/current.png +0 -0
- data/webapp/public/icons/day.png +0 -0
- data/webapp/public/icons/door-big.png +0 -0
- data/webapp/public/icons/favicon.png +0 -0
- data/webapp/public/icons/irrigation.png +0 -0
- data/webapp/public/icons/lamp-big.png +0 -0
- data/webapp/public/icons/lightbulb_off.png +0 -0
- data/webapp/public/icons/locked.png +0 -0
- data/webapp/public/icons/lux.png +0 -0
- data/webapp/public/icons/night.png +0 -0
- data/webapp/public/icons/noise.png +0 -0
- data/webapp/public/icons/onoff.png +0 -0
- data/webapp/public/icons/rain.png +0 -0
- data/webapp/public/icons/refrigeration.png +0 -0
- data/webapp/public/icons/temp.png +0 -0
- data/webapp/public/icons/unlocked.png +0 -0
- data/webapp/public/images/ajax-loader.gif +0 -0
- data/webapp/public/images/b.png +0 -0
- data/webapp/public/images/bendl.gif +0 -0
- data/webapp/public/images/bendr.gif +0 -0
- data/webapp/public/images/bendsb.gif +0 -0
- data/webapp/public/images/bg.jpg +0 -0
- data/webapp/public/images/bhead.gif +0 -0
- data/webapp/public/images/bheadl.gif +0 -0
- data/webapp/public/images/bheadr.gif +0 -0
- data/webapp/public/images/bl.png +0 -0
- data/webapp/public/images/bnd.gif +0 -0
- data/webapp/public/images/br.png +0 -0
- data/webapp/public/images/bread.gif +0 -0
- data/webapp/public/images/btnb.gif +0 -0
- data/webapp/public/images/btnb_.gif +0 -0
- data/webapp/public/images/btnm.gif +0 -0
- data/webapp/public/images/btnm_.gif +0 -0
- data/webapp/public/images/btns.gif +0 -0
- data/webapp/public/images/btns_.gif +0 -0
- data/webapp/public/images/cal.jpg +0 -0
- data/webapp/public/images/close.png +0 -0
- data/webapp/public/images/closelabel.gif +0 -0
- data/webapp/public/images/error.gif +0 -0
- data/webapp/public/images/ft.gif +0 -0
- data/webapp/public/images/hdr.gif +0 -0
- data/webapp/public/images/hdrl.gif +0 -0
- data/webapp/public/images/hdrr.gif +0 -0
- data/webapp/public/images/hld.jpg +0 -0
- data/webapp/public/images/imgb.gif +0 -0
- data/webapp/public/images/imgo.gif +0 -0
- data/webapp/public/images/imgt.gif +0 -0
- data/webapp/public/images/info.gif +0 -0
- data/webapp/public/images/jquery.wysiwyg.gif +0 -0
- data/webapp/public/images/li.gif +0 -0
- data/webapp/public/images/mbg.png +0 -0
- data/webapp/public/images/nsp.gif +0 -0
- data/webapp/public/images/phs.gif +0 -0
- data/webapp/public/images/sdd.jpg +0 -0
- data/webapp/public/images/sdd_.jpg +0 -0
- data/webapp/public/images/sidebar.gif +0 -0
- data/webapp/public/images/sorta.gif +0 -0
- data/webapp/public/images/sortd.gif +0 -0
- data/webapp/public/images/srch.gif +0 -0
- data/webapp/public/images/srch_.gif +0 -0
- data/webapp/public/images/success.gif +0 -0
- data/webapp/public/images/thumb1.jpg +0 -0
- data/webapp/public/images/thumb2.jpg +0 -0
- data/webapp/public/images/thumb3.jpg +0 -0
- data/webapp/public/images/tiny.gif +0 -0
- data/webapp/public/images/tiny_.gif +0 -0
- data/webapp/public/images/tl.png +0 -0
- data/webapp/public/images/tr.png +0 -0
- data/webapp/public/images/upload.gif +0 -0
- data/webapp/public/images/warning.gif +0 -0
- data/webapp/public/jquery.img.preload.js +152 -0
- data/webapp/public/jquery.sparkline.js +85 -0
- data/webapp/public/jquery.tablesorter.min.js +2 -0
- data/webapp/public/jquery.visualize.js +452 -0
- data/webapp/public/jquery.wysiwyg.css +56 -0
- data/webapp/public/style.css +881 -0
- data/webapp/public/visualize.css +32 -0
- data/webapp/views/index.haml +365 -49
- data/webapp/views/layout.haml +78 -7
- data/webapp/views/template.haml +676 -0
- metadata +89 -3
data/Readme.textile
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
h1. Subduino
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Arduino Tools on Ruby
|
|
4
4
|
|
|
5
5
|
http://github.com/nofxx/subduino
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
h2. Install
|
|
8
9
|
|
|
9
10
|
gem install subduino
|
|
@@ -12,11 +13,51 @@ h2. Install
|
|
|
12
13
|
h3. Requirements
|
|
13
14
|
|
|
14
15
|
* "Arduino":http://arduino.cc
|
|
16
|
+
|
|
17
|
+
PubSub (gems):
|
|
18
|
+
|
|
15
19
|
* "serialport":http://github.com/hparra/ruby-serialport
|
|
16
20
|
* "redis":http://github.com/ezmobius/redis-rb
|
|
17
21
|
|
|
22
|
+
Compile/Upload to arduino (archlinux pkgs):
|
|
23
|
+
|
|
24
|
+
* "arduino" or "arduino64"
|
|
25
|
+
* "gcc-avr"
|
|
26
|
+
* "avrdude"
|
|
27
|
+
|
|
28
|
+
WebApp (gems):
|
|
29
|
+
|
|
30
|
+
* sinatra
|
|
31
|
+
* haml
|
|
18
32
|
|
|
19
|
-
|
|
33
|
+
|
|
34
|
+
h2. Create a project
|
|
35
|
+
|
|
36
|
+
<pre><code>
|
|
37
|
+
subduino some/dir/bot
|
|
38
|
+
...creates folder and some sketch files...
|
|
39
|
+
|
|
40
|
+
</pre></code>
|
|
41
|
+
|
|
42
|
+
h3. bot.rb
|
|
43
|
+
|
|
44
|
+
Simple example that monitors arduinos on the USB.
|
|
45
|
+
|
|
46
|
+
h3. bot.pde
|
|
47
|
+
|
|
48
|
+
Common arduino source, can be compiled/uploaded via the IDE or:
|
|
49
|
+
|
|
50
|
+
h3. Makefile
|
|
51
|
+
|
|
52
|
+
Nice makefile so you don't need the IDE ;)
|
|
53
|
+
Use 'make' or 'make upload'.
|
|
54
|
+
|
|
55
|
+
It's being tested (works) on archlinux with arduino 0019.
|
|
56
|
+
It's just a matter of setting the first lines of the Makefile correct for your OS.
|
|
57
|
+
Please let me know so I can detect the OS and write a correct makefile for other distros.
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
h2. PubSub
|
|
20
61
|
|
|
21
62
|
<pre><code>
|
|
22
63
|
|
|
@@ -31,6 +72,11 @@ h2. Use
|
|
|
31
72
|
</pre></code>
|
|
32
73
|
|
|
33
74
|
|
|
75
|
+
h2. Webapp
|
|
76
|
+
|
|
77
|
+
Need some heavy work...
|
|
78
|
+
|
|
79
|
+
|
|
34
80
|
h2. Contributing
|
|
35
81
|
|
|
36
82
|
Fork/work/push.
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.0
|
data/bin/subduino
CHANGED
|
@@ -12,23 +12,39 @@ OptionParser.new { |op|
|
|
|
12
12
|
}.parse!(ARGV.dup)
|
|
13
13
|
|
|
14
14
|
# set :run, true
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if ARGV.empty? || ARGV.join =~ /yml/
|
|
18
|
+
LastRun = {:all => 0}
|
|
19
|
+
if File.exists?(f = ARGV.join)
|
|
20
|
+
puts "Using config file #{f}"
|
|
21
|
+
AppConfig = YAML.load(File.read(f))["opts"]
|
|
22
|
+
else
|
|
23
|
+
AppConfig = { "log_interval" => 30, "bauds" => 57600 }
|
|
24
|
+
end
|
|
16
25
|
|
|
17
26
|
client = Faye::Client.new('http://localhost:8000/faye')
|
|
18
27
|
|
|
19
28
|
EM.run do
|
|
20
29
|
|
|
21
30
|
Subduino.start do |read|
|
|
22
|
-
client.publish('/stats', 'data' => read)
|
|
23
31
|
puts "[IO] #{read}"
|
|
32
|
+
if LastRun[:all] < (Time.now.to_i - AppConfig["log_interval"])
|
|
33
|
+
p "Syncing...."
|
|
34
|
+
LastRun[:all] = Time.now.to_i
|
|
35
|
+
client.publish('/stats', 'data' => read)
|
|
36
|
+
Subduino::Store.add_csv_to_store(read, true)
|
|
37
|
+
else
|
|
38
|
+
Subduino::Store.add_csv_to_store(read)
|
|
39
|
+
end
|
|
24
40
|
end
|
|
25
41
|
|
|
26
42
|
end
|
|
27
|
-
|
|
28
|
-
|
|
43
|
+
else
|
|
29
44
|
require "subduino/scaffold/generator"
|
|
30
45
|
dir = ARGV[0]
|
|
31
46
|
puts "Subduing dir #{dir}"
|
|
32
47
|
`mkdir #{dir}` unless File.exists?(dir)
|
|
48
|
+
Subduino::Generator.copy_files(dir)
|
|
49
|
+
end
|
|
33
50
|
|
|
34
|
-
Subduino::Generator.copy_files(dir)
|
data/duino/Makefile
CHANGED
|
@@ -1,53 +1,25 @@
|
|
|
1
|
-
########################################################################
|
|
2
1
|
#
|
|
3
|
-
# Arduino command line tools Makefile
|
|
4
|
-
# System part (i.e. project independent)
|
|
5
2
|
#
|
|
6
|
-
#
|
|
7
|
-
# Copyright Nicholas Zambetti, David A. Mellis & Hernando Barragan
|
|
3
|
+
# duino Arduino command line tools Makefile
|
|
8
4
|
#
|
|
9
|
-
# This file is free software; you can redistribute it and/or modify it
|
|
10
|
-
# under the terms of the GNU Lesser General Public License as
|
|
11
|
-
# published by the Free Software Foundation; either version 2.1 of the
|
|
12
|
-
# License, or (at your option) any later version.
|
|
13
|
-
#
|
|
14
|
-
# Adapted from Arduino 0011 Makefile by M J Oldfield
|
|
15
|
-
#
|
|
16
|
-
# Original Arduino adaptation by mellis, eighthave, oli.keller
|
|
17
|
-
#
|
|
18
|
-
# Version 0.1 17.ii.2009 M J Oldfield
|
|
19
|
-
#
|
|
20
|
-
# 0.2 22.ii.2009 M J Oldfield
|
|
21
|
-
# - fixes so that the Makefile actually works!
|
|
22
|
-
# - support for uploading via ISP
|
|
23
|
-
# - orthogonal choices of using the Arduino for
|
|
24
|
-
# tools, libraries and uploading
|
|
25
|
-
#
|
|
26
|
-
# 0.3 21.v.2010 M J Oldfield
|
|
27
|
-
# - added proper license statement
|
|
28
|
-
# - added code from Philip Hands to reset
|
|
29
|
-
# Arduino prior to upload
|
|
30
|
-
#
|
|
31
|
-
# 0.4 25.v.2010 M J Oldfield
|
|
32
|
-
# - tweaked reset target on Philip Hands' advice
|
|
33
5
|
#
|
|
34
|
-
|
|
6
|
+
# Copyright (C) 2010 Martin Oldfield <m@mjo.tc>, based on work that is
|
|
7
|
+
# Copyright Nicholas Zambetti, David A. Mellis & Hernando Barragan
|
|
35
8
|
#
|
|
36
|
-
# STANDARD ARDUINO WORKFLOW
|
|
37
9
|
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
10
|
+
# See footer for copyright/changelog....
|
|
11
|
+
#
|
|
12
|
+
|
|
40
13
|
#
|
|
41
|
-
#
|
|
14
|
+
# CONFIGURATION
|
|
42
15
|
#
|
|
16
|
+
TARGET = duino
|
|
43
17
|
ARDUINO_DIR = /usr/share/arduino
|
|
44
|
-
#
|
|
45
|
-
TARGET = DUINO
|
|
46
18
|
ARDUINO_LIBS = Messenger
|
|
47
19
|
|
|
48
20
|
MCU = atmega328p
|
|
49
21
|
F_CPU = 16000000
|
|
50
|
-
ARDUINO_PORT = /dev/ttyUSB*
|
|
22
|
+
ARDUINO_PORT = /dev/ttyUSB*
|
|
51
23
|
|
|
52
24
|
# Linux
|
|
53
25
|
AVR_TOOLS_PATH = /usr/bin
|
|
@@ -55,9 +27,6 @@ AVRDUDE_CONF = /usr/share/arduino/hardware/tools/avrdude.conf
|
|
|
55
27
|
|
|
56
28
|
# INC_DIRS = ./vendor/Messenger
|
|
57
29
|
|
|
58
|
-
#
|
|
59
|
-
# include /usr/local/share/Arduino.mk
|
|
60
|
-
#
|
|
61
30
|
# Hopefully these will be self-explanatory but in case they're not:
|
|
62
31
|
#
|
|
63
32
|
# ARDUINO_DIR - Where the Arduino software has been unpacked
|
|
@@ -70,6 +39,14 @@ AVRDUDE_CONF = /usr/share/arduino/hardware/tools/avrdude.conf
|
|
|
70
39
|
# ARDUINO_PORT - The port where the Arduino can be found (only needed
|
|
71
40
|
# when uploading
|
|
72
41
|
#
|
|
42
|
+
# ARDUINO WITH OTHER TOOLS
|
|
43
|
+
#
|
|
44
|
+
# If the tools aren't in the Arduino distribution, then you need to
|
|
45
|
+
# specify their location:
|
|
46
|
+
#
|
|
47
|
+
# AVR_TOOLS_PATH = /usr/bin
|
|
48
|
+
# AVRDUDE_CONF = /etc/avrdude/avrdude.conf
|
|
49
|
+
|
|
73
50
|
# Once this file has been created the typical workflow is just
|
|
74
51
|
#
|
|
75
52
|
# $ make upload
|
|
@@ -90,16 +67,6 @@ AVRDUDE_CONF = /usr/share/arduino/hardware/tools/avrdude.conf
|
|
|
90
67
|
#
|
|
91
68
|
########################################################################
|
|
92
69
|
#
|
|
93
|
-
# ARDUINO WITH OTHER TOOLS
|
|
94
|
-
#
|
|
95
|
-
# If the tools aren't in the Arduino distribution, then you need to
|
|
96
|
-
# specify their location:
|
|
97
|
-
#
|
|
98
|
-
# AVR_TOOLS_PATH = /usr/bin
|
|
99
|
-
# AVRDUDE_CONF = /etc/avrdude/avrdude.conf
|
|
100
|
-
#
|
|
101
|
-
########################################################################
|
|
102
|
-
#
|
|
103
70
|
# ARDUINO WITH ISP
|
|
104
71
|
#
|
|
105
72
|
# You need to specify some details of your ISP programmer and might
|
|
@@ -399,3 +366,39 @@ depends: $(DEPS)
|
|
|
399
366
|
.PHONY: all clean depends upload raw_upload reset
|
|
400
367
|
|
|
401
368
|
include $(DEP_FILE)
|
|
369
|
+
|
|
370
|
+
#
|
|
371
|
+
# This makefile is from:
|
|
372
|
+
# http://mjo.tc/atelier/2009/02/arduino-cli.html
|
|
373
|
+
#
|
|
374
|
+
# With some help:
|
|
375
|
+
#
|
|
376
|
+
# http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1265576847
|
|
377
|
+
# http://johanneshoff.com/arduino-command-line/Makefile
|
|
378
|
+
#
|
|
379
|
+
# This file is free software; you can redistribute it and/or modify it
|
|
380
|
+
# under the terms of the GNU Lesser General Public License as
|
|
381
|
+
# published by the Free Software Foundation; either version 2.1 of the
|
|
382
|
+
# License, or (at your option) any later version.
|
|
383
|
+
#
|
|
384
|
+
# Adapted from Arduino 0011 Makefile by M J Oldfield
|
|
385
|
+
#
|
|
386
|
+
# Original Arduino adaptation by mellis, eighthave, oli.keller
|
|
387
|
+
#
|
|
388
|
+
# Version 0.1 17.ii.2009 M J Oldfield
|
|
389
|
+
#
|
|
390
|
+
# 0.2 22.ii.2009 M J Oldfield
|
|
391
|
+
# - fixes so that the Makefile actually works!
|
|
392
|
+
# - support for uploading via ISP
|
|
393
|
+
# - orthogonal choices of using the Arduino for
|
|
394
|
+
# tools, libraries and uploading
|
|
395
|
+
#
|
|
396
|
+
# 0.3 21.v.2010 M J Oldfield
|
|
397
|
+
# - added proper license statement
|
|
398
|
+
# - added code from Philip Hands to reset
|
|
399
|
+
# Arduino prior to upload
|
|
400
|
+
#
|
|
401
|
+
# 0.4 25.v.2010 M J Oldfield
|
|
402
|
+
# - tweaked reset target on Philip Hands' advice
|
|
403
|
+
#
|
|
404
|
+
########################################################################
|
data/duino/duino.pde
CHANGED
|
@@ -1,17 +1,283 @@
|
|
|
1
1
|
/*
|
|
2
|
+
* Arduin
|
|
2
3
|
*
|
|
3
|
-
* SCAFFOLD
|
|
4
4
|
*
|
|
5
|
+
* /home/nofxx/projects/ardo/control
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
8
9
|
|
|
9
10
|
#include <Messenger.h>
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
#define sec 1000
|
|
13
|
+
#define min 60000
|
|
14
|
+
#define hour 3600000
|
|
15
|
+
#define day 86400000
|
|
16
|
+
|
|
17
|
+
// Output
|
|
18
|
+
const int rxPin = 0;
|
|
19
|
+
const int txPin = 1;
|
|
20
|
+
const int d2 = 2;
|
|
21
|
+
const int d3 = 3;
|
|
22
|
+
const int d4 = 4;
|
|
23
|
+
const int d5 = 5;
|
|
24
|
+
const int d6 = 6;
|
|
25
|
+
const int d7 = 7;
|
|
26
|
+
const int d8 = 8;
|
|
27
|
+
const int d9 = 9;
|
|
28
|
+
//const int d10 = 10;
|
|
29
|
+
//const int d11 = 11;
|
|
30
|
+
//const int d12 = 12;
|
|
31
|
+
const int infoPin = 13;
|
|
32
|
+
|
|
33
|
+
// Input
|
|
34
|
+
const int i0 = A0;
|
|
35
|
+
const int i1 = A1;
|
|
36
|
+
const int i2 = A2;
|
|
37
|
+
const int i3 = A3;
|
|
38
|
+
const int i4 = A4;
|
|
39
|
+
const int i5 = A5;
|
|
40
|
+
// Digital
|
|
41
|
+
const int d10 = 10;
|
|
42
|
+
const int d11 = 11;
|
|
43
|
+
const int d12 = 12;
|
|
44
|
+
|
|
45
|
+
// Intervals (s)
|
|
46
|
+
unsigned long shoot = 1;
|
|
47
|
+
unsigned long sync = 5 * sec;
|
|
48
|
+
unsigned long time_now, last_shoot, last_sync;
|
|
49
|
+
|
|
50
|
+
int btnState = 0;
|
|
51
|
+
int touchState = 0;
|
|
52
|
+
int motorState = 0;
|
|
53
|
+
|
|
54
|
+
char buffer [50];
|
|
55
|
+
|
|
56
|
+
volatile int rx_state = LOW;
|
|
57
|
+
volatile int tx_state = LOW;
|
|
58
|
+
|
|
59
|
+
Messenger message = Messenger();
|
|
60
|
+
|
|
61
|
+
// Create the callback function
|
|
62
|
+
|
|
63
|
+
unsigned long mintomilli(unsigned long m) {
|
|
64
|
+
return(m * 60000);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void btnLed() {
|
|
68
|
+
if(digitalRead(d2) == 1) {
|
|
69
|
+
Serial.println("BUTTON");
|
|
70
|
+
digitalWrite(infoPin, HIGH);
|
|
71
|
+
analogWrite(d3, 250);
|
|
72
|
+
if (motorState != 0) {
|
|
73
|
+
motorState = 0;
|
|
74
|
+
} else {
|
|
75
|
+
motorState = 1;
|
|
76
|
+
}
|
|
77
|
+
} else {
|
|
78
|
+
digitalWrite(infoPin, LOW);
|
|
79
|
+
analogWrite(d3, LOW);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void messageReady() {
|
|
85
|
+
int pin = 2;
|
|
86
|
+
int val = 0;
|
|
87
|
+
// Loop through all the available elements of the message
|
|
88
|
+
while ( message.available() && pin <= infoPin ) {
|
|
89
|
+
val = message.readInt();
|
|
90
|
+
// Set the pin as determined by the message
|
|
91
|
+
analogWrite(pin, val);
|
|
92
|
+
pin = pin + 1;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void setup() {
|
|
98
|
+
// Atmega defaults INPUT
|
|
99
|
+
pinMode(infoPin, OUTPUT);
|
|
100
|
+
pinMode(d2, OUTPUT);
|
|
101
|
+
pinMode(d3, OUTPUT);
|
|
102
|
+
pinMode(d6, OUTPUT);
|
|
103
|
+
pinMode(d10, OUTPUT);
|
|
104
|
+
|
|
105
|
+
// testFalse();
|
|
106
|
+
shoot = mintomilli(shoot);
|
|
107
|
+
|
|
108
|
+
attachInterrupt(0, btnLed, CHANGE);
|
|
109
|
+
Serial.begin(115200);
|
|
110
|
+
//Serial.begin(9600);
|
|
111
|
+
message.attach(messageReady);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
void loop() {
|
|
116
|
+
|
|
117
|
+
time_now = millis();
|
|
118
|
+
|
|
119
|
+
// Sync over wire
|
|
120
|
+
if ( abs(time_now - last_sync) >= sync) {
|
|
121
|
+
last_sync = time_now;
|
|
122
|
+
sprintf(buffer, "i0:%d,i1:%d,i2:%d,i3:%d,i4:%d,i5:%d,d11:%d,d12:%d",
|
|
123
|
+
analogRead(i0),
|
|
124
|
+
analogRead(i1),
|
|
125
|
+
analogRead(i2),
|
|
126
|
+
analogRead(i3),
|
|
127
|
+
analogRead(i4),
|
|
128
|
+
analogRead(i5),
|
|
129
|
+
digitalRead(d11),
|
|
130
|
+
digitalRead(d12));
|
|
131
|
+
Serial.println(buffer);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
// if (motorState != 0) {
|
|
136
|
+
// analogWrite(d10, (analogRead(i1)/5));
|
|
137
|
+
// } else {
|
|
138
|
+
// analogWrite(d10, 0);
|
|
139
|
+
// }
|
|
140
|
+
|
|
141
|
+
// noInterrupts();
|
|
142
|
+
// interrupts();
|
|
143
|
+
|
|
144
|
+
// if ( abs(time_now - last_shoot) >= shoot) {
|
|
145
|
+
// last_shoot = time_now;
|
|
146
|
+
// // Serial.println("SHOOTING");
|
|
147
|
+
// digitalWrite(d6, HIGH); // turn the d6 on
|
|
148
|
+
// delay(400); // stop the program for some time
|
|
149
|
+
// digitalWrite(d6, LOW); // turn the d6 off
|
|
150
|
+
// }
|
|
151
|
+
|
|
152
|
+
// Terminate message with a linefeed and a carriage return
|
|
153
|
+
// Serial.print(13,BYTE);
|
|
154
|
+
// Serial.print(10,BYTE);
|
|
155
|
+
|
|
156
|
+
//Serial.println(touchState);
|
|
157
|
+
//Serial.print(byte(50));
|
|
158
|
+
// * Serial.print(78, BYTE) gives "N"
|
|
159
|
+
// * Serial.print(78, BIN) gives "1001110"
|
|
160
|
+
// * Serial.print(78, OCT) gives "116"
|
|
161
|
+
// * Serial.print(78, DEC) gives "78"
|
|
162
|
+
// * Serial.print(78, HEX) gives "4E"
|
|
163
|
+
// * Serial.println(1.23456, 0) gives "1"
|
|
164
|
+
// * Serial.println(1.23456, 2) gives "1.23"
|
|
165
|
+
// * Serial.println(1.23456, 4) gives "1.2346"
|
|
166
|
+
// lightVal = buffer;
|
|
167
|
+
|
|
168
|
+
// if (analogRead(i2) > 200) {
|
|
169
|
+
// analogWrite(d3, 0);
|
|
170
|
+
// } else {
|
|
171
|
+
// analogWrite(d3, 250);
|
|
172
|
+
// }
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
while ( Serial.available() ) message.process(Serial.read());
|
|
12
176
|
|
|
13
177
|
}
|
|
14
178
|
|
|
15
|
-
void
|
|
179
|
+
// void pulseJob(pin) {
|
|
180
|
+
// analogWrite(pin, 250);
|
|
181
|
+
// delay(2000);
|
|
182
|
+
// analogWrite(pin, LOW);
|
|
183
|
+
// }
|
|
184
|
+
|
|
185
|
+
// From Doorduino
|
|
186
|
+
// http://github.com/martymcguire/Doorduino/blob/master/Doorduino.pde
|
|
187
|
+
// Log a system message to console
|
|
188
|
+
// void log(char* message)
|
|
189
|
+
// {
|
|
190
|
+
// static char timeString[20];
|
|
191
|
+
// getTime(timeString);
|
|
192
|
+
|
|
193
|
+
// Serial.print("[");
|
|
194
|
+
// Serial.print(timeString);
|
|
195
|
+
// Serial.print("] DOOR: ");
|
|
196
|
+
// Serial.println(message);
|
|
197
|
+
|
|
198
|
+
// }
|
|
199
|
+
|
|
200
|
+
// void readRTC(time& currentTime)
|
|
201
|
+
// {
|
|
202
|
+
// Wire.beginTransmission(DS1307);
|
|
203
|
+
// Wire.send(R_SECS);
|
|
204
|
+
// Wire.endTransmission();
|
|
205
|
+
|
|
206
|
+
// Wire.requestFrom(DS1307, 7);
|
|
207
|
+
// currentTime.second = bcd2Dec(Wire.receive());
|
|
208
|
+
// currentTime.minute = bcd2Dec(Wire.receive());
|
|
209
|
+
// currentTime.hour = bcd2Dec(Wire.receive());
|
|
210
|
+
// currentTime.wkDay = bcd2Dec(Wire.receive());
|
|
211
|
+
// currentTime.day = bcd2Dec(Wire.receive());
|
|
212
|
+
// currentTime.month = bcd2Dec(Wire.receive());
|
|
213
|
+
// currentTime.year = bcd2Dec(Wire.receive());
|
|
214
|
+
// }
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
// void setRTC(time& newTime)
|
|
218
|
+
// {
|
|
219
|
+
// Wire.beginTransmission(DS1307);
|
|
220
|
+
// Wire.send(dec2Bcd(R_SECS));
|
|
221
|
+
// Wire.send(dec2Bcd(newTime.second));
|
|
222
|
+
// Wire.send(dec2Bcd(newTime.minute));
|
|
223
|
+
// Wire.send(dec2Bcd(newTime.hour));
|
|
224
|
+
// Wire.send(dec2Bcd(newTime.wkDay));
|
|
225
|
+
// Wire.send(dec2Bcd(newTime.day));
|
|
226
|
+
// Wire.send(dec2Bcd(newTime.month));
|
|
227
|
+
// Wire.send(dec2Bcd(newTime.year));
|
|
228
|
+
// Wire.endTransmission();
|
|
229
|
+
// }
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
// Build a human-readable representation of the current time
|
|
233
|
+
// @string character array to put the time in, must be 20 bytes long
|
|
234
|
+
// void getTime(char* string)
|
|
235
|
+
// {
|
|
236
|
+
// // Grab the latest time from the RTC
|
|
237
|
+
// time currentTime;
|
|
238
|
+
// readRTC(currentTime);
|
|
239
|
+
|
|
240
|
+
// // And build a formatted string to represent it
|
|
241
|
+
// sprintf(string, "20%02d-%02d-%02dT%02d:%02d:%02dZ",
|
|
242
|
+
// currentTime.year, currentTime.month, currentTime.day,
|
|
243
|
+
// currentTime.hour, currentTime.minute, currentTime.second);
|
|
244
|
+
// }
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
// void setTimeFromSerial()
|
|
248
|
+
// {
|
|
249
|
+
// time newTime;
|
|
250
|
+
|
|
251
|
+
// char temp = 0;
|
|
252
|
+
|
|
253
|
+
// // Wait for full time to be received
|
|
254
|
+
// for (int i = 0; i < 7; i++)
|
|
255
|
+
// {
|
|
256
|
+
// while (Serial.available() == 0) {}
|
|
257
|
+
|
|
258
|
+
// temp = Serial.read();
|
|
259
|
+
|
|
260
|
+
// switch (i) {
|
|
261
|
+
// case 0: newTime.year = temp; break;
|
|
262
|
+
// case 1: newTime.month = temp; break;
|
|
263
|
+
// case 2: newTime.day = temp; break;
|
|
264
|
+
// case 3: newTime.wkDay = temp; break;
|
|
265
|
+
// case 4: newTime.hour = temp; break;
|
|
266
|
+
// case 5: newTime.minute = temp; break;
|
|
267
|
+
// case 6: newTime.second = temp; break;
|
|
268
|
+
// }
|
|
269
|
+
// }
|
|
270
|
+
|
|
271
|
+
// setRTC(newTime);
|
|
272
|
+
// }
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
byte bcd2Dec(byte bcdVal)
|
|
276
|
+
{
|
|
277
|
+
return bcdVal / 16 * 10 + bcdVal % 16;
|
|
278
|
+
}
|
|
16
279
|
|
|
280
|
+
byte dec2Bcd(byte decVal)
|
|
281
|
+
{
|
|
282
|
+
return decVal / 10 * 16 + decVal % 10;
|
|
17
283
|
}
|