From 53a3fc11ad69b7c6964a152a710f310c6a077ade Mon Sep 17 00:00:00 2001 From: Patrick McDonagh Date: Fri, 23 Jun 2017 13:21:18 -0500 Subject: [PATCH] Adds IO Board Libraries --- .idea/.name | 1 + .idea/dbnavigator.xml | 542 ++++++++ .idea/libraries/Gradle___IOBoard_0_1_.xml | 9 + .idea/modules/poc-java_main.iml | 3 +- .idea/modules/poc-java_test.iml | 3 +- .idea/workspace.xml | 1114 ++++++++++------- Dockerfile | 25 + build.gradle | 5 + libs/IOBoard-0.1.jar | Bin 0 -> 8778 bytes libs/IOBoard-RPi-0.1.jar | Bin 0 -> 18589 bytes rpi_startup.sh | 1 + src/main/java/com/henrypump/poc/AnalogIn.java | 2 + .../java/com/henrypump/poc/IOControl.java | 38 +- src/main/java/com/henrypump/poc/POC.java | 6 +- src/main/java/com/henrypump/poc/Well.java | 53 +- 15 files changed, 1330 insertions(+), 472 deletions(-) create mode 100644 .idea/.name create mode 100644 .idea/dbnavigator.xml create mode 100644 .idea/libraries/Gradle___IOBoard_0_1_.xml create mode 100644 Dockerfile create mode 100644 libs/IOBoard-0.1.jar create mode 100644 libs/IOBoard-RPi-0.1.jar create mode 100644 rpi_startup.sh diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..b385d69 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +poc-java \ No newline at end of file diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..74f8e78 --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
\ No newline at end of file diff --git a/.idea/libraries/Gradle___IOBoard_0_1_.xml b/.idea/libraries/Gradle___IOBoard_0_1_.xml new file mode 100644 index 0000000..6d943ff --- /dev/null +++ b/.idea/libraries/Gradle___IOBoard_0_1_.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/poc-java_main.iml b/.idea/modules/poc-java_main.iml index 3dfc202..09dd5d9 100644 --- a/.idea/modules/poc-java_main.iml +++ b/.idea/modules/poc-java_main.iml @@ -1,6 +1,6 @@ - + @@ -13,6 +13,7 @@ + diff --git a/.idea/modules/poc-java_test.iml b/.idea/modules/poc-java_test.iml index 04909b9..c619f46 100644 --- a/.idea/modules/poc-java_test.iml +++ b/.idea/modules/poc-java_test.iml @@ -1,6 +1,6 @@ - + @@ -14,6 +14,7 @@ + diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dc0ff23..845f9ef 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,7 +2,14 @@ - + + + + + + + + @@ -17,6 +24,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -108,8 +135,41 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -118,128 +178,155 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -270,73 +357,6 @@ - - - - - - - - - - - - Displays the components produced by root project 'poc-java'. [incubating]<p><i>Task group: help<i> - Assembles and tests this project and all projects that depend on it.<p><i>Task group: build<i> - Displays the sub-projects of root project 'poc-java'.<p><i>Task group: help<i> - Generates IDEA project files (IML, IPR, IWS)<p><i>Task group: IDE<i> - Assembles main classes.<p><i>Task group: build<i> - <i>Task group: other<i> - Displays all buildscript dependencies declared in root project 'poc-java'.<p><i>Task group: help<i> - Generates Gradle wrapper files. [incubating]<p><i>Task group: Build Setup<i> - <i>Task group: other<i> - Assembles test classes.<p><i>Task group: build<i> - Generates Javadoc API documentation for the main source code.<p><i>Task group: documentation<i> - <i>Task group: other<i> - Assembles a jar archive containing the main classes.<p><i>Task group: build<i> - Displays the configuration model of root project 'poc-java'. [incubating]<p><i>Task group: help<i> - Generates IDEA module files (IML)<p><i>Task group: other<i> - Processes main resources.<p><i>Task group: other<i> - Displays the tasks runnable from root project 'poc-java'.<p><i>Task group: help<i> - Initializes a new Gradle build. [incubating]<p><i>Task group: Build Setup<i> - Cleans IDEA project files (IML, IPR)<p><i>Task group: IDE<i> - Generates an IDEA workspace file (IWS)<p><i>Task group: other<i> - Runs the unit tests.<p><i>Task group: verification<i> - Compiles main Java source.<p><i>Task group: other<i> - Displays the insight into a specific dependency in root project 'poc-java'.<p><i>Task group: help<i> - Runs all checks.<p><i>Task group: verification<i> - Assembles the outputs of this project.<p><i>Task group: build<i> - Deletes the build directory.<p><i>Task group: build<i> - Compiles test Java source.<p><i>Task group: other<i> - <i>Task group: other<i> - Displays all dependencies declared in root project 'poc-java'.<p><i>Task group: help<i> - Processes test resources.<p><i>Task group: other<i> - Displays a help message.<p><i>Task group: help<i> - <i>Task group: other<i> - Assembles and tests this project.<p><i>Task group: build<i> - Installs the 'archives' artifacts into the local Maven repository.<p><i>Task group: other<i> - Assembles and tests this project and all projects it depends on.<p><i>Task group: build<i> - <i>Task group: other<i> - <i>Task group: other<i> - Generates IDEA project file (IPR)<p><i>Task group: other<i> - Displays the properties of root project 'poc-java'.<p><i>Task group: help<i> - <i>Task group: other<i> - Configuration for archive artifacts. - Dependencies for source set 'main'. - Compile classpath for source set 'main'. - Compile dependencies for source set 'main'. - Configuration for default artifacts. - Runtime dependencies for source set 'main'. - Dependencies for source set 'test'. - Compile classpath for source set 'test'. - Compile dependencies for source set 'test'. - Runtime dependencies for source set 'test'. - - - - - - @@ -737,18 +770,21 @@ @@ -782,13 +818,24 @@ - + + - + + + + + + @@ -798,7 +845,7 @@ - @@ -812,7 +859,7 @@ - @@ -820,25 +867,44 @@ - + + + + + + - + + + + - - + + - @@ -1064,6 +1130,26 @@ + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1281,7 +1286,124 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1289,9 +1411,7 @@ - - - + @@ -1313,7 +1433,6 @@ - @@ -1321,7 +1440,6 @@ - @@ -1332,13 +1450,7 @@ - - - - - - - + @@ -1347,13 +1459,7 @@ - - - - - - - + @@ -1361,29 +1467,11 @@ - - - - - - - - - - - - - - + + - - - - - - - + @@ -1402,13 +1490,6 @@ - - - - - - - @@ -1460,13 +1541,6 @@ - - - - - - - @@ -1478,15 +1552,7 @@ - - - - - - - - - + @@ -1494,9 +1560,7 @@ - - - + @@ -1504,51 +1568,82 @@ + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - + + @@ -1556,70 +1651,195 @@ + + + + + + + - + - - + + - + - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + @@ -1686,6 +1906,18 @@ + + + 1.8 + + + + + Maven: com.googlecode.json-simple:json-simple:1.1.1 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9b77ceb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM resin/rpi-raspbian:jessie +# FROM ubuntu + +# Install dependencies +RUN apt-get update && apt-get install -y \ + git-core \ + build-essential \ + gcc \ + oracle-java8-jdk\ + curl\ + wget\ + --no-install-recommends && \ + rm -rf /var/lib/apt/lists/* + +RUN git clone git://git.drogon.net/wiringPi +RUN cd wiringPi && ./build +RUN curl -s get.pi4j.com | bash +COPY build/libs/poc-java-all-1.0-SNAPSHOT.jar /root +COPY rpi_startup.sh /root + +# Define working directory +WORKDIR /data +VOLUME /data + +CMD ["/root/rpi_startup.sh"] \ No newline at end of file diff --git a/build.gradle b/build.gradle index 389df61..c09159e 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,10 @@ targetCompatibility = 1.8 repositories { maven { url "http://repo.maven.apache.org/maven2" } + flatDir { + dirs 'libs' + } + } dependencies { @@ -20,6 +24,7 @@ dependencies { compile group: 'com.googlecode.json-simple', name: 'json-simple', version:'1.1.1' compile group: 'org.mongodb', name: 'mongodb-driver', version:'3.4.2' compile group: 'de.vandermeer', name: 'asciitable', version:'0.2.5' + compile name: 'IOBoard-0.1' testCompile group: 'junit', name: 'junit', version:'3.8.1' } diff --git a/libs/IOBoard-0.1.jar b/libs/IOBoard-0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..a9654d28a4268b819c7acb43b2db993619236742 GIT binary patch literal 8778 zcmaKSWmFvL)-@g)LU0cr2rg-~u>^v5~ zY>04*|4o#R9+R%|K{z6POdx(d@cx=8_eNeyTueokRZbixH}X|hhJ|$!LxzQMY-GGv znf)7ZeS32o;V)!AU8n!HD$*mFk*)RL7W_Tu*?)4(z&0P;?3}Fa{+9jwKCu5M+uZhl z09xU;Cb*9~Hh;{f_$R;{8v`p_Qz;u(BP#<3he!=`N8CC5dvOwTV>hdasz@^Kc%&HQ z{wHxY^RMmLk%);^tSFxWhBUJVYwFcV;E$5><!)Pvl!m(U?wb zsE)Bu^{FmZ4Tx7YA{m!UH}1NxKgM99UB|>=qVrL2(TE5!ZV6Fc{wzL)7bfo=;Cz0b z2akDOd|*H|a4T?Pj~PZ0O%c70OCq#Cfbe|It~*++aVgmH&K2(^7|K8)f6d|R7c)&l zCkF8H#)`f^X{0bc2?$c~;1T{=S3c2l9q2HQ|I%L!*YLQ^1qRF8o-qv&DBh^`F2gm- zj)%fT+Shvs!MAak?+768V*50_T&4Rf&0V#93CK8<8GyO30Zb?0NKuc-x2vj(iR>Se zfEvyCSKt-fg4&%bKfYKcNY129U%ZJ2Z(?mk!c1|e%)UOP3K&|1=Q`3l8lyDpJ)muy zHPZYkt`%RQPGXa9QgMbNy5K2OcEKd=bOR6G9DoKtPws0(>cW^@f>PWq21gt=xwPp3 ze&faTyR{gO)+Np$hvgr+GNhZujrF0o?;F#zXWP)evFsa=q~V7ajbvVL#iWw42jOfX zQSX0_owqcG)HtV3Jh zqWs2bq|Q0n!0CxjXsx{dmO#7l6oe#L3!#Z>UK`s)c-)$;uLPxs`d~aC!oZY4!VM^6 zGfm?3ct#+hu|qj-5*q9m*p*7fPIXt9IPMtsDiDEXdSc83M*Q{psynZRNtvs*q0>v+ zaQqW`raUio5#B!ZuG^6Fdsk)8BLd*6u7K406epCo%VnN6(i6_BUr3v<{TS*K9iEL8 zH?FuE^!Eb`%E~j{JT0isbrxJ1XZZqgr5sqC>f7U9J`|Ouapo_R`u{Y|N*;z0m8MV< zYb+ThV(Y7+DTb=74)(v8MceEZOr$fj37dDU58_{t;PlJ{Ph^jo=It~z2I#Ald`^xk>BwQbs^jfRMD3cRX$$`Nq23EvfWrhvtVm=2RRR^BN>pji8!O}+vl9R5{QklHVM`9ROmV+{-Qo`$x#M*a+MoJF~sbvgdsc&#l20Kaf3EbLxBP+ zQy?xNiFXA=OP~lsctuMinI<0P^}@Wctb)jPv(oXFq+=4Qb1VM_=2NakHV(OD?turI zVjm?@2eE9Z(%Eiv-o6>2fEG!kNxw%Q`{|VbMy;~96mKLmtGg5i?X5}$%Pnc^INlQb zV4or!n+Laf#?FDo!m)uo4U*#bjIA9~icR<|1?_Y?J_9m`dAk^A7?Ej8rAXu7+6{P! zi(AWEZW^pi`=FpbdJ)qY#?za<3exf>O15cYdC$ng;SUsyE;h|W&#e$2lFiXmSJ{1#E+4L zUcj49xlN81M|R|=6L_gN^JGa5u3^;<`Ea>t8=BE)nP49=ei9js6A&swNGD&MpjD28 z4zCPZ8ox3L%lV=PV)x(v2E-Was0uK#ad~IuVIHWeiq!tY=Xpj&N)^5q+IN2-rn4aj zMNacIry63iqsW-<)YxGx*(mt}`wx!IGLKCABH#rd4L>d3VZ-j-Ee7wc;Mic6Wwcex z1uUKV&hO0qb#b8hGc5GXARG{24rw{JdE;dr;B#&Xz*PiBx1Om%DCozxJi8-^l8vt5 zr*p3u5Ayx4Xoukbd5Fh1O)=gDp+1Ah%}CCIJt?b`xk99fy;O=UTrTHGDeVIUW$M|t zxUs-6kZK;e!&Ssm?=b==mj+5u%$+9o`vWF z4pQ;HEPx`b2i-*Rg={CIG^(c%QO0=Chp3=dk{~=DVPl36!^RMdMZPc*OvIGC5R6>c zqxw`CYqqmZ_yKfex;rL7%W$_ZWI8|;KhTJ%`2B*HVcN-XShsxys5?`DWzrH)eYZT# z#-pBPRZ~DYNTDYM@!hAgJ#uMOS3PCKTH0`gUNWP6r^%`7Y+0 zWGnm|*wmHJ`g%p)jT>)*-qLAt5eU}nT=x2kZnns~<`kf2N%->?AuT!>MFCnryxvTn zENghLbmiQDUsaVN6?l07LaFU!*h*x6w{8(s71-qnj401v(yUr?s|hysaI<+L8vZ^6 z?AkfjF|5?b6jSe?sol?~SvTp+y;a-?CbZyMeh`VS(dl`Um>z65A9_#ER@n-8HuZ(% z-oog`%lSq(=ppO>hKQMH-EXSG+Zli%vI6!h|}KWDSGA<8b3i_?06*AfyilJbap zd2tI)4srOwHe=VuB66E&))BfTm3L1GFtTD%R=zz&Q`2ki~L z04-%V+0Y5+V`An!hps`XIusFPW?_GPe+$9I@00pE(P~BZV!@083f8d>1$F{QT&pO@ zR@((X-*cCiRd5~Dn?wt$bCn{Otw=eURz;=FJprNZS*a^@>2wBliko87zgJmjWL-o^ zCah}uSkXCiVPS8t)=2xsUz0GSGJq0b|dc;_#d@2D`d&SB+E{ zXq{JAT~vRz>3p-Su-X%G`!Ui8{}ScIolY7OifXf47Pd?6iU@V6&6j|R6XczZ8#N-j zEba+zC6o|io?Lr8;iICyp);(UGC{N58BytP|NMi%BHm9QZjP^HhOWfrnS{%nQcTa>N`|Uid7$1;{plrZ z8An;nXY-p_MxRW1(#t8OIU(L%Ne%@08qI%$R*%3y4b(CZ0{8Km*jkHzH$==2FKRf? zIa_d#dUHE4Jj2EvJ#8pyTRf?9l1m$Q`MBU?2}5o!+AvyXKOh-$d9dyEQ@?ya*h<9d zX)3Y)cBA4hF%z)d96#jY;rjzw%NO-nzy7kt_W%%(nWP<~zw>GAT`01K?l=ZPQ*P=w zG=3FpB8ilLxwK>5eXLx)ZR_g5xwtUHTP@P0G_FcE{?NQo z!UMFSahR#Kj2zaMp+;MSt$dt;?7*B#%kMtn)}<}zri~z%$~$X9wY{yu9fzEVUpA^` zKCe;-PioXrV%OuI9=oTjQ{j=yxtS36@{Q9k86A zee6PWf z8^<}F;Y-Qb#B4R8UZwW?(NkpXLzu)D@-BvWLCki@<^s5nL5& z(haz&vrQWZlIpqAz%Y*-wG}?SN4K0Ut6-?G(P={U;V*nLUb{ z@j$pKdECSnLJC}L?9GyiJ6bNGiRiA$NJ#(}{X3rkzDz)cT#aZ#A{n(5j-KIc4-?5j zrE}4TNEeYe%C?$v4%LI{!0ycYi?@p zXkhjKnldl-aTOgkyn7qT(^Yf@G+&XP=p=QWc(}+qJZ%IP_=L3m0w}{L8i}0w!&RWaf3n3wY5!Ka-*~H&(&s$eB$2uobX4J2;=Tc<;s<)Ub(UO~V6w8_bg_ z5=#P=yBX;S$}+Zzt`kNDZ^6^^IJ~5S#Qo~83RPHWjSg$eDM?AMvgvmiiIP|*NZXFh z=^+U${K<|7Ji~nI-&PD$Nv#U{_1yXrHT3v4hAk^H9JdpgDq)?#J_|m})oSBPvS1dy zq+%z5XeTm%qA4hMkdxIqxqq61-T>cIbjM6y53);WRFn%eE9$bqnLrdF*3`LT9gz%$ zd*Ql7%YJ^$E-zyvL9YaakE}(e^FH%#yd7N&h7Q^!!rtTe7J{iUb%2wk06aAO?jJMo zmJr&_(+Hd;TWIE2M#+E&CuN^b*SYjp)3z8CI#^7ne9|JMDKK|gJ}3Psn<19_+$2!GL)qVs460Vloo|S%AUga4qmm==F-=fpVr$lSMZLOtlxq}p` zJXAL{U9ArPQa2K^8RS3eMgC4b({P1$0#}eYrPr+;faqznNckf3GeGLerOb_DR?$%p zGLIjRq+4v3N1fO0#lR)iCZfklpUWio37$8Fx5#_UE?d22+F|zF1ib_Uvpw+uh0*Y{ zvsoZz7}2^#4T2DV+>1yrp`E;!c{>uD3RqT_TN)OM1wVvMo(MQ&EV_H<2ThPKHqG9j z8wiq>k?r+xWppu@@|A$^tCHLz3?sPA8YAAe5v(2e2D-BQkiA};A8^>$a|}?JnQ;49 zf$<>JEu#!j)Jl?$8LoS05%vv1S*3s=LA$7>tg)n}qPc`LC$i?~$f;2HHKq%Q?5I4~ z_6*?3l>w0W?#_Qsa?^CDS-QueaF)UY+O)+dhk9%lY``OFBOvI%&H-Rq0Z`rHyXZbn z;pDi&OXI$_1}L_{)dO9PcjP`+l`se}Mh7_)VO`UNoB!C)scXb{e6cviUw1D4xTn z0&}C4r{XU0B&1FiD&ZfA4JECJ$<2^}0v-AX2bG{?56r#1dhwg2A3*(~skrZ|8;JZg z@uE4zXuATh5ufYCY1;SogQnF)e|^4s(;co|EWoT5jIkG zq-t1RYb55JMzl$nsBE$Ll3Oevo-c(a&ug{zMz!|J_yOo5wi!J98b~5VK5Qi5zLd}4 z-NunurA?eyRYt~p^32W;@g?hX`Y1&_!W=Z%{THKRdX2ie)#IbJyPr-zqhB6`9uQtr zFylrNy?Xy%b07pj!8+LY*_T5%;j4_Y?yP-Zep-XQEE0#gA(}>k$s*=Cj!#-jS3PCi zPqf=|quIBDJB}mhd&MkF>GjhHhH0gvt?@c`H3*4A5tdq^3>Cr12sHAuP;unCE61N0 z_qs#Y^9X8EFD=LMfd>sOR^>&-#Zo)U>Ni2#pbu@8-&$FUC@11%w_k;_@E@#>69TUT z;$ODV@nrx9^&(phRX3PavF>x-mA zq4vJ(g_cWN$kEJh>fhV6m@0?AO%9pF=)gNLXgI1|ecQ>q zu4$no;))>$stB$MDZomq#_0xBO%-Zj6+ui;Z4K3O>=#&FnHidGBc{^W+>yy_1MSdl zzrJSy&5F1_`SNwSjfG$Pgt<~Pq=t3s+l_^gs4F2l!baTO?F||Kc5G?mp^Ty$*HL3e z5p=(A3C8qw>&3NlDN%C2WNW_Vnt!-+Zc0)u)=tLVJGI&7pUC55?D7?ZW#=Apv`pxS zp9k6()q_YaFqL4EZcWk-Ro@}O<7!%;wpnZz*Ch$28Zwh1!Zd;{`(x#;NhJ;x&-qGPq^nwxXtaqhk~d!ST_j#77?cOJ$W)ag z@yjS?eGYngia~TPKJOWF6vA2_yRQF9n^bw zS1eZBVS&Q=hUJ+e`O8YBZ?Sjkr)y*67qJfMX>EqiKjdCq_ZgNBK~?b-Se$ zD(sr1l0o86AiP=D6Ep4iEGrY2*4_1tF7gCMK*>>9G;AwACW`Wa>d~*_& z1rB{toXvuHdBS?>4Dkv*12bTfnuoHrBn=z#)T6?p*U7D;ea!&|BxE3BM8=B(eBgv( zKp$jbd&-R#Tk%tG&z<(4M{UQfYi-9v4~;+PIuLoIgvISp9h^d_XtuJ5AgJArrscw$ie4QaYzY)8nUg7-E-7eDEfp)=?0!me$K51n{v2oQS1D!GSr@Py_cLsd2Qj&>iz_T?F!I- zvkq-hm{<|}Vri~WEYpJXIPUT@^*%4P!j9pmW+9Ap!bTWeCera2R!MO?Z>g+Jiw@&xJl=h7L4Ou+ zDVLAllocr3UZ-5P6(%U3yK4pJOSNa}dsEB|c_q(G9_@na-VmH`@RNS=?p~YOL_?Ll zu7nMI*aRGFg@oBCOw~`bW!8s#FNc^(z?>V{$CH?0wb!GkGL~laNw2bOnztI2WvdmP zd8E2+3`T~QXoHq0NDt=WB#+}+|j-u<)t4o`z?`3pKHfp<{0 z&K0sym7V;lJ7EWBwZ(?Um12*OZ$y9a(pSCvxvbrkO8)eewgjmbf-wj&Zb!oj>FsPc zl6)<=t>?RB_Lnov(jEfuV9Ue%ovyiwI_p!p+tqH0li0xV4W#szgAOm*?ASV}TrkjNNDXz{n&i)LEli9dn87sZnjcP*GyzQHzt}8zI(KsGdrJGg5 zysve&vBQQ|Vr6HV%Hqtu{P9C7a|EPoLVYvDYOteFR8Ok`d(1wQevmN=k0WK1vNMoR zUFkE{z+EUK!LD2X_E1D7=`!3T3dbEj`0`Uw?)-%vFtps7{BXXnrHTI1#4qX@D*MvA zYK#67NM1o)n=*m!us&?bsAWLgM+S;UiZMbp)*)(NPe=G?n}I5OkB&v5d5*rs^2VeYv{+A9IQ5&3Q@6H4@-be_u(zl z4o1M7BF~Q@(nJ9fH{*DLlCATEIomiMh9?(Stm8w!OM{R^td(IP#_<9fF4DgHGAKp!U;g|LvJ@ zY=L359zyo-M%A5?pgFJ1azD}Zbvs2nO;OmnHu>nVNsKU5wD&_w#}>`7ZIR3DCDSqy zIBm0k2pP{MNH^yB8k?|1lt(p)0TqT`W^i1WGt9OJ^D8`p!N-!K6N(wL>Mp0v6QMsJ zxO?iDKsAdlq{Va zx3qca4R~6C=(yC2bAhRry1@wiz}{?%@1c{<$(%89d0U&2^wH+ZN!`UMfiLgfF0=T!MHb{t=#@ry zo>8h7qEd$&+PRj){*Iz6#KJJGeV6+^c5%I@p($HeX6wlG*Y0Qf-KRi^$8`w4)DwBn zFvMbd+g`8Gbvqr-TdJt%9v?03n*bWD@5Fc)Jut-UY%wksI>;v~R({S^bJg881#QF6 zL@^s}g@|V*(@NZ;G2R#~YTlZ{{DeQf3{g|wo)-I-4W?6IWV-XIl9e?dk6q5={5tkWl=_rCkVp1(c#4x;7y%cO0zpYU5aP$7i&F) z7CEIx5>T(YFE;u%?D*&M^CqA*>~;Arxw5BD={T-HA_!I#mr0%}0DDCZy?c3h{17)! zxXF`fg4)}G+E4Qu;`2!9+Tzds#si-vH?iTw(&``L3)LqteASqTF&)mAUcpr|d=qcI zvB-S4?dYEDl?Y^%OuNlC4w6LK&l_>Od*zjFIFS9)lwMYJ;yzp)gDoam;)>eCR^z3l zM-cf|Gq>2m(YhHUQLF#O($&*&!`vUs9{BFzxda8=0`=|Tpt}9Kb~S4oP@5dtDno<5 zii9XX@>&j$OIZ6Gid6jj*^M`y!rnh;+Hr7NBlyhJzoAo{OQ#H75h(4{h!#u z|G_@`_P@h__wE0H|Jv^LKf(X*;{Q(e`_TGNGO5S+^7nl_-pe0k|LydCXZwA8^(R~8 z<3su%w%>+Xzq9?`c>c*oh5PSp|9W%3Yr;S2W(fa*?(YgwQ3m;OtPcl=_V_D({9GjT Im#T#OKl3}o9RL6T literal 0 HcmV?d00001 diff --git a/libs/IOBoard-RPi-0.1.jar b/libs/IOBoard-RPi-0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6aa6f8904b4b0ede299f0a82dd51bee09a39472 GIT binary patch literal 18589 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 literal 0 HcmV?d00001 diff --git a/rpi_startup.sh b/rpi_startup.sh new file mode 100644 index 0000000..68504ee --- /dev/null +++ b/rpi_startup.sh @@ -0,0 +1 @@ +java -classpath .:classes:/opt/pi4j/lib/'*':/root/poc-java-all-1.0-SNAPSHOT.jar com.henrypump.poc.POC localhost \ No newline at end of file diff --git a/src/main/java/com/henrypump/poc/AnalogIn.java b/src/main/java/com/henrypump/poc/AnalogIn.java index 3536937..e94c8d4 100644 --- a/src/main/java/com/henrypump/poc/AnalogIn.java +++ b/src/main/java/com/henrypump/poc/AnalogIn.java @@ -10,6 +10,7 @@ import mraa.mraa; import mraa.Platform; import mraa.Result; + import static java.lang.Thread.sleep; @@ -23,6 +24,7 @@ public class AnalogIn { private double euMax; private double[] history = new double[100]; + AnalogIn(int channel, double rawMin, double rawMax, double euMin, double euMax){ this.channel = channel; if (channel != 99) { diff --git a/src/main/java/com/henrypump/poc/IOControl.java b/src/main/java/com/henrypump/poc/IOControl.java index 16200d1..48f6ae8 100644 --- a/src/main/java/com/henrypump/poc/IOControl.java +++ b/src/main/java/com/henrypump/poc/IOControl.java @@ -1,5 +1,9 @@ package com.henrypump.poc; +import com.henrypump.io.DigitalIn; +import com.henrypump.io.DigitalOut; +import com.henrypump.io.MuxSetup; + /** * Created by patrickjmcd on 2/10/17. */ @@ -15,14 +19,14 @@ public class IOControl implements Runnable { IOControl(POC poc){ this.poc = poc; // IO - startBtn = new DigitalIn(99); - stopBtn = new DigitalIn(99); - led2 = new DigitalOut(2, 0); - led3 = new DigitalOut(3, 0); - led4 = new DigitalOut(4, 0); - led5 = new DigitalOut(5, 0); - runningIndicator = new DigitalOut(6,0); - runCommand = new DigitalOut(7,0); + startBtn = new DigitalIn(1); + stopBtn = new DigitalIn(2); + led2 = new DigitalOut(3); + led3 = new DigitalOut(4); + led4 = new DigitalOut(5); + led5 = new DigitalOut(6); + runningIndicator = new DigitalOut(2); + runCommand = new DigitalOut(1); } private void startWell(){ @@ -40,20 +44,20 @@ public class IOControl implements Runnable { } public void allOutputsOff(){ - led2.write(0,true); - led3.write(0,true); - led4.write(0,true); - led5.write(0,true); - runningIndicator.write(0, true); - runCommand.write(0,true); + led2.write(0); + led3.write(0); + led4.write(0); + led5.write(0); + runningIndicator.write(0); + runCommand.write(0); } public void run() { System.out.println("Running the IOControl Loop"); for (;;) { - if (startBtn.read() == 1) startWell(); - if (stopBtn.read() == 1) stopWell(); - if (startBtn.read() == 1 && stopBtn.read() == 1) { + if (startBtn.read(poc.thisWell.ioMux) == 1) startWell(); + if (stopBtn.read(poc.thisWell.ioMux) == 1) stopWell(); + if (startBtn.read(poc.thisWell.ioMux) == 1 && stopBtn.read(poc.thisWell.ioMux) == 1) { exitPOC(); } diff --git a/src/main/java/com/henrypump/poc/POC.java b/src/main/java/com/henrypump/poc/POC.java index 55cb7b5..216040b 100644 --- a/src/main/java/com/henrypump/poc/POC.java +++ b/src/main/java/com/henrypump/poc/POC.java @@ -15,16 +15,16 @@ public class POC implements Runnable{ POC(String dbHostname){ ioEnabled = true; - thisWell = new Well(dbHostname, 0, 1, 7); + thisWell = new Well(dbHostname, 1, 2); thisWell.getWellSetup(); } POC(String simFileName, boolean ioEnabled, String dbHostname){ this.ioEnabled = ioEnabled; if (this.ioEnabled) { - thisWell = new Well(dbHostname, simFileName,0, 1, 7); + thisWell = new Well(dbHostname, simFileName,1, 2); } else { - thisWell = new Well(dbHostname, simFileName,99, 99, 99); + thisWell = new Well(dbHostname, simFileName,99, 99); } thisWell.getWellSetup(); } diff --git a/src/main/java/com/henrypump/poc/Well.java b/src/main/java/com/henrypump/poc/Well.java index 5bab135..4541930 100644 --- a/src/main/java/com/henrypump/poc/Well.java +++ b/src/main/java/com/henrypump/poc/Well.java @@ -1,6 +1,8 @@ package com.henrypump.poc; +import com.henrypump.io.AnalogIn; +import com.henrypump.io.MuxSetup; import de.vandermeer.asciitable.v2.RenderedTable; import de.vandermeer.asciitable.v2.V2_AsciiTable; import de.vandermeer.asciitable.v2.render.V2_AsciiTableRenderer; @@ -16,12 +18,16 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.nio.file.*; +import java.time.Duration; +import java.time.Instant; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import static java.lang.Math.*; + + /** * Created by patrickjmcd on 1/31/17. */ @@ -34,6 +40,7 @@ public class Well { /* IO */ private AnalogIn inclinometer; private AnalogIn loadCell; + MuxSetup ioMux = new MuxSetup(); private double currentSurfacePosition; private double currentSurfaceLoad; private double currentDownholePosition; @@ -201,20 +208,20 @@ public class Well { private long minutesSinceTimerStart_last = 0; - Well(String dbHostname, int inclinometerChannel, int loadCellChannel, int runCommandChannel){ + Well(String dbHostname, int inclinometerChannel, int loadCellChannel){ this.wellName = wellName; db = new Database(dbHostname); strokesLifetime = db.getLastStrokeNum() + 1; currentCard = new Card(strokesLifetime); - inclinometer = new AnalogIn(inclinometerChannel, 0, 1020, 0, 145); - loadCell = new AnalogIn(loadCellChannel, 0, 1020, 0, 50000); + inclinometer = new AnalogIn(inclinometerChannel, 0, 65535, 0, 145); + loadCell = new AnalogIn(loadCellChannel, 0, 65535, 0, 50000); initializeMeasurements(); initializeSetpoints(); db.newRunStatus("Boot", "io"); } - Well(String dbHostname, String simFileName, int inclinometerChannel, int loadCellChannel, int runCommandChannel){ + Well(String dbHostname, String simFileName, int inclinometerChannel, int loadCellChannel){ this.wellName = wellName; sim = new Simulation(simFileName); db = new Database(dbHostname); @@ -228,6 +235,32 @@ public class Well { db.newRunStatus("Boot", "commandline"); } + private int[] calibrateInclinometer(){ + System.out.println("Calibrating inclinometer..."); + Instant startTime = Instant.now(); + int maxRaw = Integer.MIN_VALUE; + int minRaw = Integer.MAX_VALUE; + while (Duration.between(startTime, Instant.now()).toMillis() < 30000){ + inclinometer.read(ioMux); + if (inclinometer.rawValue > maxRaw){ + maxRaw = inclinometer.rawValue; + } + + if (inclinometer.rawValue < minRaw){ + minRaw = inclinometer.rawValue; + } + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + int minMax[] = new int[]{minRaw, maxRaw}; + System.out.println("Inclinometer Min: " + minRaw + ", Inclinometer Max: " + maxRaw); + return minMax; + }; + private void initializeSetpoints(){ /** * intializeSetpoints @@ -833,6 +866,8 @@ public class Well { strokesSinceStart = 0; pumpStartTime = ZonedDateTime.now(); db.newRunStatus(getRunStatusString(), initiator); + int[] inclMinMax = calibrateInclinometer(); + inclinometer = new AnalogIn(inclinometer.channel, inclMinMax[0], inclMinMax[1], inclinometer.euMin, inclinometer.euMax); } } @@ -1492,8 +1527,8 @@ public class Well { public void eval(){ checkSafeties(); - currentSurfacePosition = inclinometer.readScaled(); - currentSurfaceLoad = loadCell.readScaled(); + currentSurfacePosition = inclinometer.read(ioMux); + currentSurfaceLoad = loadCell.read(ioMux); LPStatus lastPoint = calc(currentSurfacePosition, currentSurfaceLoad); if (lastPoint.getStatus() == GOOD_STATUS){ currentDownholePosition = lastPoint.getPosition(); @@ -1556,8 +1591,8 @@ public class Well { public void eval(int simPoint){ checkSafeties(); - currentSurfacePosition = inclinometer.readScaledSim(sim.getPositionAtIndex(simPoint)); - currentSurfaceLoad = loadCell.readScaledSim(sim.getLoadAtIndex(simPoint)); + currentSurfacePosition = inclinometer.readSim(sim.getPositionAtIndex(simPoint)); + currentSurfaceLoad = loadCell.readSim(sim.getLoadAtIndex(simPoint)); LPStatus lastPoint = calc(currentSurfacePosition, currentSurfaceLoad); if (lastPoint.getStatus() == GOOD_STATUS){ @@ -1650,7 +1685,7 @@ public class Well { public static void main( String[] args ){ - Well thisWell = new Well(args[1], 99, 99, 99); + Well thisWell = new Well(args[1], 99, 99); thisWell.getWellSetup(); thisWell.printTapers(); }