16 changed files with 879 additions and 0 deletions
@ -0,0 +1,151 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage"> |
||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings"> |
||||
|
<cconfiguration id="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147"> |
||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147" moduleId="org.eclipse.cdt.core.settings" name="Sming"> |
||||
|
<externalSettings/> |
||||
|
<extensions> |
||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> |
||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> |
||||
|
</extensions> |
||||
|
</storageModule> |
||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
||||
|
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147" name="Sming" parent="org.eclipse.cdt.build.core.emptycfg"> |
||||
|
<folderInfo id="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147.86962463" name="/" resourcePath=""> |
||||
|
<toolChain id="cdt.managedbuild.toolchain.gnu.cross.base.1164554300" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.base"> |
||||
|
<option id="cdt.managedbuild.option.gnu.cross.prefix.521205673" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/> |
||||
|
<option id="cdt.managedbuild.option.gnu.cross.path.393887888" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/> |
||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.712123812" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> |
||||
|
<builder id="cdt.managedbuild.builder.gnu.cross.2110485170" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/> |
||||
|
<tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.1168221903" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> |
||||
|
<option id="gnu.c.compiler.option.include.paths.357494572" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}""/> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}/system/include""/> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}/Libraries""/> |
||||
|
<listOptionValue builtIn="false" value=""${ESP_HOME}/sdk/include""/> |
||||
|
</option> |
||||
|
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.313321806" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> |
||||
|
</tool> |
||||
|
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1999763015" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> |
||||
|
<option id="gnu.cpp.compiler.option.include.paths.611746109" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}""/> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}/system/include""/> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}/Libraries""/> |
||||
|
<listOptionValue builtIn="false" value=""${ESP_HOME}/sdk/include""/> |
||||
|
</option> |
||||
|
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1330530366" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> |
||||
|
</tool> |
||||
|
<tool id="cdt.managedbuild.tool.gnu.cross.c.linker.65193859" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> |
||||
|
<tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1795850540" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> |
||||
|
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.364843833" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> |
||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> |
||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/> |
||||
|
</inputType> |
||||
|
</tool> |
||||
|
<tool id="cdt.managedbuild.tool.gnu.cross.archiver.525412186" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> |
||||
|
<tool id="cdt.managedbuild.tool.gnu.cross.assembler.587940548" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> |
||||
|
<option id="gnu.both.asm.option.include.paths.1067006329" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath"> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}""/> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}/system/include""/> |
||||
|
<listOptionValue builtIn="false" value=""${SMING_HOME}/Libraries""/> |
||||
|
<listOptionValue builtIn="false" value=""${ESP_HOME}/sdk/include""/> |
||||
|
</option> |
||||
|
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.651581712" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> |
||||
|
</tool> |
||||
|
</toolChain> |
||||
|
</folderInfo> |
||||
|
</configuration> |
||||
|
</storageModule> |
||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> |
||||
|
</cconfiguration> |
||||
|
</storageModule> |
||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> |
||||
|
<project id="Basic_Blink.null.1347473968" name="Basic_Blink"/> |
||||
|
</storageModule> |
||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> |
||||
|
<storageModule moduleId="refreshScope" versionNumber="2"> |
||||
|
<configuration configurationName="Sming"> |
||||
|
<resource resourceType="PROJECT" workspacePath="/Basic_Blink"/> |
||||
|
</configuration> |
||||
|
</storageModule> |
||||
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"> |
||||
|
<buildTargets> |
||||
|
<target name="all" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>all</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
<target name="clean" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>clean</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
<target name="flash" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>flash</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
<target name="flashonefile" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>flashonefile</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
<target name="flashinit" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>flashinit</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
<target name="flashboot" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>flashboot</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
<target name="rebuild" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> |
||||
|
<buildCommand>make</buildCommand> |
||||
|
<buildArguments>-f ${ProjDirPath}/Makefile</buildArguments> |
||||
|
<buildTarget>rebuild</buildTarget> |
||||
|
<stopOnError>true</stopOnError> |
||||
|
<useDefaultCommand>true</useDefaultCommand> |
||||
|
<runAllBuilders>true</runAllBuilders> |
||||
|
</target> |
||||
|
</buildTargets> |
||||
|
</storageModule> |
||||
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/> |
||||
|
<storageModule moduleId="scannerConfiguration"> |
||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
|
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147;cdt.managedbuild.toolchain.gnu.mingw.base.1135534147.86962463;cdt.managedbuild.tool.gnu.c.compiler.mingw.base.2032390008;cdt.managedbuild.tool.gnu.c.compiler.input.1700912488"> |
||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
|
</scannerConfigBuildInfo> |
||||
|
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147;cdt.managedbuild.toolchain.gnu.mingw.base.1135534147.86962463;cdt.managedbuild.tool.gnu.cross.c.compiler.1168221903;cdt.managedbuild.tool.gnu.c.compiler.input.313321806"> |
||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
|
</scannerConfigBuildInfo> |
||||
|
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147;cdt.managedbuild.toolchain.gnu.mingw.base.1135534147.86962463;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1999763015;cdt.managedbuild.tool.gnu.cpp.compiler.input.1330530366"> |
||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
|
</scannerConfigBuildInfo> |
||||
|
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147;cdt.managedbuild.toolchain.gnu.mingw.base.1135534147.86962463;cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.454898447;cdt.managedbuild.tool.gnu.cpp.compiler.input.501261625"> |
||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> |
||||
|
</scannerConfigBuildInfo> |
||||
|
</storageModule> |
||||
|
</cproject> |
@ -0,0 +1,28 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>Basic_Blink</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
<project>SmingFramework</project> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> |
||||
|
<triggers>clean,full,incremental,</triggers> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name> |
||||
|
<triggers>full,incremental,</triggers> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.cdt.core.cnature</nature> |
||||
|
<nature>org.eclipse.cdt.core.ccnature</nature> |
||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> |
||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> |
||||
|
</natures> |
||||
|
</projectDescription> |
@ -0,0 +1,15 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
|
<project> |
||||
|
<configuration id="cdt.managedbuild.toolchain.gnu.mingw.base.1135534147" name="Sming"> |
||||
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> |
||||
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> |
||||
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> |
||||
|
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/> |
||||
|
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1336254526216957438" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> |
||||
|
<language-scope id="org.eclipse.cdt.core.gcc"/> |
||||
|
<language-scope id="org.eclipse.cdt.core.g++"/> |
||||
|
</provider> |
||||
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> |
||||
|
</extension> |
||||
|
</configuration> |
||||
|
</project> |
@ -0,0 +1,24 @@ |
|||||
|
#####################################################################
|
||||
|
#### Please don't change this file. Use Makefile-user.mk instead ####
|
||||
|
#####################################################################
|
||||
|
# Including user Makefile.
|
||||
|
# Should be used to set project-specific parameters
|
||||
|
include ./Makefile-user.mk |
||||
|
|
||||
|
# Important parameters check.
|
||||
|
# We need to make sure SMING_HOME and ESP_HOME variables are set.
|
||||
|
# You can use Makefile-user.mk in each project or use enviromental variables to set it globally.
|
||||
|
|
||||
|
ifndef SMING_HOME |
||||
|
$(error SMING_HOME is not set. Please configure it in Makefile-user.mk) |
||||
|
endif |
||||
|
ifndef ESP_HOME |
||||
|
$(error ESP_HOME is not set. Please configure it in Makefile-user.mk) |
||||
|
endif |
||||
|
|
||||
|
# Include main Sming Makefile
|
||||
|
ifeq ($(RBOOT_ENABLED), 1) |
||||
|
include $(SMING_HOME)/Makefile-rboot.mk |
||||
|
else |
||||
|
include $(SMING_HOME)/Makefile-project.mk |
||||
|
endif |
@ -0,0 +1,39 @@ |
|||||
|
## Local build configuration
|
||||
|
## Parameters configured here will override default and ENV values.
|
||||
|
## Uncomment and change examples:
|
||||
|
|
||||
|
## Add your source directories here separated by space
|
||||
|
# MODULES = app
|
||||
|
# EXTRA_INCDIR = include
|
||||
|
|
||||
|
## ESP_HOME sets the path where ESP tools and SDK are located.
|
||||
|
## Windows:
|
||||
|
# ESP_HOME = c:/Espressif
|
||||
|
|
||||
|
## MacOS / Linux:
|
||||
|
# ESP_HOME = /opt/esp-open-sdk
|
||||
|
|
||||
|
## SMING_HOME sets the path where Sming framework is located.
|
||||
|
## Windows:
|
||||
|
# SMING_HOME = c:/tools/sming/Sming
|
||||
|
|
||||
|
## MacOS / Linux
|
||||
|
# SMING_HOME = /opt/sming/Sming
|
||||
|
|
||||
|
## COM port parameter is reqruied to flash firmware correctly.
|
||||
|
## Windows:
|
||||
|
COM_PORT = COM13 |
||||
|
|
||||
|
## MacOS / Linux:
|
||||
|
# COM_PORT = /dev/tty.usbserial
|
||||
|
|
||||
|
## Com port speed
|
||||
|
COM_SPEED = 460800 |
||||
|
|
||||
|
## Configure flash parameters (for ESP12-E and other new boards):
|
||||
|
# SPI_MODE = dio
|
||||
|
|
||||
|
## SPIFFS options
|
||||
|
DISABLE_SPIFFS = 1 |
||||
|
# SPIFF_FILES = files
|
||||
|
|
@ -0,0 +1,27 @@ |
|||||
|
/*
|
||||
|
* adc.h |
||||
|
* |
||||
|
* Created on: Jul 20, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_ADC_H_ |
||||
|
#define APP_ADC_H_ |
||||
|
|
||||
|
#include "sensor.h" |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
template<typename Sample, typename Voltage> |
||||
|
class cADC: public cSensor<Sample> { |
||||
|
public: |
||||
|
cADC() { |
||||
|
|
||||
|
} |
||||
|
virtual Voltage ConvertSample(Sample & sample) = 0; |
||||
|
virtual ~cADC() { |
||||
|
|
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
#endif /* APP_ADC_H_ */ |
@ -0,0 +1,167 @@ |
|||||
|
/*
|
||||
|
* ADS101x.cpp |
||||
|
* |
||||
|
* Created on: Jul 20, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#include "ads101x.h" |
||||
|
#include <SmingCore/Wire.h> |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
namespace ads { |
||||
|
|
||||
|
static const uint16_t OS_POS = 15; |
||||
|
static const uint16_t OS_MASK = 1 << OS_POS; |
||||
|
static const uint16_t MUX_POS = 12; |
||||
|
static const uint16_t MUX_MASK = 7 << MUX_POS; |
||||
|
static const uint16_t PGA_POS = 9; |
||||
|
static const uint16_t PGA_MASK = 7 << PGA_POS; |
||||
|
static const uint16_t MODE_POS = 8; |
||||
|
static const uint16_t MODE_MASK = 1 << MODE_POS; |
||||
|
static const uint16_t DR_POS = 5; |
||||
|
static const uint16_t DR_MASK = 7 << DR_POS; |
||||
|
|
||||
|
#define OS_BIT(val) ((val << OS_POS) & OS_MASK) |
||||
|
#define MUX_BIT(val) ((val << MUX_POS) & MUX_MASK) |
||||
|
#define PGA_BIT(val) ((val << PGA_POS) & PGA_MASK) |
||||
|
#define MODE_BIT(val) ((val << MODE_POS) & MODE_MASK) |
||||
|
#define DR_BIT(val) ((val << DR_POS) & DR_MASK) |
||||
|
|
||||
|
static const uint8_t REGISTER_CONVERSION = 0; |
||||
|
static const uint8_t REGISTER_CONFIG = 1; |
||||
|
static const uint8_t REGISTER_LOW_TRESHOLD = 2; |
||||
|
static const uint8_t REGISTER_HIGH_TRESHOLD = 2; |
||||
|
|
||||
|
cADS101x::cADS101x(uint8_t i_address) : |
||||
|
m_address(i_address), m_readyPin(0) { |
||||
|
SetDefaults(); |
||||
|
} |
||||
|
cADS101x::cADS101x(uint8_t i_readyPin, uint8_t i_address) : |
||||
|
m_address(i_address), m_readyPin(i_readyPin) { |
||||
|
SetDefaults(); |
||||
|
} |
||||
|
|
||||
|
void cADS101x::SetOneShot(bool i_oneShot) { |
||||
|
m_oneShot = i_oneShot; |
||||
|
WriteSettings(CreateSettings(0)); |
||||
|
} |
||||
|
|
||||
|
void cADS101x::SetGain(enum eGainAmplifier i_gain) { |
||||
|
m_gain = i_gain; |
||||
|
WriteSettings(CreateSettings(0)); |
||||
|
} |
||||
|
|
||||
|
void cADS101x::SetMux(enum eInputMux i_mux) { |
||||
|
m_mux = i_mux; |
||||
|
WriteSettings(CreateSettings(0)); |
||||
|
} |
||||
|
|
||||
|
void cADS101x::SetSampleSpeed(enum eSampleSpeed i_sampleSpeed) { |
||||
|
m_sampleSpeed = i_sampleSpeed; |
||||
|
WriteSettings(CreateSettings(0)); |
||||
|
} |
||||
|
|
||||
|
void cADS101x::WaitSample(void) { |
||||
|
OneShot(); |
||||
|
uint16 readSettings = 0; |
||||
|
do { |
||||
|
readSettings = GetSettings(); |
||||
|
} while (readSettings & OS_MASK != 1); |
||||
|
} |
||||
|
|
||||
|
bool cADS101x::IsReady(void) { |
||||
|
return (GetSettings() & OS_MASK); |
||||
|
} |
||||
|
|
||||
|
uint16_t cADS101x::CreateSettings(uint8_t start) { |
||||
|
return OS_BIT(start) | MUX_BIT(m_mux) | PGA_BIT(m_gain) |
||||
|
| MODE_BIT(m_oneShot) | DR_BIT(m_sampleSpeed); |
||||
|
} |
||||
|
|
||||
|
void cADS101x::WriteSettings(uint16_t i_settings) { |
||||
|
Wire.beginTransmission(m_address); |
||||
|
Wire.write(REGISTER_CONFIG); |
||||
|
Wire.write((uint8_t) (i_settings >> 8)); |
||||
|
Wire.write((uint8_t) (i_settings & 0xFF)); |
||||
|
Wire.endTransmission(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
void cADS101x::OneShot(void) { |
||||
|
if (m_oneShot) { |
||||
|
uint16_t settings = CreateSettings(1); |
||||
|
WriteSettings(settings); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
uint16_t cADS101x::GetSettings(void) { |
||||
|
uint16_t settings; |
||||
|
Wire.beginTransmission(m_address); |
||||
|
Wire.write(REGISTER_CONFIG); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.beginTransmission(m_address); |
||||
|
Wire.requestFrom((int) m_address, 2); //16 bits
|
||||
|
settings = Wire.read() << 8; |
||||
|
settings |= Wire.read(); |
||||
|
return settings; |
||||
|
} |
||||
|
ads_voltage_t cADS101x::ConvertSample(ads_sample_t & sample) { |
||||
|
//Raw sample is in (parts of) millivolts, go to micro to remove fractions
|
||||
|
ads_voltage_t returnType = (sample.rawSample >> 4) * 1000; //Multiply for extra precision
|
||||
|
switch (sample.gain) { |
||||
|
case eGainAmplifier::FSR_0_256: |
||||
|
//one lsb is 0.256 mv = 256 uv
|
||||
|
returnType *= 256; |
||||
|
break; |
||||
|
case eGainAmplifier::FSR_0_512: |
||||
|
//one lsb is 0.512 mv = 512 uv
|
||||
|
returnType *= 512; |
||||
|
break; |
||||
|
case eGainAmplifier::FSR_1_024: |
||||
|
//one lsb is 1.024 mv = 1024 uv
|
||||
|
returnType *= 1024; |
||||
|
break; |
||||
|
case eGainAmplifier::FSR_2_048: |
||||
|
//one lsb is 2.048 mv = 2048 uv
|
||||
|
returnType *= 2048; |
||||
|
break; |
||||
|
case eGainAmplifier::FSR_4_096: |
||||
|
//one lsb is 4.096 mv = 4096 uv
|
||||
|
returnType *= 4096; |
||||
|
break; |
||||
|
case eGainAmplifier::FSR_6_144: |
||||
|
//one lsb is 6.144 mv = 6144 uv
|
||||
|
returnType *= 6144; |
||||
|
break; |
||||
|
} |
||||
|
return returnType; |
||||
|
} |
||||
|
|
||||
|
ads_sample_t cADS101x::RawSample(void) { |
||||
|
OneShot(); |
||||
|
ads_sample_t sample; |
||||
|
Wire.beginTransmission(m_address); |
||||
|
Wire.write(REGISTER_CONVERSION); |
||||
|
Wire.endTransmission(); |
||||
|
Wire.beginTransmission(m_address); |
||||
|
Wire.requestFrom((int) m_address, 2); //16 bits
|
||||
|
sample.rawSample = Wire.read() << 8; |
||||
|
sample.rawSample |= Wire.read(); |
||||
|
sample.gain = m_gain; |
||||
|
sample.mux = m_mux; |
||||
|
m_latestSample = sample; |
||||
|
return sample; |
||||
|
} |
||||
|
|
||||
|
void cADS101x::SetDefaults(void) { |
||||
|
m_mux = eInputMux::AIN_0_1; |
||||
|
m_gain = eGainAmplifier::FSR_2_048; |
||||
|
m_sampleSpeed = eSampleSpeed::SPS_1600; |
||||
|
m_oneShot = true; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,70 @@ |
|||||
|
/*
|
||||
|
* ADS101x.h |
||||
|
* |
||||
|
* Created on: Jul 20, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_ADS101X_H_ |
||||
|
#define APP_ADS101X_H_ |
||||
|
|
||||
|
#include <stdint.h> |
||||
|
#include "adc.h" |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
namespace ads { |
||||
|
|
||||
|
//Voltage in uV
|
||||
|
typedef int32_t ads_voltage_t; |
||||
|
|
||||
|
enum eInputMux { |
||||
|
AIN_0_1, AIN_0_3, AIN_1_3, AIN_2_3, AIN_0, AIN_1, AIN_2, AIN_3 |
||||
|
}; |
||||
|
enum eGainAmplifier { |
||||
|
FSR_6_144, FSR_4_096, FSR_2_048, FSR_1_024, FSR_0_512, FSR_0_256 |
||||
|
}; |
||||
|
enum eSampleSpeed { |
||||
|
SPS_128, SPS_250, SPS_490, SPS_920, SPS_1600, SPS_2400, SPS_3300 |
||||
|
}; |
||||
|
|
||||
|
struct ads_sample_t { |
||||
|
int16_t rawSample; |
||||
|
enum eInputMux mux; |
||||
|
enum eGainAmplifier gain; |
||||
|
}; |
||||
|
|
||||
|
class cADS101x: cADC<ads_sample_t, ads_voltage_t> { |
||||
|
public: |
||||
|
|
||||
|
cADS101x(uint8_t i_address = 0x48); |
||||
|
cADS101x(uint8_t i_readyPin, uint8_t i_address = 0x48); |
||||
|
|
||||
|
void SetOneShot(bool i_oneShot = true); |
||||
|
void SetGain(enum eGainAmplifier i_gain); |
||||
|
void SetMux(enum eInputMux i_mux); |
||||
|
void SetSampleSpeed(enum eSampleSpeed i_speed); |
||||
|
virtual void WaitSample(void); |
||||
|
virtual bool IsReady(void); |
||||
|
uint16_t GetSettings(void); |
||||
|
|
||||
|
virtual ads_sample_t RawSample(void); |
||||
|
virtual ads_voltage_t ConvertSample(ads_sample_t & sample); |
||||
|
virtual ~cADS101x() { |
||||
|
|
||||
|
} |
||||
|
private: |
||||
|
uint16_t CreateSettings(uint8_t i_startSample); |
||||
|
void WriteSettings(uint16_t i_settings); |
||||
|
void SetDefaults(void); |
||||
|
void OneShot(void); |
||||
|
private: |
||||
|
uint8_t m_address, m_readyPin; |
||||
|
bool m_oneShot; |
||||
|
enum eInputMux m_mux; |
||||
|
enum eGainAmplifier m_gain; |
||||
|
enum eSampleSpeed m_sampleSpeed; |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
|
#endif /* APP_ADS101X_H_ */ |
@ -0,0 +1,66 @@ |
|||||
|
#include <user_config.h> |
||||
|
#include <SmingCore/SmingCore.h> |
||||
|
#include <SmingCore/HardwareSerial.h> |
||||
|
#include "ads101x.h" |
||||
|
|
||||
|
#define LED_PIN 2 // GPIO2
|
||||
|
|
||||
|
using namespace rijnfel; |
||||
|
Timer procTimer; |
||||
|
ads::cADS101x adc; |
||||
|
bool state = true; |
||||
|
uint16_t sampless = 1; |
||||
|
uint8_t channel = 0; |
||||
|
unsigned int average[4]; |
||||
|
|
||||
|
void readAdc() { |
||||
|
//while (adc.IsReady()) {
|
||||
|
adc.SetMux(static_cast<ads::eInputMux>(ads::eInputMux::AIN_0 + channel)); |
||||
|
channel++; |
||||
|
if (channel > 3) { |
||||
|
channel = 0; |
||||
|
} |
||||
|
uint16_t settings = adc.GetSettings(); |
||||
|
Serial.printf("Settings = %d;\n\r", settings); |
||||
|
|
||||
|
if (false) { |
||||
|
adc.SetMux( |
||||
|
static_cast<ads::eInputMux>(ads::eInputMux::AIN_0 + channel)); |
||||
|
ads::ads_sample_t sample = adc.RawSample(); |
||||
|
average[channel] += adc.ConvertSample(sample) / 1000; //want it in mv
|
||||
|
channel++; |
||||
|
if (channel > 3) { |
||||
|
channel = 0; |
||||
|
sampless++; |
||||
|
if (sampless > 3300) { |
||||
|
for (uint8_t i = 0; i < 4; i++) { |
||||
|
Serial.printf("C[%d] = %d; ", i, average[i] / sampless); |
||||
|
average[i] = 0; |
||||
|
} |
||||
|
Serial.printf("\n\r"); |
||||
|
sampless = 0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
WDT.alive(); |
||||
|
//}
|
||||
|
//Serial.printf("Not ready anymore\n\r");
|
||||
|
} |
||||
|
|
||||
|
void blink() { |
||||
|
readAdc(); |
||||
|
} |
||||
|
|
||||
|
void init() { |
||||
|
Serial.begin(460800); |
||||
|
Wire.pins(5, 4); |
||||
|
|
||||
|
Wire.begin(); |
||||
|
//SET higher CPU freq & disable wifi sleep
|
||||
|
system_update_cpu_freq(SYS_CPU_160MHZ); |
||||
|
WDT.enable(false); |
||||
|
pinMode(LED_PIN, OUTPUT); |
||||
|
adc.SetMux(ads::eInputMux::AIN_0); |
||||
|
adc.SetSampleSpeed(ads::eSampleSpeed::SPS_3300); |
||||
|
procTimer.initializeMs(500, readAdc).start(); |
||||
|
} |
@ -0,0 +1,60 @@ |
|||||
|
/*
|
||||
|
* double_buffer.h |
||||
|
* |
||||
|
* Created on: Aug 1, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_DOUBLE_BUFFER_H_ |
||||
|
#define APP_DOUBLE_BUFFER_H_ |
||||
|
|
||||
|
#include <stdint.h> |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
template<typename BufferType> |
||||
|
class cDoubleBuffer { |
||||
|
public: |
||||
|
cDoubleBuffer(int i_size) : |
||||
|
m_size(i_size) { |
||||
|
m_writeIndex = 0; |
||||
|
m_bufferIndex = 0; |
||||
|
m_buf = new BufferType*[2]; |
||||
|
m_buf[0] = new BufferType[m_size]; |
||||
|
m_buf[1] = new BufferType[m_size]; |
||||
|
} |
||||
|
|
||||
|
void Resize(int i_newSize) { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
bool AddValue(BufferType i_val) { |
||||
|
m_buf[m_bufferIndex][m_writeIndex] = i_val; |
||||
|
m_writeIndex++; |
||||
|
if (m_writeIndex >= m_size) { |
||||
|
m_bufferIndex = !m_bufferIndex; |
||||
|
m_writeIndex = 0; |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
BufferType * GetBuffer(int i_index) { |
||||
|
return m_buf[i_index]; |
||||
|
} |
||||
|
|
||||
|
virtual ~cDoubleBuffer() { |
||||
|
delete m_buf[0]; |
||||
|
delete m_buf[1]; |
||||
|
delete m_buf; |
||||
|
} |
||||
|
private: |
||||
|
int m_size; |
||||
|
int m_writeIndex; |
||||
|
int m_bufferIndex; |
||||
|
BufferType ** m_buf; |
||||
|
}; |
||||
|
|
||||
|
} /* namespace rijnfel */ |
||||
|
|
||||
|
#endif /* APP_DOUBLE_BUFFER_H_ */ |
@ -0,0 +1,38 @@ |
|||||
|
/*
|
||||
|
* sensor.h |
||||
|
* |
||||
|
* Created on: Aug 1, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_SENSOR_H_ |
||||
|
#define APP_SENSOR_H_ |
||||
|
|
||||
|
#include <stddef.h> |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
template<typename Sample> |
||||
|
class cSensor { |
||||
|
public: |
||||
|
cSensor() { |
||||
|
m_callback = NULL; |
||||
|
} |
||||
|
Sample GetLatestSample(void) { |
||||
|
return m_latestSample; |
||||
|
} |
||||
|
void SetOnSampleCallBack(void (*i_callback)(Sample & o_sample)) { |
||||
|
m_callback = i_callback; |
||||
|
} |
||||
|
virtual void WaitSample(void) = 0; |
||||
|
virtual bool IsReady(void) = 0; |
||||
|
virtual Sample RawSample(void) = 0; |
||||
|
virtual ~cSensor() { |
||||
|
|
||||
|
} |
||||
|
protected: |
||||
|
Sample m_latestSample; |
||||
|
void (*m_callback)(Sample & o_sample); |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
#endif /* APP_SENSOR_H_ */ |
@ -0,0 +1,47 @@ |
|||||
|
/*
|
||||
|
* sensor_hub.cpp |
||||
|
* |
||||
|
* Created on: Aug 1, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#include "sensor_hub.h" |
||||
|
#include <stdint.h> |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
cSensorHub::cSensorHub(uint32_t i_updatePeriod) : |
||||
|
m_updatePeriod(i_updatePeriod) { |
||||
|
m_adc = new ads::cADS101x(); |
||||
|
m_adcSettings = NULL; |
||||
|
m_tempSettings = NULL; |
||||
|
} |
||||
|
|
||||
|
void cSensorHub::Update() { |
||||
|
if (m_adcSettings) { |
||||
|
if (m_adcSettings->ShouldSample(m_updatePeriod)) { |
||||
|
if (m_adcSettings->m_buffer.AddValue(m_adc->RawSample())) { |
||||
|
m_adcSettings->m_callback(m_adcSettings->m_buffer); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void cSensorHub::SetAdcSettings( |
||||
|
cSensorSettings<ads::ads_sample_t> * i_adcSettings) { |
||||
|
m_adcSettings = i_adcSettings; |
||||
|
} |
||||
|
|
||||
|
void cSensorHub::SetTempSettings(cSensorSettings<uint32_t> * i_tempSettings) { |
||||
|
m_tempSettings = i_tempSettings; |
||||
|
} |
||||
|
|
||||
|
cSensorHub::~cSensorHub() { |
||||
|
if (m_adcSettings) |
||||
|
delete m_adcSettings; |
||||
|
if (m_tempSettings) |
||||
|
delete m_tempSettings; |
||||
|
delete m_adc; |
||||
|
} |
||||
|
|
||||
|
} /* namespace rijnfel */ |
@ -0,0 +1,33 @@ |
|||||
|
/*
|
||||
|
* sensor_hub.h |
||||
|
* |
||||
|
* Created on: Aug 1, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_SENSOR_HUB_H_ |
||||
|
#define APP_SENSOR_HUB_H_ |
||||
|
|
||||
|
#include "ads101x.h" |
||||
|
#include "sensor_settings.h" |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
class cSensorHub { |
||||
|
public: |
||||
|
//in milliseconds
|
||||
|
cSensorHub(uint32_t i_updatePeriod); |
||||
|
void SetAdcSettings(cSensorSettings<ads::ads_sample_t> * i_adcSettings); |
||||
|
void SetTempSettings(cSensorSettings<uint32_t> * i_tempSettings); |
||||
|
void Update(); |
||||
|
virtual ~cSensorHub(); |
||||
|
private: |
||||
|
uint32_t m_updatePeriod; |
||||
|
cSensorSettings<ads::ads_sample_t> * m_adcSettings; |
||||
|
cSensorSettings<uint32_t> * m_tempSettings; |
||||
|
ads::cADS101x * m_adc; |
||||
|
}; |
||||
|
|
||||
|
} /* namespace rijnfel */ |
||||
|
|
||||
|
#endif /* APP_SENSOR_HUB_H_ */ |
@ -0,0 +1,41 @@ |
|||||
|
/*
|
||||
|
* sensor_settings.h |
||||
|
* |
||||
|
* Created on: Aug 1, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_SENSOR_SETTINGS_H_ |
||||
|
#define APP_SENSOR_SETTINGS_H_ |
||||
|
|
||||
|
#include "double_buffer.h" |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
|
||||
|
template<typename BufferType> |
||||
|
class cSensorSettings { |
||||
|
public: |
||||
|
cSensorSettings(void (*i_callback)(cDoubleBuffer<BufferType> & buffer), |
||||
|
uint32_t i_periodTimer, uint32_t i_period) : |
||||
|
m_callback(i_callback), m_periodTimer(i_periodTimer), m_period( |
||||
|
i_period) { |
||||
|
m_buffer(1000 / m_period); |
||||
|
} |
||||
|
bool ShouldSample(uint32_t i_updatePeriod) { |
||||
|
m_periodTimer += i_updatePeriod; |
||||
|
if (m_periodTimer >= m_period) { |
||||
|
m_periodTimer -= m_period; |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
cDoubleBuffer<BufferType> m_buffer; |
||||
|
void (*m_callback)(cDoubleBuffer<BufferType> & buffer); |
||||
|
private: |
||||
|
uint32_t m_periodTimer; |
||||
|
uint32_t m_period; |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#endif /* APP_SENSOR_SETTINGS_H_ */ |
@ -0,0 +1,28 @@ |
|||||
|
/*
|
||||
|
* temperature.h |
||||
|
* |
||||
|
* Created on: Aug 1, 2017 |
||||
|
* Author: Elmar |
||||
|
*/ |
||||
|
|
||||
|
#ifndef APP_TEMPERATURE_H_ |
||||
|
#define APP_TEMPERATURE_H_ |
||||
|
|
||||
|
#include "sensor.h" |
||||
|
|
||||
|
namespace rijnfel { |
||||
|
template<typename Sample, typename Temperature> |
||||
|
class cTemperatureSensor: cSensor<Sample> { |
||||
|
public: |
||||
|
cTemperatureSensor() { |
||||
|
|
||||
|
} |
||||
|
virtual Temperature ConvertSample(Sample sample) = 0; |
||||
|
virtual ~cTemperatureSensor() { |
||||
|
|
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#endif /* APP_TEMPERATURE_H_ */ |
@ -0,0 +1,45 @@ |
|||||
|
#ifndef __USER_CONFIG_H__ |
||||
|
#define __USER_CONFIG_H__ |
||||
|
|
||||
|
#ifdef __cplusplus |
||||
|
extern "C" { |
||||
|
#endif |
||||
|
|
||||
|
// UART config
|
||||
|
#define SERIAL_BAUD_RATE COM_SPEED_SERIAL |
||||
|
|
||||
|
// ESP SDK config
|
||||
|
#define LWIP_OPEN_SRC |
||||
|
#define USE_US_TIMER |
||||
|
|
||||
|
// Default types
|
||||
|
#define __CORRECT_ISO_CPP_STDLIB_H_PROTO |
||||
|
#include <limits.h> |
||||
|
#include <stdint.h> |
||||
|
|
||||
|
// Override c_types.h include and remove buggy espconn
|
||||
|
#define _C_TYPES_H_ |
||||
|
#define _NO_ESPCON_ |
||||
|
|
||||
|
// Updated, compatible version of c_types.h
|
||||
|
// Just removed types declared in <stdint.h>
|
||||
|
#include <espinc/c_types_compatible.h> |
||||
|
|
||||
|
// System API declarations
|
||||
|
#include <esp_systemapi.h> |
||||
|
|
||||
|
// C++ Support
|
||||
|
#include <esp_cplusplus.h> |
||||
|
// Extended string conversion for compatibility
|
||||
|
#include <stringconversion.h> |
||||
|
// Network base API
|
||||
|
#include <espinc/lwip_includes.h> |
||||
|
|
||||
|
// Beta boards
|
||||
|
#define BOARD_ESP01 |
||||
|
|
||||
|
#ifdef __cplusplus |
||||
|
} |
||||
|
#endif |
||||
|
|
||||
|
#endif |
Loading…
Reference in new issue