Specializes for Pi

This commit is contained in:
Patrick McDonagh
2018-02-01 11:48:14 -06:00
parent 875e73d7f6
commit 37bc6054c7
16 changed files with 1188 additions and 1111 deletions

451
.idea/dbnavigator.xml generated Normal file
View File

@@ -0,0 +1,451 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DBNavigator.Project.DataEditorManager">
<record-view-column-sorting-type value="BY_INDEX" />
<value-preview-text-wrapping value="true" />
<value-preview-pinned value="false" />
</component>
<component name="DBNavigator.Project.DataExportManager">
<export-instructions>
<create-header value="true" />
<quote-values-containing-separator value="true" />
<quote-all-values value="false" />
<value-separator value="" />
<file-name value="" />
<file-location value="" />
<scope value="GLOBAL" />
<destination value="FILE" />
<format value="EXCEL" />
<charset value="UTF-8" />
</export-instructions>
</component>
<component name="DBNavigator.Project.DatabaseBrowserManager">
<autoscroll-to-editor value="false" />
<autoscroll-from-editor value="true" />
<show-object-properties value="true" />
<loaded-nodes />
</component>
<component name="DBNavigator.Project.EditorStateManager">
<last-used-providers />
</component>
<component name="DBNavigator.Project.MethodExecutionManager">
<method-browser />
<execution-history>
<group-entries value="true" />
<execution-inputs />
</execution-history>
<argument-values-cache />
</component>
<component name="DBNavigator.Project.ObjectDependencyManager">
<last-used-dependency-type value="INCOMING" />
</component>
<component name="DBNavigator.Project.ObjectQuickFilterManager">
<last-used-operator value="EQUAL" />
<filters />
</component>
<component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
<recently-used-interfaces />
</component>
<component name="DBNavigator.Project.Settings">
<connections />
<browser-settings>
<general>
<display-mode value="TABBED" />
<navigation-history-size value="100" />
<show-object-details value="false" />
</general>
<filters>
<object-type-filter>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="true" />
<object-type name="ROLE" enabled="true" />
<object-type name="PRIVILEGE" enabled="true" />
<object-type name="CHARSET" enabled="true" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="MATERIALIZED_VIEW" enabled="true" />
<object-type name="NESTED_TABLE" enabled="true" />
<object-type name="COLUMN" enabled="true" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET_TRIGGER" enabled="true" />
<object-type name="DATABASE_TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="true" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
<object-type name="ARGUMENT" enabled="true" />
<object-type name="DIMENSION" enabled="true" />
<object-type name="CLUSTER" enabled="true" />
<object-type name="DBLINK" enabled="true" />
</object-type-filter>
</filters>
<sorting>
<object-type name="COLUMN" sorting-type="NAME" />
<object-type name="FUNCTION" sorting-type="NAME" />
<object-type name="PROCEDURE" sorting-type="NAME" />
<object-type name="ARGUMENT" sorting-type="POSITION" />
</sorting>
<default-editors>
<object-type name="VIEW" editor-type="SELECTION" />
<object-type name="PACKAGE" editor-type="SELECTION" />
<object-type name="TYPE" editor-type="SELECTION" />
</default-editors>
</browser-settings>
<navigation-settings>
<lookup-filters>
<lookup-objects>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="false" />
<object-type name="ROLE" enabled="false" />
<object-type name="PRIVILEGE" enabled="false" />
<object-type name="CHARSET" enabled="false" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="MATERIALIZED VIEW" enabled="true" />
<object-type name="NESTED TABLE" enabled="false" />
<object-type name="COLUMN" enabled="false" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET TRIGGER" enabled="true" />
<object-type name="DATABASE TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="false" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="TYPE ATTRIBUTE" enabled="false" />
<object-type name="ARGUMENT" enabled="false" />
<object-type name="DIMENSION" enabled="false" />
<object-type name="CLUSTER" enabled="false" />
<object-type name="DBLINK" enabled="true" />
</lookup-objects>
<force-database-load value="false" />
<prompt-connection-selection value="true" />
<prompt-schema-selection value="true" />
</lookup-filters>
</navigation-settings>
<dataset-grid-settings>
<general>
<enable-zooming value="true" />
</general>
<sorting>
<nulls-first value="true" />
<max-sorting-columns value="4" />
</sorting>
<tracking-columns>
<columnNames value="" />
<visible value="true" />
<editable value="false" />
</tracking-columns>
</dataset-grid-settings>
<dataset-editor-settings>
<text-editor-popup>
<active value="false" />
<active-if-empty value="false" />
<data-length-threshold value="100" />
<popup-delay value="1000" />
</text-editor-popup>
<values-list-popup>
<show-popup-button value="true" />
<element-count-threshold value="1000" />
<data-length-threshold value="250" />
</values-list-popup>
<general>
<fetch-block-size value="100" />
<fetch-timeout value="30" />
<trim-whitespaces value="true" />
<convert-empty-strings-to-null value="true" />
<select-content-on-cell-edit value="true" />
<large-value-preview-active value="true" />
</general>
<filters>
<prompt-filter-dialog value="true" />
<default-filter-type value="BASIC" />
</filters>
<qualified-text-editor text-length-threshold="300">
<content-types>
<content-type name="Text" enabled="true" />
<content-type name="Properties" enabled="true" />
<content-type name="XML" enabled="true" />
<content-type name="DTD" enabled="true" />
<content-type name="HTML" enabled="true" />
<content-type name="XHTML" enabled="true" />
<content-type name="Java" enabled="true" />
<content-type name="SQL" enabled="true" />
<content-type name="PL/SQL" enabled="true" />
<content-type name="Groovy" enabled="true" />
<content-type name="AIDL" enabled="true" />
<content-type name="YAML" enabled="true" />
<content-type name="Bash" enabled="true" />
<content-type name="Manifest" enabled="true" />
</content-types>
</qualified-text-editor>
<record-navigation>
<navigation-target value="VIEWER" />
</record-navigation>
</dataset-editor-settings>
<code-editor-settings>
<general>
<show-object-navigation-gutter value="false" />
<show-spec-declaration-navigation-gutter value="true" />
</general>
<confirmations>
<save-changes value="false" />
<revert-changes value="true" />
</confirmations>
</code-editor-settings>
<code-completion-settings>
<filters>
<basic-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="false" />
<filter-element type="OBJECT" id="view" selected="false" />
<filter-element type="OBJECT" id="materialized view" selected="false" />
<filter-element type="OBJECT" id="index" selected="false" />
<filter-element type="OBJECT" id="constraint" selected="false" />
<filter-element type="OBJECT" id="trigger" selected="false" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="false" />
<filter-element type="OBJECT" id="procedure" selected="false" />
<filter-element type="OBJECT" id="function" selected="false" />
<filter-element type="OBJECT" id="package" selected="false" />
<filter-element type="OBJECT" id="type" selected="false" />
<filter-element type="OBJECT" id="dimension" selected="false" />
<filter-element type="OBJECT" id="cluster" selected="false" />
<filter-element type="OBJECT" id="dblink" selected="false" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</basic-filter>
<extended-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</extended-filter>
</filters>
<sorting enabled="true">
<sorting-element type="RESERVED_WORD" id="keyword" />
<sorting-element type="RESERVED_WORD" id="datatype" />
<sorting-element type="OBJECT" id="column" />
<sorting-element type="OBJECT" id="table" />
<sorting-element type="OBJECT" id="view" />
<sorting-element type="OBJECT" id="materialized view" />
<sorting-element type="OBJECT" id="index" />
<sorting-element type="OBJECT" id="constraint" />
<sorting-element type="OBJECT" id="trigger" />
<sorting-element type="OBJECT" id="synonym" />
<sorting-element type="OBJECT" id="sequence" />
<sorting-element type="OBJECT" id="procedure" />
<sorting-element type="OBJECT" id="function" />
<sorting-element type="OBJECT" id="package" />
<sorting-element type="OBJECT" id="type" />
<sorting-element type="OBJECT" id="dimension" />
<sorting-element type="OBJECT" id="cluster" />
<sorting-element type="OBJECT" id="dblink" />
<sorting-element type="OBJECT" id="schema" />
<sorting-element type="OBJECT" id="role" />
<sorting-element type="OBJECT" id="user" />
<sorting-element type="RESERVED_WORD" id="function" />
<sorting-element type="RESERVED_WORD" id="parameter" />
</sorting>
<format>
<enforce-code-style-case value="true" />
</format>
</code-completion-settings>
<execution-engine-settings>
<statement-execution>
<fetch-block-size value="100" />
<execution-timeout value="20" />
<debug-execution-timeout value="600" />
<focus-result value="false" />
<prompt-execution value="false" />
</statement-execution>
<script-execution>
<command-line-interfaces />
<execution-timeout value="300" />
</script-execution>
<method-execution>
<execution-timeout value="30" />
<debug-execution-timeout value="600" />
<parameter-history-size value="10" />
</method-execution>
</execution-engine-settings>
<operation-settings>
<transactions>
<uncommitted-changes>
<on-project-close value="ASK" />
<on-disconnect value="ASK" />
<on-autocommit-toggle value="ASK" />
</uncommitted-changes>
<multiple-uncommitted-changes>
<on-commit value="ASK" />
<on-rollback value="ASK" />
</multiple-uncommitted-changes>
</transactions>
<session-browser>
<disconnect-session value="ASK" />
<kill-session value="ASK" />
<reload-on-filter-change value="false" />
</session-browser>
<compiler>
<compile-type value="KEEP" />
<compile-dependencies value="ASK" />
<always-show-controls value="false" />
</compiler>
<debugger>
<debugger-type value="ASK" />
<use-generic-runners value="true" />
</debugger>
</operation-settings>
<ddl-file-settings>
<extensions>
<mapping file-type-id="VIEW" extensions="vw" />
<mapping file-type-id="TRIGGER" extensions="trg" />
<mapping file-type-id="PROCEDURE" extensions="prc" />
<mapping file-type-id="FUNCTION" extensions="fnc" />
<mapping file-type-id="PACKAGE" extensions="pkg" />
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
<mapping file-type-id="TYPE" extensions="tpe" />
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
</extensions>
<general>
<lookup-ddl-files value="true" />
<create-ddl-files value="false" />
<synchronize-ddl-files value="true" />
<use-qualified-names value="false" />
<make-scripts-rerunnable value="true" />
</general>
</ddl-file-settings>
<general-settings>
<regional-settings>
<date-format value="MEDIUM" />
<number-format value="UNGROUPED" />
<locale value="SYSTEM_DEFAULT" />
<use-custom-formats value="false" />
</regional-settings>
<environment>
<environment-types>
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
</environment-types>
<visibility-settings>
<connection-tabs value="true" />
<dialog-headers value="true" />
<object-editor-tabs value="true" />
<script-editor-tabs value="false" />
<execution-result-tabs value="true" />
</visibility-settings>
</environment>
</general-settings>
</component>
<component name="DBNavigator.Project.StatementExecutionManager">
<execution-variables />
</component>
</project>

View File

@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="IOBoard" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<module external.linked.project.id="IOBoard" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="com.henrypump" external.system.module.version="0.1" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$/../..">
<excludeFolder url="file://$MODULE_DIR$/../../.gradle" />
<excludeFolder url="file://$MODULE_DIR$/../../build" />
<excludeFolder url="file://$MODULE_DIR$/../../out" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="IOBoard:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.type="sourceSet" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<module external.linked.project.id="IOBoard:main" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="com.henrypump" external.system.module.type="sourceSet" external.system.module.version="0.1" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/../../build/classes/main" />
<output url="file://$MODULE_DIR$/../../out/production/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$/../../src/main">
<sourceFolder url="file://$MODULE_DIR$/../../src/main/java" isTestSource="false" />

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="IOBoard:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.type="sourceSet" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<module external.linked.project.id="IOBoard:test" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="com.henrypump" external.system.module.type="sourceSet" external.system.module.version="0.1" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output-test url="file://$MODULE_DIR$/../../build/classes/test" />
<output-test url="file://$MODULE_DIR$/../../out/test/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$/../../src/test">
<sourceFolder url="file://$MODULE_DIR$/../../src/test/java" isTestSource="true" />
@@ -13,8 +13,8 @@
<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: com.pi4j:pi4j-core:1.1" 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: junit:junit:4.12" level="project" />
<orderEntry type="library" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
</component>
<component name="TestModuleProperties" production-module="IOBoard_main" />

992
.idea/workspace.xml generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,9 @@
// Apply the java-library plugin to add support for Java Library
apply plugin: 'java-library'
group = "com.henrypump"
version = '0.1'
// In this section you declare where to find the dependencies of your project
repositories {
// Use jcenter for resolving your dependencies.

View File

@@ -1,5 +1,8 @@
package com.henrypump.io;
import java.time.Duration;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
/**
@@ -7,102 +10,148 @@ import java.util.List;
*/
public class AnalogIn {
public int channel;
public int rawValue;
public double lastValue;
public double rawMax, rawMin, euMax, euMin;
public List<Integer> channelMux;
private int channel;
private int rawValue;
private double lastValue;
private Instant lastStored = Instant.EPOCH;
private double rawMax, rawMin, euMax, euMin;
private List<Integer> channelMux;
private double m, b;
private double[] history = new double[100];
private long badReads = 0;
AnalogIn(int channel, double rawMin, double rawMax, double euMin, double euMax) {
public AnalogIn(int channel, double rawMin, double rawMax, double euMin, double euMax) {
this.channel = channel;
this.channelMux = MuxSetup.muxValues.get(channel);
if (channel != 99) {
this.channelMux = MuxSetup.muxValues.get(channel);
}
this.rawMax = rawMax;
this.rawMin = rawMin;
this.euMax = euMax;
this.euMin = euMin;
m = (euMax - euMin) / (rawMax - rawMin);
b = euMax - m * (rawMax);
}
double getHistory(int pointIndex) {
public int getChannel() {
return channel;
}
public double getRawMax() {
return rawMax;
}
public double getRawMin() {
return rawMin;
}
public double getEuMax() {
return euMax;
}
public double getEuMin() {
return euMin;
}
public long getBadReads() {
return badReads;
}
public int getRawValue() {
return rawValue;
}
public double getLastValue() {
return lastValue;
}
public Instant getLastStored() {
return lastStored;
}
public 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);
double pv = m * rawValue + b;
lastValue = pv;
lastStored = Instant.now();
System.arraycopy(history, 0, history,1, history.length - 1);
history[0] = lastValue;
// System.out.println(value + " --> " + pv);
return pv;
}
public double read(MuxSetup mux){
mux.set(channelMux.get(0), channelMux.get(1), channelMux.get(2));
int rawIn = mux.readAnalog();
if (rawIn != -1){
badReads = 0;
return setValue(rawIn);
} else {
badReads++;
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return lastValue;
}
public double readSim(double simRaw){
double pv = ((euMax - euMin)/(rawMax - rawMin)) * simRaw + (euMax - ((euMax - euMin)/(rawMax - rawMin)) * rawMax);
lastValue = pv;
System.arraycopy(history, 0, history,1, history.length - 1);
history[0] = lastValue;
return pv;
}
public HashMap<String, Long> getStatus(){
HashMap<String, Long> status;
status = new HashMap<String, Long>();
status.put("badReads", badReads);
status.put("measurementAge", Duration.between(lastStored, Instant.now()).toMillis());
return status;
}
public static void main(String[] args) {
MuxSetup mux = new MuxSetup();
MuxSetup mux = null;
Instant now = Instant.now();
mux = new MuxSetup();
HashMap<String, Long> aI1status;
// HashMap<String, Long> aI2status;
System.out.println("Testing Analog Inputs");
int rawIn;
AnalogIn aI1 = new AnalogIn(1, 32560, 65535, 0, 100);
// AnalogIn aI2 = new AnalogIn(2, 0, 65535, 0, 50000);
// AnalogIn aI3 = new AnalogIn(3, 0, 65535, 0, 100);
// AnalogIn aI4 = new AnalogIn(4, 0, 65535, 0, 100);
AnalogIn aI1 = new AnalogIn(1, 0, 65535, 0, 10);
AnalogIn aI2 = new AnalogIn(2, 0, 65535, 0, 10);
AnalogIn aI3 = new AnalogIn(3, 0, 65535, 0, 10);
AnalogIn aI4 = new AnalogIn(4, 0, 65535, 0, 10);
for (int i = 0; i < 500; i++) {
for (int i = 0; i < 100; i++) {
mux.set(aI1.channelMux.get(0), aI1.channelMux.get(1), aI1.channelMux.get(2));
rawIn = mux.readAnalog();
if (rawIn != -1) {
aI1.setValue(mux.readAnalog());
System.out.println("Input " + aI1.channel + ": " + aI1.lastValue);
} else {
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mux.set(aI2.channelMux.get(0), aI2.channelMux.get(1), aI2.channelMux.get(2));
rawIn = mux.readAnalog();
if (rawIn != -1) {
aI2.setValue(mux.readAnalog());
System.out.println("Input " + aI2.channel + ": " + aI2.lastValue);
} else {
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mux.set(aI3.channelMux.get(0), aI3.channelMux.get(1), aI3.channelMux.get(2));
rawIn = mux.readAnalog();
if (rawIn != -1) {
aI3.setValue(mux.readAnalog());
System.out.println("Input " + aI3.channel + ": " + aI3.lastValue);
} else {
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mux.set(aI4.channelMux.get(0), aI4.channelMux.get(1), aI4.channelMux.get(2));
rawIn = mux.readAnalog();
if (rawIn != -1) {
aI4.setValue(mux.readAnalog());
System.out.println("Input " + aI4.channel + ": " + aI4.lastValue);
} else {
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
double a1Val = aI1.read(mux);
// double a2Val = aI2.read(mux);
aI1status = aI1.getStatus();
// aI2status = aI2.getStatus();
System.out.println("Input " + aI1.channel + ": " + aI1.lastValue + ", age= " + aI1status.get("measurementAge") + "ms" + ", badReads= " + aI1status.get("badReads"));
// System.out.println("Input " + aI2.channel + ": " + aI2.lastValue + ", age= " + aI2status.get("measurementAge") + "ms" + ", badReads= " + aI2status.get("badReads"));
// 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("--");
// System.out.printf("%s,%s%n", aI1.lastValue, aI2.lastValue);
}
// for (int j = 0; j < 100; j++){
// System.out.println("History[" + j + "]= " + aI3.getHistory(j));
// }
}
}

View File

@@ -1,94 +0,0 @@
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

@@ -3,27 +3,58 @@ package com.henrypump.io;
import mraa.Dir;
import mraa.Gpio;
import java.io.IOException;
import java.time.Instant;
/**
* Created by patrickjmcd on 6/19/17.
*/
public class AnalogOut {
public int channel;
Gpio triggerPin;
public int rawValue;
public double lastValue;
public Instant lastStored = Instant.EPOCH;
public double rawMax, rawMin, euMax, euMin;
private double m, b;
AnalogOut(int channel){
public AnalogOut(int channel, double rawMin, double rawMax, double euMin, double euMax){
this.channel = channel;
triggerPin = new Gpio(6);
triggerPin.dir(Dir.DIR_OUT);
this.rawMin = rawMin;
this.rawMax = rawMax;
this.euMin = euMin;
this.euMax = euMax;
m = (rawMax - rawMin) / (euMax - euMin);
b = rawMax - m * euMax;
}
public int trigger(int triggerVal){
triggerPin.write(triggerVal);
return triggerVal;
}
public int write(float writeVal){
public int write(MuxSetup 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 {
MuxSetup mux = new MuxSetup();
AnalogOut anOut1 = new AnalogOut(2, 0, 65535, 0, 100);
for (int i = 0; i < 10; i++) {
anOut1.write(mux, (double) (i + 1) * 10.0);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

View File

@@ -1,60 +0,0 @@
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

@@ -14,13 +14,15 @@ public class DigitalIn {
public int channel;
public int value;
public List<Integer> channelMux;
DigitalIn(int channel){
public DigitalIn(int channel){
this.channel = channel;
this.channelMux = MuxSetup.muxValues.get(channel);
}
void setValue(int value){
this.value = value;
public int read(MuxSetup mux){
mux.set(channelMux.get(0), channelMux.get(1), channelMux.get(2));
value = mux.readDigital();
return value;
}
public static void main(String[] args){
@@ -37,36 +39,28 @@ public class DigitalIn {
DigitalIn dI7 = new DigitalIn(7);
DigitalIn dI8 = new DigitalIn(8);
mux.set(dI1.channelMux.get(0), dI1.channelMux.get(1), dI1.channelMux.get(2));
dI1.setValue(mux.readDigital());
dI1.read(mux);
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());
dI2.read(mux);
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());
dI3.read(mux);
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());
dI4.read(mux);
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());
dI5.read(mux);
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());
dI6.read(mux);
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());
dI7.read(mux);
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());
dI8.read(mux);
System.out.println("Input " + dI8.channel + ": " + dI8.value);

View File

@@ -1,81 +0,0 @@
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

@@ -11,7 +11,7 @@ public class DigitalOut {
int channel;
Gpio gpioPin;
DigitalOut(int channel){
public DigitalOut(int channel){
// if ((channel >=0 && channel <=5) || (channel == 8) || (channel == 9)) {
this.channel = channel;
gpioPin = new Gpio(channel);
@@ -23,7 +23,7 @@ public class DigitalOut {
}
void write(int value){
public void write(int value){
gpioPin.write(value);
}

View File

@@ -1,142 +0,0 @@
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

@@ -4,6 +4,7 @@ import mraa.Dir;
import mraa.Gpio;
import mraa.Spi;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@@ -20,6 +21,7 @@ public class MuxSetup {
private Gpio gpioA1;
private Gpio gpioA2;
private Gpio gpioA3;
private Gpio gpioAnOutTrigger;
private Spi spi;
public static List<List<Integer>> muxValues = Arrays.asList(
@@ -34,7 +36,7 @@ public class MuxSetup {
Arrays.asList(1,1,1)
);
MuxSetup(){
public MuxSetup(){
gpioA0 = new Gpio(14);
gpioA0.dir(Dir.DIR_OUT);
@@ -47,6 +49,10 @@ public class MuxSetup {
gpioA3 = new Gpio(17);
gpioA3.dir(Dir.DIR_IN);
gpioAnOutTrigger = new Gpio(6);
gpioAnOutTrigger.dir(Dir.DIR_OUT);
gpioAnOutTrigger.write(1);
spi = new Spi(5);
}
@@ -57,7 +63,7 @@ public class MuxSetup {
return apply();
}
public int apply(){
int apply(){
gpioA0.write(A0val);
gpioA1.write(A1val);
gpioA2.write(A2val);
@@ -89,4 +95,39 @@ public class MuxSetup {
return -1;
}
};
void preAnalogWrite(){
gpioAnOutTrigger.write(1);
}
void postAnalogWrite(){
gpioAnOutTrigger.write(0);
}
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;
}
}

View File

@@ -1,142 +0,0 @@
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;
}
}
}