Adds classes for raspberry pi

This commit is contained in:
Patrick McDonagh
2017-06-21 14:05:18 -05:00
parent 4ae4b314c5
commit 875e73d7f6
17 changed files with 1482 additions and 90 deletions

1
.idea/gradle.xml generated
View File

@@ -11,6 +11,7 @@
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
</set> </set>
</option> </option>
<option name="useAutoImport" value="true" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>

View File

@@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: com.pi4j:pi4j-core:1.1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.pi4j/pi4j-core/1.1/a9d5bdad79287c6e91d49ccbbc388141ad3b6b4e/pi4j-core-1.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.pi4j/pi4j-core/1.1/a0d03930cc29bc66a5807f9cf68536b9a8feb81a/pi4j-core-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -11,6 +11,7 @@
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Gradle: org.apache.commons:commons-math3:3.6.1" level="project" /> <orderEntry type="library" name="Gradle: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Gradle: io.mraa:mraa:1.5.1" level="project" /> <orderEntry type="library" name="Gradle: io.mraa:mraa:1.5.1" level="project" />
<orderEntry type="library" name="Gradle: com.pi4j:pi4j-core:1.1" level="project" />
<orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" /> <orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" />
</component> </component>
</module> </module>

View File

@@ -12,6 +12,7 @@
<orderEntry type="module" module-name="IOBoard_main" /> <orderEntry type="module" module-name="IOBoard_main" />
<orderEntry type="library" name="Gradle: org.apache.commons:commons-math3:3.6.1" level="project" /> <orderEntry type="library" name="Gradle: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Gradle: io.mraa:mraa:1.5.1" level="project" /> <orderEntry type="library" name="Gradle: io.mraa:mraa:1.5.1" level="project" />
<orderEntry type="library" name="Gradle: com.pi4j:pi4j-core:1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Gradle: junit:junit:4.12" level="project" /> <orderEntry type="library" scope="PROVIDED" name="Gradle: junit:junit:4.12" level="project" />
<orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" /> <orderEntry type="library" name="Gradle: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" /> <orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />

416
.idea/workspace.xml generated
View File

@@ -2,9 +2,16 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="c1cece9d-ba4a-4cc9-b680-4dc0f1ec17bf" name="Default" comment=""> <list default="true" id="c1cece9d-ba4a-4cc9-b680-4dc0f1ec17bf" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/gradle.xml" /> <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogOut.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/modules.xml" /> <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOutPi.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/modules/IOBoard.iml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/gradle.xml" afterPath="$PROJECT_DIR$/.idea/gradle.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules/IOBoard_main.iml" afterPath="$PROJECT_DIR$/.idea/modules/IOBoard_main.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules/IOBoard_test.iml" afterPath="$PROJECT_DIR$/.idea/modules/IOBoard_test.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/boardtest.py" afterPath="$PROJECT_DIR$/boardtest.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.gradle" afterPath="$PROJECT_DIR$/build.gradle" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java" />
</list> </list>
<ignored path="$PROJECT_DIR$/.gradle/" /> <ignored path="$PROJECT_DIR$/.gradle/" />
<ignored path="$PROJECT_DIR$/build/" /> <ignored path="$PROJECT_DIR$/build/" />
@@ -29,7 +36,98 @@
</system> </system>
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300" /> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="MuxSetup.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="92" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="DigitalOut.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="17" column="9" lean-forward="false" selection-start-line="15" selection-start-column="8" selection-end-line="17" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AnalogIn.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogIn.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="696">
<caret line="100" column="17" lean-forward="true" selection-start-line="96" selection-start-column="16" selection-end-line="100" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AnalogInPi.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogInPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="471">
<caret line="71" column="0" lean-forward="true" selection-start-line="71" selection-start-column="0" selection-end-line="71" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="DigitalInPi.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalInPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="95">
<caret line="26" column="2" lean-forward="false" selection-start-line="26" selection-start-column="2" selection-end-line="26" selection-end-column="41" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AnalogOutPi.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogOutPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="720">
<caret line="48" column="33" lean-forward="false" selection-start-line="48" selection-start-column="33" selection-end-line="48" selection-end-column="33" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="MuxSetupPi.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetupPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="472">
<caret line="114" column="17" lean-forward="true" selection-start-line="114" selection-start-column="17" selection-end-line="114" selection-end-column="17" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2278#2279#0" expanded="true" />
<element signature="e#2315#2316#0" expanded="true" />
<element signature="e#2351#2352#0" expanded="true" />
<element signature="e#2389#2390#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="DigitalOutPi.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOutPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="632">
<caret line="64" column="23" lean-forward="true" selection-start-line="64" selection-start-column="23" selection-end-line="64" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component> </component>
<component name="FileTemplateManagerImpl"> <component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES"> <option name="RECENT_TEMPLATES">
@@ -54,7 +152,7 @@
<component name="GradleLocalSettings"> <component name="GradleLocalSettings">
<option name="myGradleHomes"> <option name="myGradleHomes">
<map> <map>
<entry key="$PROJECT_DIR$" value="/usr/local/Cellar/gradle/3.5/libexec" /> <entry key="$PROJECT_DIR$" value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.5-all/exhrs6ca08n232b14ue48lbye/gradle-3.5" />
</map> </map>
</option> </option>
<option name="myGradleVersions"> <option name="myGradleVersions">
@@ -229,8 +327,8 @@
</option> </option>
<option name="modificationStamps"> <option name="modificationStamps">
<map> <map>
<entry key="$PROJECT_DIR$" value="4492443303000" /> <entry key="$PROJECT_DIR$" value="4492970445000" />
<entry key="$PROJECT_DIR$/build.gradle" value="209246541" /> <entry key="$PROJECT_DIR$/build.gradle" value="142808790" />
<entry key="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" value="1114575256" /> <entry key="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" value="1114575256" />
<entry key="$PROJECT_DIR$/settings.gradle" value="4252457423" /> <entry key="$PROJECT_DIR$/settings.gradle" value="4252457423" />
</map> </map>
@@ -407,22 +505,30 @@
<option name="CHANGED_PATHS"> <option name="CHANGED_PATHS">
<list> <list>
<option value="$PROJECT_DIR$/src/main/java/DigitalIn.class" /> <option value="$PROJECT_DIR$/src/main/java/DigitalIn.class" />
<option value="$PROJECT_DIR$/build.gradle" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalIn.java" /> <option value="$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalIn.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalInMux.java" /> <option value="$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalInMux.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalOut.java" /> <option value="$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalOut.java" />
<option value="$PROJECT_DIR$/settings.gradle" /> <option value="$PROJECT_DIR$/settings.gradle" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalInMux.java" /> <option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalInMux.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalIn.java" /> <option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalIn.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogIn.java" /> <option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogIn.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java" />
<option value="$PROJECT_DIR$/boardtest.py" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogOut.java" />
<option value="$PROJECT_DIR$/build.gradle" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalInPi.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOutPi.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogOutPi.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetupPi.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogInPi.java" />
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="y" value="23" />
<option name="width" value="1680" /> <option name="width" value="1680" />
<option name="height" value="1050" /> <option name="height" value="1027" />
</component> </component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" /> <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView"> <component name="ProjectView">
@@ -440,7 +546,7 @@
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="Scratches" /> <pane id="PackagesPane" />
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<PATH> <PATH>
@@ -453,15 +559,54 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="IOBoard" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="IOBoard" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="IOBoard" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="IOBoard" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="main" />
<option name="myItemType" value="org.jetbrains.plugins.gradle.projectView.GradleTreeStructureProvider$GradleSourceSetDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="io" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" /> <pane id="Scope" />
<pane id="PackagesPane" /> <pane id="Scratches" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="FullScreen" value="true" />
</component> </component>
<component name="RunDashboard"> <component name="RunDashboard">
<option name="ruleStates"> <option name="ruleStates">
@@ -698,7 +843,8 @@
<servers /> <servers />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="0" y="0" width="1680" height="1050" extended-state="0" /> <frame x="0" y="23" width="1680" height="1027" extended-state="6" />
<editor active="true" />
<layout> <layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
@@ -706,7 +852,7 @@
<window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32901296" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32901296" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
@@ -738,6 +884,70 @@
<watches-manager /> <watches-manager />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="92" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="17" column="9" lean-forward="false" selection-start-line="15" selection-start-column="8" selection-end-line="17" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogIn.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1590">
<caret line="108" column="0" lean-forward="true" selection-start-line="9" selection-start-column="4" selection-end-line="108" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogInPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1005">
<caret line="72" column="42" lean-forward="true" selection-start-line="72" selection-start-column="42" selection-end-line="72" selection-end-column="42" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetupPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1320">
<caret line="95" column="0" lean-forward="true" selection-start-line="95" selection-start-column="0" selection-end-line="95" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2278#2279#0" expanded="true" />
<element signature="e#2315#2316#0" expanded="true" />
<element signature="e#2351#2352#0" expanded="true" />
<element signature="e#2389#2390#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOutPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1230">
<caret line="82" column="55" lean-forward="true" selection-start-line="82" selection-start-column="55" selection-end-line="82" selection-end-column="55" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalInPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1065">
<caret line="78" column="0" lean-forward="true" selection-start-line="78" selection-start-column="0" selection-end-line="78" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java"> <entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1260"> <state relative-caret-position="1260">
@@ -750,9 +960,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="630"> <state relative-caret-position="630">
<caret line="46" column="25" lean-forward="false" selection-start-line="46" selection-start-column="25" selection-end-line="46" selection-end-column="25" /> <caret line="46" column="25" lean-forward="false" selection-start-line="46" selection-start-column="25" selection-end-line="46" selection-end-column="25" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -761,7 +969,7 @@
<state relative-caret-position="315"> <state relative-caret-position="315">
<caret line="27" column="44" lean-forward="false" selection-start-line="27" selection-start-column="44" selection-end-line="27" selection-end-column="44" /> <caret line="27" column="44" lean-forward="false" selection-start-line="27" selection-start-column="44" selection-end-line="27" selection-end-column="44" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
@@ -786,9 +994,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="630"> <state relative-caret-position="630">
<caret line="46" column="25" lean-forward="true" selection-start-line="46" selection-start-column="25" selection-end-line="46" selection-end-column="25" /> <caret line="46" column="25" lean-forward="true" selection-start-line="46" selection-start-column="25" selection-end-line="46" selection-end-column="25" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -797,7 +1003,7 @@
<state relative-caret-position="315"> <state relative-caret-position="315">
<caret line="27" column="44" lean-forward="false" selection-start-line="27" selection-start-column="44" selection-end-line="27" selection-end-column="44" /> <caret line="27" column="44" lean-forward="false" selection-start-line="27" selection-start-column="44" selection-end-line="27" selection-end-column="44" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="false" />
</folding> </folding>
</state> </state>
</provider> </provider>
@@ -812,37 +1018,10 @@
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/main/java/DigitalIn.java" /> <entry file="file://$PROJECT_DIR$/src/main/java/DigitalIn.java" />
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalIn.java" /> <entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/boardtest/DigitalIn.java" />
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1260">
<caret line="89" column="9" lean-forward="false" selection-start-line="89" selection-start-column="9" selection-end-line="89" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogIn.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="831">
<caret line="100" column="17" lean-forward="false" selection-start-line="100" selection-start-column="17" selection-end-line="100" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/settings.gradle">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="18" column="0" lean-forward="true" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/gradlew.bat"> <entry file="file://$PROJECT_DIR$/gradlew.bat">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -850,27 +1029,6 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0"> <state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="420">
<caret line="28" column="4" lean-forward="false" selection-start-line="28" selection-start-column="4" selection-end-line="28" selection-end-column="4" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="630">
<caret line="46" column="25" lean-forward="false" selection-start-line="46" selection-start-column="25" selection-end-line="46" selection-end-column="25" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -878,6 +1036,120 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="315"> <state relative-caret-position="315">
<caret line="27" column="44" lean-forward="false" selection-start-line="27" selection-start-column="44" selection-end-line="27" selection-end-column="44" /> <caret line="27" column="44" lean-forward="false" selection-start-line="27" selection-start-column="44" selection-end-line="27" selection-end-column="44" />
<folding>
<element signature="imports" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/boardtest.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="522">
<caret line="40" column="20" lean-forward="false" selection-start-line="40" selection-start-column="20" selection-end-line="40" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/settings.gradle">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="17" column="28" lean-forward="true" selection-start-line="17" selection-start-column="28" selection-end-line="17" selection-end-column="28" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="390">
<caret line="32" column="0" lean-forward="true" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogOut.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="360">
<caret line="24" column="0" lean-forward="false" selection-start-line="24" selection-start-column="0" selection-end-line="24" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOut.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="17" column="9" lean-forward="false" selection-start-line="15" selection-start-column="8" selection-end-line="17" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetup.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="92" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/src.zip!/java/time/Duration.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="559">
<caret line="647" column="7" lean-forward="false" selection-start-line="647" selection-start-column="7" selection-end-line="647" selection-end-column="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalOutPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="632">
<caret line="64" column="23" lean-forward="true" selection-start-line="64" selection-start-column="23" selection-end-line="64" selection-end-column="23" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogIn.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="696">
<caret line="100" column="17" lean-forward="true" selection-start-line="96" selection-start-column="16" selection-end-line="100" selection-end-column="17" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/DigitalInPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="95">
<caret line="26" column="2" lean-forward="false" selection-start-line="26" selection-start-column="2" selection-end-line="26" selection-end-column="41" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/MuxSetupPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="472">
<caret line="114" column="17" lean-forward="true" selection-start-line="114" selection-start-column="17" selection-end-line="114" selection-end-column="17" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2278#2279#0" expanded="true" />
<element signature="e#2315#2316#0" expanded="true" />
<element signature="e#2351#2352#0" expanded="true" />
<element signature="e#2389#2390#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogOutPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="720">
<caret line="48" column="33" lean-forward="false" selection-start-line="48" selection-start-column="33" selection-end-line="48" selection-end-column="33" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/io/AnalogInPi.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="471">
<caret line="71" column="0" lean-forward="true" selection-start-line="71" selection-start-column="0" selection-end-line="71" selection-end-column="0" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>

430
HPOCV11/HPOCV11.ino Executable file
View File

@@ -0,0 +1,430 @@
#include <SPI.h>
#define ON 1
#define OFF 0
#define TIMREADA2D 0
#define TIMCLICKRELAY 1
#define TIMFLASHEDISONLED 2
#define TIMWRITED2A 3
#define TIMREADDIGS 4
void AnalogIn(void);
void AnalogOut(void);
void FlashEdisonLED(void);
void Relays(void);
void ReadDigitals(void);
void Timers(void);
unsigned int anout1; // Analog output value 1 - 0xFFFF (0 - 20mA)
unsigned int anout2; // Analog output value 2 - 0xFFFF (0 - 20mA)
unsigned int anin1; // Analog output value 1 - 0xFFFF (0-20mA, 0-10V, 0-5V)
unsigned int anin2; // Analog output value 2 - 0xFFFF (0-20mA, 0-10V, 0-5V)
unsigned int anin3; // Analog output value 3 - 0xFFFF (0-20mA, 0-10V, 0-5V)
unsigned int anin4; // Analog output value 4 - 0xFFFF (0-20mA, 0-10V, 0-5V)
// unsigned char edisonled; // flag for led on edison cannot use since messes with SPI
unsigned char redled; // flag for red status led
unsigned char greenled; // flag for green status led
unsigned char relay1, relay2, relay3, relay4, relay5, relay6; // Flags for control of relays
unsigned char digin1, digin2, digin3, digin4, digin5, digin6, digin7, digin8; // Flags show dig input state
unsigned long oldticker;
unsigned int ticker; // Millisecond counter
unsigned int timers[10];
void setup()
{
anout1 = 0;
anout2 = 0;
relay1 = 0;
relay2 = 0;
relay3 = 0;
relay4 = 0;
relay5 = 0;
relay6 = 0;
redled = 0;
greenled = 0;
pinMode(0, OUTPUT); // Relay 1
pinMode(1, OUTPUT); // Relay 2
pinMode(2, OUTPUT); // Relay 3
pinMode(3, OUTPUT); // Relay 4
pinMode(4, OUTPUT); // Relay 5
pinMode(5, OUTPUT); // Relay 6
pinMode(6, OUTPUT); // D2A CS
pinMode(8, OUTPUT); // Red board LED
pinMode(9, OUTPUT); // Green board LED
pinMode(11, OUTPUT); // SPI Out data
pinMode(12, INPUT); // SPI In data
pinMode(13, OUTPUT); // SPI CLK & Board LED)
pinMode(A5, INPUT);
pinMode(A0, OUTPUT); // Channel select LSB
pinMode(A1, OUTPUT); // Channel select 2nd bit
pinMode(A2, OUTPUT); // Channel select MSB
pinMode(A3, INPUT); // Result from reading digital inputs
// SPISettings settingsA(2000000, MSBFIRST, SPI_MODE1);
// SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
SPI.begin();
SPI.setBitOrder(MSBFIRST);
Serial.begin(9600);
pinMode(SS, OUTPUT);
}
void Relays(void)
{
if (relay1 == 1)
digitalWrite(0, HIGH);
else
digitalWrite(0, LOW);
if (relay2 == 1)
digitalWrite(1, HIGH);
else
digitalWrite(1, LOW);
if (relay3 == 1)
digitalWrite(2, HIGH);
else
digitalWrite(2, LOW);
if (relay4 == 1)
digitalWrite(3, HIGH);
else
digitalWrite(3, LOW);
if (relay5 == 1)
digitalWrite(4, HIGH);
else
digitalWrite(4, LOW);
if (relay6 == 1)
digitalWrite(5, HIGH);
else
digitalWrite(5, LOW);
}
void LEDs(void)
{
if (redled == 1)
digitalWrite(8, HIGH);
else
digitalWrite(8, LOW);
if (greenled == 1)
digitalWrite(9, HIGH);
else
digitalWrite(9, LOW);
}
void Timers(void)
{
unsigned char x;
unsigned long milli;
milli = millis();
if (milli == oldticker)
return;
oldticker = milli;
ticker++;
for (x=0; x<10;x++)
{
if(timers[x] > 0) timers[x]--;
}
// anout1++;
}
void AnalogOut(void)
{
static unsigned char x = 8;
static unsigned char diff;
unsigned char val;
unsigned int val16;
unsigned int incomingByte;
if (timers[TIMWRITED2A])
return;
anout1++;
// SPI.beginTransaction(2000000, MSBFIRST, SPI_MODE1);
digitalWrite(6, LOW);
val = 16; // Chan A
SPI.transfer(x);
if (diff == 1) x++;
if (diff == 2) x--;
diff = 0;
val16 = anout1;
val16 = val16 >> 8;
val = val16 & 0xFF;
SPI.transfer(0);
// SPI.transfer(val);
val = anout1 & 0xFF;
SPI.transfer(val);
// SPI.transfer(0);
/*
Serial.print(x);
Serial.print("\n");
if (Serial.available() > 0)
{
incomingByte = Serial.read();
if (incomingByte == '.') diff = 1;
if (incomingByte == ',') diff = 2;
if (incomingByte == ' ') diff = 0;
}
*/
timers[TIMWRITED2A] = 100;
digitalWrite(6, HIGH);
}
void AnalogIn(void)
{
unsigned char a,b,c;
unsigned int x;
static unsigned char chan = 0;
if (timers[TIMREADA2D])
return;
switch(chan)
{
case 0:
{
digitalWrite(A0, LOW); // Need to set up mux for each A2D like the relays
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
a = SPI.transfer(0);
b = SPI.transfer(0);
c = SPI.transfer(0);
/* Serial.print(a);
Serial.print(",");
Serial.print(b);
Serial.print(",");
Serial.print(c);
Serial.print(",");
*/ if (c == 13) // 13 good reading, 45 overrange, anything else A2D not ready
{
x = (unsigned int) a * 256;
x = x + b;
if (x >= 32767) // wrong ref fix
{ // wrong ref fix
x = x - 32767; // wrong ref fix
x = x * 2; // wrong ref fix
} // wrong ref fix
}
else
x = 0;
anin1 = x;
break;
}
case 1:
{
digitalWrite(A0, HIGH); // Need to set up mux for each A2D like the relays
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
a = SPI.transfer(0);
b = SPI.transfer(0);
c = SPI.transfer(0);
if (c == 13) // 13 good reading, 45 overrange, anything else A2D not ready
{
x = (unsigned int) a * 256;
x = x + b;
if (x >= 32767) // wrong ref fix
{ // wrong ref fix
x = x - 32767; // wrong ref fix
x = x * 2; // wrong ref fix
} // wrong ref fix
else
x = 0;
anin2 = x;
break;
}
}
case 2:
{
digitalWrite(A0, LOW); // Need to set up mux for each A2D like the relays
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
a = SPI.transfer(0);
b = SPI.transfer(0);
c = SPI.transfer(0);
if (c == 13) // 13 good reading, 45 overrange, anything else A2D not ready
{
x = (unsigned int) a * 256;
x = x + b;
if (x >= 32767) // wrong ref fix
{ // wrong ref fix
x = x - 32767; // wrong ref fix
x = x * 2; // wrong ref fix
} // wrong ref fix
}
else
x = 0;
anin3 = x;
break;
}
case 3:
{
digitalWrite(A0, HIGH); // Need to set up mux for each A2D like the relays
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
a = SPI.transfer(0);
b = SPI.transfer(0);
c = SPI.transfer(0);
if (c == 13) // 13 good reading, 45 overrange, anything else A2D not ready
{
x = (unsigned int) a * 256;
x = x + b;
if (x >= 32767) // wrong ref fix
{ // wrong ref fix
x = x - 32767; // wrong ref fix
x = x * 2; // wrong ref fix
} // wrong ref fix
}
else
x = 0;
anin4 = x;
break;
}
default: ;
}
chan++;
if(chan > 3)
chan = 0;
Serial.print(anin1);
Serial.print(",");
Serial.print(anin2);
Serial.print(",");
Serial.print(anin3);
Serial.print(",");
Serial.print(anin4);
Serial.print("\n");
timers[TIMREADA2D] = 1000;
}
void ReadDigitals(void)
{
if (timers[TIMREADDIGS])
return;
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
if (digitalRead(A3))
digin1 = 0;
else
digin1 = 1;
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
if (digitalRead(A3))
digin2 = 0;
else
digin2 = 1;
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
if (digitalRead(A3))
digin3 = 0;
else
digin3 = 1;
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
if (digitalRead(A3))
digin4 = 0;
else
digin4 = 1;
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
if (digitalRead(A3))
digin5 = 0;
else
digin5 = 1;
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
if (digitalRead(A3))
digin6 = 0;
else
digin6 = 1;
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
if (digitalRead(A3))
digin7 = 0;
else
digin7 = 1;
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
if (digitalRead(A3))
digin8 = 0;
else
digin8 = 1;
timers[TIMREADDIGS] = 500;
Serial.print(digin1);
Serial.print(", ");
Serial.print(digin2);
Serial.print(", ");
Serial.print(digin3);
Serial.print(", ");
Serial.print(digin4);
Serial.print(", ");
Serial.print(digin5);
Serial.print(", ");
Serial.print(digin6);
Serial.print(", ");
Serial.print(digin7);
Serial.print(", ");
Serial.print(digin8);
Serial.print(", ");
Serial.print("\n");
}
void loop() // the loop function runs over and over again forever
{
AnalogIn();
ReadDigitals();
LEDs();
Timers();
Relays();
AnalogOut();
anout1++;
if (timers[TIMCLICKRELAY] == 0)
{
if (relay1)
{
relay1 = 0;
relay2 = 1;
relay3 = 0;
relay4 = 1;
relay5 = 0;
relay6 = 1;
redled = 1;
greenled = 0;
}
else
{
relay1 = 1;
relay2 = 0;
relay3 = 1;
relay4 = 0;
relay5 = 1;
relay6 = 0;
redled = 0;
greenled = 1;
}
timers[TIMCLICKRELAY] = 5000;
}
}

View File

@@ -38,7 +38,7 @@ pinA2.dir(mraa.DIR_OUT)
pinA3 = mraa.Gpio(17) pinA3 = mraa.Gpio(17)
pinA3.dir(mraa.DIR_IN) pinA3.dir(mraa.DIR_IN)
spi_bus = mraa.Spi(0) spi_bus = mraa.Spi(5)
print(spi_bus.lsbmode(False)) print(spi_bus.lsbmode(False))

View File

@@ -27,5 +27,6 @@ dependencies {
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
compile group: 'io.mraa', name: 'mraa', version:'1.5.1' compile group: 'io.mraa', name: 'mraa', version:'1.5.1'
compile group: 'com.pi4j', name: 'pi4j-core', version: '1.1'
} }

127
pi_boardtest.py Normal file
View File

@@ -0,0 +1,127 @@
"""Test the IO Board using a Raspberry Pi."""
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
import time
import spidev
spi = spidev.SpiDev()
spi.open(0, 0)
GPIO.setmode(GPIO.BOARD)
if GPIO.getmode() == 11:
mux_channels = [5, 6, 13]
inp_channel = 19
relay_channels = [21, 20, 16, 12, 25, 24, 23, 18]
else:
mux_channels = [29, 31, 33]
inp_channel = 35
relay_channels = [40, 38, 36, 32, 22, 18, 16, 12]
GPIO.setup(mux_channels, GPIO.OUT)
GPIO.setup(relay_channels, GPIO.OUT)
GPIO.setup(inp_channel, GPIO.IN)
input_mux = [
[],
[0, 0, 0], # Input 1
[1, 0, 0], # Input 2
[0, 1, 0], # Input 3
[1, 1, 0], # Input 4
[0, 0, 1], # Input 5
[1, 0, 1], # Input 6
[0, 1, 1], # Input 7
[1, 1, 1], # Input 8
]
GPIO_mux = [
(),
(GPIO.LOW, GPIO.LOW, GPIO.LOW), # 1
(GPIO.HIGH, GPIO.LOW, GPIO.LOW), # 2
(GPIO.LOW, GPIO.HIGH, GPIO.LOW), # 3
(GPIO.HIGH, GPIO.HIGH, GPIO.LOW), # 4
(GPIO.LOW, GPIO.LOW, GPIO.HIGH), # 5
(GPIO.HIGH, GPIO.LOW, GPIO.HIGH), # 6
(GPIO.LOW, GPIO.HIGH, GPIO.HIGH), # 7
(GPIO.HIGH, GPIO.HIGH, GPIO.HIGH) # 8
]
def relay_write(relay_number, status):
"""Write the specified status to the relay at the relay_number."""
write_val = GPIO.HIGH if status >= 1 else GPIO.LOW
if relay_number <= 8 and relay_number >= 1:
GPIO.output(relay_channels[relay_number - 1], write_val)
return True
else:
print("CANNOT WRITE TO A RELAY THAT DOES NOT EXIST: {}".format(relay_number))
return False
def relay_loop():
"""Set all relays to 1 sequentially, then set all relays to 0 sequentially."""
for i in range(1, 9):
relay_write(i, 1)
time.sleep(1)
for i in range(1, 9):
relay_write(i, 0)
time.sleep(1)
def read_dig_in(io_port):
"""Read IO Board digital input."""
if io_port == 0 or io_port > 8:
print("CANNOT READ A PORT THAT DOES NOT EXIST: {}".format(io_port))
return False
GPIO.output(mux_channels, GPIO_mux[io_port])
return GPIO.input(inp_channel) == 0
def dig_in_loop():
"""Read all digital inputs."""
for i in range(1, 9):
print("DIGIN {} = {}".format(i, read_dig_in(i)))
def read_analog_in(io_port, verbose=False):
"""Read IO Board digital input."""
global spi_bus
if io_port < 1 or io_port > 4:
print("CANNOT READ A PORT THAT DOES NOT EXIST: {}".format(io_port))
return False
GPIO.output(mux_channels, GPIO_mux[io_port])
ok_status = False
tries = 0
while (ok_status is False) and (tries < 5):
GPIO.output(mux_channels, GPIO_mux[io_port])
x = spi.xfer2(bytearray([0, 0, 0]))
if verbose:
print((x[0], x[1], x[2]))
c_bin = format(x[2], '#010b')[2:]
if c_bin[-3:] == "101":
ok_status = True
if verbose:
print("OK: {}, Status: {}".format(ok_status, c_bin))
print(x[0] * 256 + x[1])
if ok_status:
return x[0] * 256 + x[1]
time.sleep(0.25)
tries += 1
if __name__ == '__main__':
# led_flash(10)
# relay_loop()
dig_in_loop()
for x in range(0, 10):
for i in range(1, 5):
print("Analog {}".format(i))
print(read_analog_in(i))
GPIO.cleanup()

View File

@@ -0,0 +1,94 @@
package com.henrypump.io;
import java.io.IOException;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
/**
* Created by patrickjmcd on 6/21/17.
*/
public class AnalogInPi {
public int channel;
public int rawValue;
public double lastValue;
public Instant lastStored = Instant.EPOCH;
public double rawMax, rawMin, euMax, euMin;
public List<Integer> channelMux;
private double[] history = new double[100];
AnalogInPi(int channel, double rawMin, double rawMax, double euMin, double euMax) {
this.channel = channel;
this.channelMux = MuxSetupPi.muxValues.get(channel);
this.rawMax = rawMax;
this.rawMin = rawMin;
this.euMax = euMax;
this.euMin = euMin;
}
double getHistory(int pointIndex) {
return history[pointIndex];
}
double setValue(int value) {
// System.out.println(value);
this.rawValue = value;
double pv = ((euMax - euMin)/(rawMax - rawMin)) * rawValue + (euMax - ((euMax - euMin)/(rawMax - rawMin)) * rawMax);
lastValue = pv;
lastStored = Instant.now();
System.arraycopy(history, 0, history,1, history.length - 1);
history[0] = lastValue;
// System.out.println(value + " --> " + pv);
return pv;
}
double read(MuxSetupPi mux) throws IOException {
mux.set(channelMux.get(0), channelMux.get(1), channelMux.get(2));
int rawIn = mux.readAnalog();
if (rawIn != -1){
return setValue(rawIn);
} else {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return lastValue;
}
public static void main(String[] args) {
MuxSetupPi mux = null;
Instant now = Instant.now();
try {
mux = new MuxSetupPi();
System.out.println("Testing Analog Inputs");
AnalogInPi aI1 = new AnalogInPi(1, 0, 65535, 0, 100);
AnalogInPi aI2 = new AnalogInPi(2, 0, 65535, 0, 100);
AnalogInPi aI3 = new AnalogInPi(3, 0, 65535, 0, 100);
// AnalogInPi aI4 = new AnalogInPi(4, 0, 65535, 0, 100);
for (int i = 0; i < 50; i++) {
double a1Val = aI1.read(mux);
double a2Val = aI2.read(mux);
double a3Val = aI3.read(mux);
// double a4Val = aI4.read(mux);
now = Instant.now();
System.out.println("Input " + aI1.channel + ": " + aI1.lastValue + ", age= " + Duration.between(aI1.lastStored, now).toMillis() + "ms");
System.out.println("Input " + aI2.channel + ": " + aI2.lastValue + ", age= " + Duration.between(aI2.lastStored, now).toMillis() + "ms");
System.out.println("Input " + aI3.channel + ": " + aI3.lastValue + ", age= " + Duration.between(aI3.lastStored, now).toMillis() + "ms");
// System.out.println("Input " + aI4.channel + ": " + aI4.lastValue + ", age= " + Duration.between(aI4.lastStored, now).toMillis() + "ms");
System.out.println("--");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@@ -0,0 +1,29 @@
package com.henrypump.io;
import mraa.Dir;
import mraa.Gpio;
/**
* Created by patrickjmcd on 6/19/17.
*/
public class AnalogOut {
public int channel;
Gpio triggerPin;
AnalogOut(int channel){
this.channel = channel;
triggerPin = new Gpio(6);
triggerPin.dir(Dir.DIR_OUT);
}
public int trigger(int triggerVal){
triggerPin.write(triggerVal);
return triggerVal;
}
public int write(float writeVal){
return 0;
}
}

View File

@@ -0,0 +1,60 @@
package com.henrypump.io;
import java.io.IOException;
import java.time.Instant;
/**
* Created by patrickjmcd on 6/19/17.
*/
public class AnalogOutPi {
public int channel;
public int rawValue;
public double lastValue;
public Instant lastStored = Instant.EPOCH;
public double rawMax, rawMin, euMax, euMin;
private double m, b;
AnalogOutPi(int channel, double rawMin, double rawMax, double euMin, double euMax){
this.channel = channel;
this.rawMin = rawMin;
this.rawMax = rawMax;
this.euMin = euMin;
this.euMax = euMax;
m = (rawMax - rawMin) / (euMax - euMin);
b = rawMax - m * euMax;
}
public int write(MuxSetupPi mux, double writeVal){
rawValue = (int) (writeVal * m + b);
try {
mux.writeAnalog(channel, rawValue);
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
public static void main(String[] args){
try {
MuxSetupPi mux = new MuxSetupPi();
AnalogOutPi anOut1 = new AnalogOutPi(1, 0, 65535, 0, 100);
for (int i = 0; i < 10; i++) {
anOut1.write(mux, (double) (i + 1) * 10.0);
Thread.sleep(1000);
}
} catch (IOException e){
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

View File

@@ -0,0 +1,81 @@
package com.henrypump.io;
import mraa.Dir;
import mraa.Gpio;
import mraa.Result;
import java.io.IOException;
import java.util.List;
/**
* Created by patrickjmcd on 6/14/17.
*/
public class DigitalInPi {
public int channel;
public int value;
public List<Integer> channelMux;
DigitalInPi(int channel){
this.channel = channel;
this.channelMux = MuxSetupPi.muxValues.get(channel);
}
void setValue(int value){
this.value = value;
}
public static void main(String[] args){
try {
MuxSetupPi mux = new MuxSetupPi();
System.out.println("Testing Digital Inputs");
DigitalInPi dI1 = new DigitalInPi(1);
DigitalInPi dI2 = new DigitalInPi(2);
DigitalInPi dI3 = new DigitalInPi(3);
DigitalInPi dI4 = new DigitalInPi(4);
DigitalInPi dI5 = new DigitalInPi(5);
DigitalInPi dI6 = new DigitalInPi(6);
DigitalInPi dI7 = new DigitalInPi(7);
DigitalInPi dI8 = new DigitalInPi(8);
mux.set(dI1.channelMux.get(0), dI1.channelMux.get(1), dI1.channelMux.get(2));
dI1.setValue(mux.readDigital());
System.out.println("Input " + dI1.channel + ": " + dI1.value);
mux.set(dI2.channelMux.get(0), dI2.channelMux.get(1), dI2.channelMux.get(2));
dI2.setValue(mux.readDigital());
System.out.println("Input " + dI2.channel + ": " + dI2.value);
mux.set(dI3.channelMux.get(0), dI3.channelMux.get(1), dI3.channelMux.get(2));
dI3.setValue(mux.readDigital());
System.out.println("Input " + dI3.channel + ": " + dI3.value);
mux.set(dI4.channelMux.get(0), dI4.channelMux.get(1), dI4.channelMux.get(2));
dI4.setValue(mux.readDigital());
System.out.println("Input " + dI4.channel + ": " + dI4.value);
mux.set(dI5.channelMux.get(0), dI5.channelMux.get(1), dI5.channelMux.get(2));
dI5.setValue(mux.readDigital());
System.out.println("Input " + dI5.channel + ": " + dI5.value);
mux.set(dI6.channelMux.get(0), dI6.channelMux.get(1), dI6.channelMux.get(2));
dI6.setValue(mux.readDigital());
System.out.println("Input " + dI6.channel + ": " + dI6.value);
mux.set(dI7.channelMux.get(0), dI7.channelMux.get(1), dI7.channelMux.get(2));
dI7.setValue(mux.readDigital());
System.out.println("Input " + dI7.channel + ": " + dI7.value);
mux.set(dI8.channelMux.get(0), dI8.channelMux.get(1), dI8.channelMux.get(2));
dI8.setValue(mux.readDigital());
System.out.println("Input " + dI8.channel + ": " + dI8.value);
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@@ -12,14 +12,14 @@ public class DigitalOut {
Gpio gpioPin; Gpio gpioPin;
DigitalOut(int channel){ DigitalOut(int channel){
if ((channel >=0 && channel <=5) || (channel == 8) || (channel == 9)) { // if ((channel >=0 && channel <=5) || (channel == 8) || (channel == 9)) {
this.channel = channel; this.channel = channel;
gpioPin = new Gpio(channel); gpioPin = new Gpio(channel);
gpioPin.dir(Dir.DIR_OUT); gpioPin.dir(Dir.DIR_OUT);
} else { // } else {
System.err.println("Error: This channel does not exist,."); // System.err.println("Error: This channel does not exist,.");
System.exit(Result.ERROR_INVALID_PARAMETER.swigValue()); // System.exit(Result.ERROR_INVALID_PARAMETER.swigValue());
} // }
} }
@@ -28,14 +28,14 @@ public class DigitalOut {
} }
public static void main(String[] args){ public static void main(String[] args){
DigitalOut dO0 = new DigitalOut(0); DigitalOut dO0 = new DigitalOut(21);
DigitalOut dO1 = new DigitalOut(1); DigitalOut dO1 = new DigitalOut(20);
DigitalOut dO2 = new DigitalOut(2); DigitalOut dO2 = new DigitalOut(16);
DigitalOut dO3 = new DigitalOut(3); DigitalOut dO3 = new DigitalOut(12);
DigitalOut dO4 = new DigitalOut(4); DigitalOut dO4 = new DigitalOut(25);
DigitalOut dO5 = new DigitalOut(5); DigitalOut dO5 = new DigitalOut(24);
DigitalOut redLED = new DigitalOut(8); DigitalOut redLED = new DigitalOut(23);
DigitalOut greenLED = new DigitalOut(9); DigitalOut greenLED = new DigitalOut(18);
System.out.println("Testing Digital Outputs"); System.out.println("Testing Digital Outputs");

View File

@@ -0,0 +1,142 @@
package com.henrypump.io;
import com.pi4j.io.gpio.*;
/**
* Created by patrickjmcd on 6/20/17.
*/
public class DigitalOutPi {
int channel;
final GpioController gpio = GpioFactory.getInstance();
Pin gpioPin;
GpioPinDigitalOutput pin;
String pinNumbering = "wPi";
DigitalOutPi(int channel){
if ((channel >=1 && channel <=6) || (channel == 8) || (channel == 9)) {
this.channel = channel;
switch (channel) {
case 1:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_29;
} else {
gpioPin = RaspiPin.GPIO_21;
}
break;
case 2:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_28;
} else {
gpioPin = RaspiPin.GPIO_20;
}
break;
case 3:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_27;
} else {
gpioPin = RaspiPin.GPIO_16;
}
break;
case 4:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_26;
} else {
gpioPin = RaspiPin.GPIO_12;
}
break;
case 5:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_06;
} else {
gpioPin = RaspiPin.GPIO_25;
}
break;
case 6:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_05;
} else {
gpioPin = RaspiPin.GPIO_24;
}
break;
case 8:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_04;
} else {
gpioPin = RaspiPin.GPIO_23;
}
break;
case 9:
if (pinNumbering == "wPi") {
gpioPin = RaspiPin.GPIO_01;
} else {
gpioPin = RaspiPin.GPIO_18;
}
break;
}
pin = gpio.provisionDigitalOutputPin(gpioPin, "Output" + channel, PinState.LOW);
pin.setShutdownOptions(true, PinState.LOW);
} else {
System.err.println("Error: This channel does not exist,.");
}
}
void write(int value){
if (value >= 1) {
pin.high();
} else {
pin.low();
}
}
public static void main(String[] args){
DigitalOutPi dO1 = new DigitalOutPi(1);
DigitalOutPi dO2 = new DigitalOutPi(2);
DigitalOutPi dO3 = new DigitalOutPi(3);
DigitalOutPi dO4 = new DigitalOutPi(4);
DigitalOutPi dO5 = new DigitalOutPi(5);
DigitalOutPi dO6 = new DigitalOutPi(6);
// DigitalOutPi redLED = new DigitalOut(8);
// DigitalOutPi greenLED = new DigitalOut(9);
System.out.println("Testing Digital Outputs");
try {
dO1.write(1);
Thread.sleep(500);
dO2.write(1);
Thread.sleep(500);
dO3.write(1);
Thread.sleep(500);
dO4.write(1);
Thread.sleep(500);
dO5.write(1);
Thread.sleep(500);
dO6.write(1);
Thread.sleep(500);
dO6.write(0);
Thread.sleep(500);
dO5.write(0);
Thread.sleep(500);
dO4.write(0);
Thread.sleep(500);
dO3.write(0);
Thread.sleep(500);
dO2.write(0);
Thread.sleep(500);
dO1.write(0);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

View File

@@ -47,7 +47,7 @@ public class MuxSetup {
gpioA3 = new Gpio(17); gpioA3 = new Gpio(17);
gpioA3.dir(Dir.DIR_IN); gpioA3.dir(Dir.DIR_IN);
spi = new Spi(0); spi = new Spi(5);
} }
public int set(int a0val, int a1val, int a2val){ public int set(int a0val, int a1val, int a2val){

View File

@@ -0,0 +1,142 @@
package com.henrypump.io;
import com.pi4j.io.gpio.*;
import com.pi4j.io.spi.SpiChannel;
import com.pi4j.io.spi.SpiDevice;
import com.pi4j.io.spi.SpiFactory;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
* Created by patrickjmcd on 6/21/17.
*/
public class MuxSetupPi {
final GpioController gpio = GpioFactory.getInstance();
GpioPinDigitalOutput pinMux1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_21);
GpioPinDigitalOutput pinMux2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_22);
GpioPinDigitalOutput pinMux3 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_23);
GpioPinDigitalInput pinDigitalRead = gpio.provisionDigitalInputPin(RaspiPin.GPIO_24);
GpioPinDigitalOutput pinAnOutTrigger = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "AnalogOutTrigger", PinState.HIGH);
private int mux1value = 0;
private int mux2value = 0;
private int mux3value = 0;
private SpiDevice spi;
public static List<List<Integer>> muxValues = Arrays.asList(
Arrays.asList(),
Arrays.asList(0,0,0),
Arrays.asList(1,0,0),
Arrays.asList(0,1,0),
Arrays.asList(1,1,0),
Arrays.asList(0,0,1),
Arrays.asList(1,0,1),
Arrays.asList(0,1,1),
Arrays.asList(1,1,1)
);
MuxSetupPi() throws IOException{
spi = SpiFactory.getInstance(SpiChannel.CS0, SpiDevice.DEFAULT_SPI_SPEED, SpiDevice.DEFAULT_SPI_MODE);
}
public int set(int a0val, int a1val, int a2val){
this.mux1value = a0val;
this.mux2value = a1val;
this.mux3value = a2val;
return apply();
}
public int apply(){
if (mux1value >= 1) {
pinMux1.high();
} else {
pinMux1.low();
}
if (mux2value >= 1) {
pinMux2.high();
} else {
pinMux2.low();
}
if (mux3value >= 1) {
pinMux3.high();
} else {
pinMux3.low();
}
return mux1value + mux2value * 2 + mux3value * 4;
}
public int readDigital(){
if (pinDigitalRead.isHigh()){
return 0;
} else {
return 1;
}
}
public void preAnalogWrite(){
pinAnOutTrigger.low();
}
public void postAnalogWrite(){
pinAnOutTrigger.high();
}
static String toBinary( byte b )
{
StringBuilder sb = new StringBuilder(8);
for( int i = 0; i < 8; i++ )
sb.append((b << i % 8 & 0x80) == 0 ? '0' : '1');
return sb.toString();
}
public int writeAnalog(int channel, int rawValue) throws IOException{
preAnalogWrite();
byte controlBits = (byte) 0b00010000;
if (channel == 2){
controlBits = (byte) 0b00100100;
}
byte anWrite[] = new byte[]{
controlBits,
(byte) (rawValue & 0xFF),
(byte) ((rawValue >> 8) & 0xFF)
};
byte[] result = spi.write(anWrite);
System.out.printf("writing %s, %s, %s%n", toBinary(anWrite[0]), toBinary(anWrite[1]), toBinary(anWrite[2]));
postAnalogWrite();
System.out.printf("0= %s, 1= %s, 2= %s%n", result[0] & 0xFF, result[1] & 0xFF, result[2] & 0xFF);
return 0;
}
public int readAnalog() throws IOException {
byte zeroes[] = new byte[] {
(byte) 0b00000000,
(byte) 0b00000000,
(byte) 0b00000000
};
byte[] result = spi.write(zeroes);
// System.out.println("Raw= " + (a * 256 + b));
int a = result[0] & 0xFF;
int b = result[1] & 0xFF;
int c = result[2] & 0xFF;
// System.out.println("a= " + a + ", b= " + b + ", c= " + c);
if (c == 13){
int x = a * 256;
x = x + b;
return x;
} else {
return -1;
}
}
}