// Visual Micro is in vMicro>General>Tutorial Mode | |||||
// | |||||
/* | |||||
Name: Teensy4.1_Datalogger new.ino | |||||
Created: 03.05.2022 12:04:32 | |||||
Author: GAMINGMASHEEN\Julian Graf | |||||
*/ | |||||
#include <SdFat.h> | |||||
#include <TimeLib.h> | |||||
#include <Bounce.h> | |||||
#define SD_FAT_TYPE 3 | |||||
#ifndef SDCARD_SS_PIN | |||||
const uint8_t SD_CS_PIN = SS; | |||||
#else // SDCARD_SS_PIN | |||||
// Assume built-in SD is used. | |||||
const uint8_t SD_CS_PIN = SDCARD_SS_PIN; | |||||
#endif // SDCARD_SS_PIN | |||||
#if HAS_SDIO_CLASS | |||||
#define SD_CONFIG SdioConfig(FIFO_SDIO) | |||||
#elif ENABLE_DEDICATED_SPI | |||||
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI) | |||||
#else // HAS_SDIO_CLASS | |||||
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI) | |||||
#endif // HAS_SDIO_CLASS | |||||
#if SD_FAT_TYPE == 0 | |||||
SdFat sd; | |||||
File file; | |||||
#elif SD_FAT_TYPE == 1 | |||||
SdFat32 sd; | |||||
File32 file; | |||||
#elif SD_FAT_TYPE == 2 | |||||
SdExFat sd; | |||||
ExFile file; | |||||
#elif SD_FAT_TYPE == 3 | |||||
SdFs sd; | |||||
FsFile file; | |||||
#else // SD_FAT_TYPE | |||||
#error Invalid SD_FAT_TYPE | |||||
#endif // SD_FAT_TYPE | |||||
// Define User Types below here or use a .h file | |||||
// | |||||
const char software_name[] = "Software: Teensy_datalog V.2"; | |||||
const int min_voltage_batterie = 13; | |||||
const int fixed_resistor_temperatur = 500; | |||||
const int power_Temp_sensor = 34, power_Windfahne = 36, LED_Fail = 24, | |||||
LED_Write = 5, LED_Normal = 6, LED_Batterie = 7, | |||||
taster_manuell_speichern = 28, Windfahne = 20, T_sensor_input = 17, Batterie_input = 38; | |||||
int last_second, last_minute, last_hour; | |||||
struct calculations { | |||||
private: | |||||
float summ; | |||||
float square_summ; | |||||
float cubic_summ; | |||||
public: | |||||
void calculate(float speed_per_second[60], int amount_saved) { | |||||
summ = 0; | |||||
square_summ = 0; | |||||
cubic_summ = 0; | |||||
for (int i = 0; i < amount_saved; i++) { | |||||
summ = summ + speed_per_second[i]; | |||||
square_summ = square_summ + pow(speed_per_second[i], 2); | |||||
cubic_summ = cubic_summ + pow(speed_per_second[i], 3); | |||||
} | |||||
arithmetic_mean = summ / float(amount_saved); | |||||
square_mean = pow((square_summ / float(amount_saved)), (1 / 2.0)); | |||||
cubic_mean = pow((cubic_mean / float(amount_saved)), (1 / 3.0)); | |||||
summ = 0; | |||||
square_summ = 0; | |||||
cubic_summ = 0; | |||||
for (int i = 0; i < amount_saved; i++) { | |||||
summ = summ + pow((speed_per_second[i] - arithmetic_mean), 2); | |||||
square_summ = square_summ + pow((speed_per_second[i] - square_mean), 2); | |||||
cubic_summ = cubic_summ + pow((speed_per_second[i] - cubic_mean), 2); | |||||
} | |||||
arithmetic_deviation = pow((summ / float(amount_saved - 1)), (1 / 2.0)); | |||||
square_deviation = pow((square_summ / float(amount_saved - 1)), (1 / 2.0)); | |||||
cubic_deviation = pow((cubic_summ / float(amount_saved - 1)), (1 / 2.0)); | |||||
} | |||||
float arithmetic_mean; | |||||
float arithmetic_deviation; | |||||
float square_mean; | |||||
float square_deviation; | |||||
float cubic_mean; | |||||
float cubic_deviation; | |||||
}; | |||||
struct anemomenter_maessurement { | |||||
public: | |||||
int pin = 0; | |||||
int seconds_saved = 0; | |||||
int minutes_saved = 0; | |||||
void meassure() { | |||||
if (reed_contact.update() && reed_contact.fallingEdge()) { | |||||
count_per_second++; | |||||
} | |||||
} | |||||
void save_wind_speed() { | |||||
wind_speed_per_second[seconds_saved] = 0.4 * count_per_second; | |||||
seconds_saved++; | |||||
} | |||||
void calculate() { | |||||
values[minutes_saved].calculate(wind_speed_per_second, seconds_saved); | |||||
seconds_saved = 0; | |||||
minutes_saved++; | |||||
} | |||||
private: | |||||
int count_per_second = 0; | |||||
int saved_seconds = 0; | |||||
int saved_minutes = 0; | |||||
float wind_speed_per_second[60]; | |||||
calculations values[60]; | |||||
Bounce reed_contact = Bounce(pin, 10); | |||||
}anemometer_1, anemometer_2, anemometer_3; | |||||
// Define Function Prototypes that use User Types below here or use a .h file | |||||
// | |||||
// Define Functions below here or use other .ino or cpp files | |||||
// | |||||
void every_second() { | |||||
anemometer_1.save_wind_speed(); | |||||
anemometer_2.save_wind_speed(); | |||||
anemometer_3.save_wind_speed(); | |||||
last_second = second(); | |||||
} | |||||
void every_minute() { | |||||
anemometer_1.calculate(); | |||||
anemometer_2.calculate(); | |||||
anemometer_3.calculate(); | |||||
last_minute = minute(); | |||||
} | |||||
void every_hour() { | |||||
last_hour = hour(); | |||||
} | |||||
// The setup() function runs once each time the micro-controller starts | |||||
void setup() | |||||
{ | |||||
//set input and output | |||||
pinMode(Windfahne, INPUT); | |||||
pinMode(Batterie_input, INPUT); | |||||
pinMode(T_sensor_input, INPUT); | |||||
pinMode(taster_manuell_speichern, INPUT); | |||||
pinMode(LED_Write, OUTPUT); | |||||
pinMode(LED_Fail, OUTPUT); | |||||
pinMode(LED_Normal, OUTPUT); | |||||
pinMode(LED_Batterie, OUTPUT); | |||||
pinMode(power_Temp_sensor, OUTPUT); | |||||
pinMode(power_Windfahne, OUTPUT); | |||||
setSyncProvider((getExternalTime)Teensy3Clock.get()); | |||||
Serial.begin(9600); | |||||
Serial.println("Teensy 4.1-Datalogger gestartet"); | |||||
if (timeStatus() != timeSet) { | |||||
Serial.println("Fehler bei Synchronisieren der Uhrzeit mit der RTC"); | |||||
digitalWrite(LED_Fail, HIGH); | |||||
return; | |||||
} | |||||
Serial.println("Uhrzeit erfolgreich mit der RTC synchronisiert"); | |||||
if (!sd.begin(SD_CONFIG)) { | |||||
digitalWrite(LED_Fail, HIGH); | |||||
sd.initErrorHalt(&Serial); | |||||
} | |||||
anemometer_1.pin = 2; | |||||
anemometer_2.pin = 9; | |||||
anemometer_3.pin = 22; | |||||
Serial.println("Messung startet"); | |||||
last_second = second(); | |||||
while (last_second == second()) {}; | |||||
last_second = second(); | |||||
last_minute = minute(); | |||||
last_hour = hour(); | |||||
} | |||||
// Add the main program code into the continuous loop() function | |||||
void loop() | |||||
{ | |||||
anemometer_1.meassure(); | |||||
anemometer_2.meassure(); | |||||
anemometer_3.meassure(); | |||||
if (second() != last_second) { | |||||
if (minute() != last_minute) { | |||||
if (hour() != last_hour) { | |||||
every_hour(); | |||||
} | |||||
every_minute(); | |||||
} | |||||
every_second(); | |||||
} | |||||
} |
| |||||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio Version 17 | |||||
VisualStudioVersion = 17.1.32421.90 | |||||
MinimumVisualStudioVersion = 10.0.40219.1 | |||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Teensy4.1_Datalogger new", "Teensy4.1_Datalogger new.vcxproj", "{2E6F448E-0966-4C65-8DA5-8AFD46F294D2}" | |||||
EndProject | |||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Teensy4.1-Datenlogger-Software", "..\Projekt\Teensy4.1-Datenlogger-Software\Teensy4.1-Datenlogger-Software.vcxproj", "{C5F80730-F44F-4478-BDAE-6634EFC2CA88}" | |||||
EndProject | |||||
Global | |||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|x86 = Debug|x86 | |||||
Release|x86 = Release|x86 | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{2E6F448E-0966-4C65-8DA5-8AFD46F294D2}.Debug|x86.ActiveCfg = Debug|Win32 | |||||
{2E6F448E-0966-4C65-8DA5-8AFD46F294D2}.Debug|x86.Build.0 = Debug|Win32 | |||||
{2E6F448E-0966-4C65-8DA5-8AFD46F294D2}.Release|x86.ActiveCfg = Release|Win32 | |||||
{2E6F448E-0966-4C65-8DA5-8AFD46F294D2}.Release|x86.Build.0 = Release|Win32 | |||||
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.ActiveCfg = Debug|Win32 | |||||
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.Build.0 = Debug|Win32 | |||||
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.ActiveCfg = Release|Win32 | |||||
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.Build.0 = Release|Win32 | |||||
EndGlobalSection | |||||
GlobalSection(SolutionProperties) = preSolution | |||||
HideSolutionNode = FALSE | |||||
EndGlobalSection | |||||
GlobalSection(ExtensibilityGlobals) = postSolution | |||||
SolutionGuid = {349760AA-D265-433D-A4B4-7278AE8A0FCC} | |||||
EndGlobalSection | |||||
EndGlobal |
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<ItemGroup> | |||||
<Filter Include="Source Files"> | |||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | |||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | |||||
</Filter> | |||||
<Filter Include="Header Files"> | |||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | |||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> | |||||
</Filter> | |||||
<Filter Include="Resource Files"> | |||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | |||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | |||||
</Filter> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<None Include="Teensy4.1_Datalogger new.ino" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ClInclude Include="__vm\.Teensy4.1_Datalogger new.vsarduino.h"> | |||||
<Filter>Header Files</Filter> | |||||
</ClInclude> | |||||
</ItemGroup> | |||||
</Project> |
/* | |||||
Editor: https://www.visualmicro.com/ | |||||
This file is for intellisense purpose only. | |||||
Visual micro (and the arduino ide) ignore this code during compilation. This code is automatically maintained by visualmicro, manual changes to this file will be overwritten | |||||
The contents of the _vm sub folder can be deleted prior to publishing a project | |||||
All non-arduino files created by visual micro and all visual studio project or solution files can be freely deleted and are not required to compile a sketch (do not delete your own code!). | |||||
Note: debugger breakpoints are stored in '.sln' or '.asln' files, knowledge of last uploaded breakpoints is stored in the upload.vmps.xml file. Both files are required to continue a previous debug session without needing to compile and upload again | |||||
Hardware: Teensy 4.0 (teensy40), Platform=teensy4, Package=teensy | |||||
*/ | |||||
#if defined(_VMICRO_INTELLISENSE) | |||||
#ifndef _VSARDUINO_H_ | |||||
#define _VSARDUINO_H_ | |||||
#define __HARDWARE_imxrt1062__ | |||||
#define __HARDWARE_IMXRT1062__ | |||||
#define _VMDEBUG 1 | |||||
#define __IMXRT1062__ | |||||
#define TEENSYDUINO 148 | |||||
#define ARDUINO 108010 | |||||
#define F_CPU 600000000 | |||||
#define USB_SERIAL | |||||
#define LAYOUT_US_ENGLISH | |||||
#define __cplusplus 201103L | |||||
#undef __cplusplus | |||||
#define __cplusplus 201103L | |||||
#define __arm__ | |||||
#define __ARM__ | |||||
#define __attribute__(x) | |||||
typedef void *__builtin_va_list; | |||||
#define __extension__ | |||||
#define __ATTR_PURE__ | |||||
#define __ATTR_CONST__ | |||||
#define __inline__ | |||||
#define __asm__(x) | |||||
#define __volatile__ | |||||
#define NEW_H | |||||
#undef _WIN32 | |||||
#define __STDC__ | |||||
//#define __GNUC__ 2 | |||||
//#define __GNUC_MINOR__ 5 | |||||
#define __ARM_ARCH_7EM__ | |||||
extern int at_quick_exit(void (*f)(void)); | |||||
int at_quick_exit(void (*f)(void)) { | |||||
} | |||||
extern int quick_exit(void (*f)(void)); | |||||
int quick_exit(void (*f)(void)) { | |||||
} | |||||
#define __INT64_TYPE__ 8 | |||||
#define __INTPTR_TYPE__ 4 | |||||
#define __INT32_TYPE__ 4 | |||||
typedef long intptr_t; | |||||
typedef long __intptr_t; | |||||
typedef unsigned long __uintptr_t; | |||||
typedef long __int32_t; | |||||
typedef unsigned long __uint32_t; | |||||
typedef unsigned short __uint16_t; | |||||
typedef short __int16_t; | |||||
typedef unsigned short __uint8_t; | |||||
typedef short __int8_t; | |||||
typedef unsigned long __uint64_t; | |||||
typedef double __int64_t; | |||||
typedef unsigned long uint64_t; | |||||
typedef double int64_t; | |||||
typedef unsigned short uint8_t; | |||||
typedef short int8_t; | |||||
typedef unsigned int uint16_t; | |||||
typedef short int16_t; | |||||
typedef long __int32_t; | |||||
typedef unsigned long __uint32_t; | |||||
#define at_quick_exit(x) | |||||
#include "arduino.h" | |||||
#define abs(x) ((x)>0?(x):-(x)) | |||||
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) | |||||
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) | |||||
#define radians(deg) ((deg)*DEG_TO_RAD) | |||||
#define degrees(rad) ((rad)*RAD_TO_DEG) | |||||
#define sq(x) ((x)*(x)) | |||||
#define __asm__ | |||||
#define __disable_irq() __asm__ volatile(""); | |||||
#define __enable_irq() __asm__ volatile(""); | |||||
#include "Teensy4.1_Datalogger new.ino" | |||||
#endif | |||||
#endif |