<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.tinkernet.ca/index.php?action=history&amp;feed=atom&amp;title=IoT_-_Modular_-_main.cpp</id>
	<title>IoT - Modular - main.cpp - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tinkernet.ca/index.php?action=history&amp;feed=atom&amp;title=IoT_-_Modular_-_main.cpp"/>
	<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_main.cpp&amp;action=history"/>
	<updated>2026-05-22T15:10:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_main.cpp&amp;diff=1546&amp;oldid=prev</id>
		<title>Tinker: Created page with &quot;==#includes, Defines, etc...==  You'll note this is currently aimed at the SugarBush project.  &lt;syntaxhighlight lang=&quot;cpp&quot; line=&quot;1&quot;&gt; #include &quot;libraries.h&quot; #include &quot;functions...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.tinkernet.ca/index.php?title=IoT_-_Modular_-_main.cpp&amp;diff=1546&amp;oldid=prev"/>
		<updated>2021-04-29T18:16:02Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==#includes, Defines, etc...==  You&amp;#039;ll note this is currently aimed at the SugarBush project.  &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt; #include &amp;quot;libraries.h&amp;quot; #include &amp;quot;functions...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==#includes, Defines, etc...==&lt;br /&gt;
&lt;br /&gt;
You'll note this is currently aimed at the SugarBush project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;libraries.h&amp;quot;&lt;br /&gt;
#include &amp;quot;functions.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#ifdef s_CLIMATE&lt;br /&gt;
#include &amp;quot;s-Climate.h&amp;quot;&lt;br /&gt;
#endif // s_CLIMATE&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;externs.h&amp;quot;&lt;br /&gt;
#include &amp;quot;TopSecret.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/************************************************************************************************/&lt;br /&gt;
struct CLIMATE_Readings&lt;br /&gt;
{&lt;br /&gt;
    byte Status;&lt;br /&gt;
&lt;br /&gt;
    float Temperature;&lt;br /&gt;
    float Humidity;&lt;br /&gt;
    float AbsPressure;&lt;br /&gt;
    float SeaPressure;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct CLIMATE_Readings CLIMATE_Datum;&lt;br /&gt;
/************************************************************************************************/&lt;br /&gt;
&lt;br /&gt;
// I2C pins suitable for the ESP-M3-Everything!&lt;br /&gt;
const int SSD1306_SDA = 14; // Tarduino D5&lt;br /&gt;
const int SSD1306_SCL = 12; // Tarduino D6&lt;br /&gt;
&lt;br /&gt;
#ifdef d_SDD1306&lt;br /&gt;
bool WalkingDudeIndicator = false;&lt;br /&gt;
bool WavingDudeIndicator = true;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
SimpleTimer timer;&lt;br /&gt;
&lt;br /&gt;
extern int BMP180_Count;&lt;br /&gt;
extern int BME280_Count;&lt;br /&gt;
&lt;br /&gt;
#ifdef SS_Dumper&lt;br /&gt;
int ReedPin = 4;&lt;br /&gt;
int HallPin = 5;&lt;br /&gt;
// int  Dumptime = 0;&lt;br /&gt;
#endif // SS_Dumper&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==setup()==&lt;br /&gt;
&lt;br /&gt;
You'll note this is currently aimed at the SugarBush project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  char debugTEXT[46];&lt;br /&gt;
  sprintf(debugTEXT, &amp;quot;nothing yet&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  delay(500); // Delay to let the ESP get booted before sending out serial data&lt;br /&gt;
&lt;br /&gt;
  debug_TitleScreen();&lt;br /&gt;
&lt;br /&gt;
  if (I2C_Test(SSD1306_SDA, SSD1306_SCL)) // Force a reset of the I2C bus if needed&lt;br /&gt;
  {&lt;br /&gt;
    Wire.begin(SSD1306_SDA, SSD1306_SCL); // Select SDA &amp;amp; SCL pins&lt;br /&gt;
                                          /////////////////////////////&lt;br /&gt;
    pinMode(SSD1306_SDA, INPUT);&lt;br /&gt;
    pinMode(SSD1306_SCL, INPUT);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    ////////////////////////////////  Need to send an MQTT error status message!&lt;br /&gt;
    debug_Action(&amp;quot;POOP!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
// ESP Info //////////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef DEBUG6&lt;br /&gt;
  debug_Separator();&lt;br /&gt;
  debug_ESP_info();&lt;br /&gt;
#endif // DEBUG6&lt;br /&gt;
&lt;br /&gt;
  // WiFi //////////////////////////////////////////////////////////////////////&lt;br /&gt;
  debug_Separator();&lt;br /&gt;
  WiFi_init();&lt;br /&gt;
&lt;br /&gt;
  // MQTT //////////////////////////////////////////////////////////////////////&lt;br /&gt;
  debug_Separator();&lt;br /&gt;
  MQTT_init();&lt;br /&gt;
&lt;br /&gt;
  debug_Separator();&lt;br /&gt;
  debug_Action(&amp;quot;Initialising Outputs...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Pixels //////////////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef d_Pixels&lt;br /&gt;
&lt;br /&gt;
  Pixels_init();&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; PixelCount; i++)&lt;br /&gt;
  {&lt;br /&gt;
    SetAPixel(i, BLU);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
#endif // d_Pixels&lt;br /&gt;
&lt;br /&gt;
// Audio ///////////////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef d_Audio&lt;br /&gt;
  Noise_init();&lt;br /&gt;
#endif // d_Audio&lt;br /&gt;
&lt;br /&gt;
#ifdef d_SDD1306&lt;br /&gt;
  SSD1306_init();&lt;br /&gt;
  // Display static text&lt;br /&gt;
  // SSD1306_title(&amp;quot;ColdStuff&amp;quot;);&lt;br /&gt;
  SSD1306_title(&amp;quot;SugarBush&amp;quot;);&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
  debug_LineOut(&amp;quot;Title on-screen&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
#endif // d_SDD1306&lt;br /&gt;
&lt;br /&gt;
  debug_Separator();&lt;br /&gt;
  debug_Action(&amp;quot;Initialising Sensors...&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Event Triggers //////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef SS_Dumper&lt;br /&gt;
  debug_LineOut(&amp;quot;Dumper Sensor&amp;quot;);&lt;br /&gt;
  pinMode(HallPin, INPUT);&lt;br /&gt;
  attachInterrupt(digitalPinToInterrupt(ReedPin), DumpDetect, CHANGE);&lt;br /&gt;
  sprintf(debugTEXT, &amp;quot;Reed Switch on pin %d&amp;quot;, ReedPin);&lt;br /&gt;
  debug_LineOut(debugTEXT);&lt;br /&gt;
  attachInterrupt(digitalPinToInterrupt(HallPin), DumpDetect2, CHANGE);&lt;br /&gt;
  sprintf(debugTEXT, &amp;quot;Hall Effect Sensor on pin %d&amp;quot;, HallPin);&lt;br /&gt;
  debug_LineOut(debugTEXT);&lt;br /&gt;
#endif // SS_Dumper&lt;br /&gt;
&lt;br /&gt;
// Depth Probes ////////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef s_Depth&lt;br /&gt;
  Depth_init();&lt;br /&gt;
#endif // d_Depth&lt;br /&gt;
&lt;br /&gt;
  // BMP180 ////////////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef s_BMP180&lt;br /&gt;
  BMP180_Count = BMP180_init();&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
  // BME280 ////////////////////////////////////////////////////////////////////&lt;br /&gt;
#ifdef s_BME280&lt;br /&gt;
  BME280_Count = BME280_init();&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef s_CLIMATE&lt;br /&gt;
  BMP180_Count = BMP180_init();&lt;br /&gt;
  if (BMP180_Count &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
#define s_BMP180&lt;br /&gt;
  }&lt;br /&gt;
  BME280_Count = BME280_init();&lt;br /&gt;
  if (BME280_Count &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
#define s_BME280&lt;br /&gt;
  }&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
  // Hall-Effect ///////////////////////////////////////////////////////////////&lt;br /&gt;
  // #ifdef SS_Dumper&lt;br /&gt;
  //   debug_Separator();&lt;br /&gt;
  //   debug_SectionTitle(&amp;quot;Hall Effect Sensor&amp;quot;);&lt;br /&gt;
  //   pinMode(HallPin, INPUT);&lt;br /&gt;
  //   attachInterrupt(digitalPinToInterrupt(ReedPin), DumpDetect, CHANGE);&lt;br /&gt;
  //   sprintf(debugTEXT, &amp;quot;Reed Switch on pin %d&amp;quot;, ReedPin);&lt;br /&gt;
  //   debug_LineOut(debugTEXT);&lt;br /&gt;
  //   attachInterrupt(digitalPinToInterrupt(HallPin), DumpDetect2, CHANGE);&lt;br /&gt;
  //   sprintf(debugTEXT, &amp;quot;Hall Effect Sensor on pin %d&amp;quot;, HallPin);&lt;br /&gt;
  //   debug_LineOut(debugTEXT);&lt;br /&gt;
  // #endif // SS_Dumper&lt;br /&gt;
&lt;br /&gt;
  // Interval Timers ///////////////////////////////////////////////////////////&lt;br /&gt;
  debug_Separator();&lt;br /&gt;
  debug_SectionTitle(&amp;quot;Interval Timers&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  timer.setInterval(20, MQTT_handler);&lt;br /&gt;
  debug_LineOut(&amp;quot;MQTT&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  timer.setInterval(2000, WiFi_Test);&lt;br /&gt;
  debug_LineOut(&amp;quot;WiFiCheck&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
#ifdef s_Depth&lt;br /&gt;
  timer.setInterval(5000, CheckProbes);&lt;br /&gt;
  debug_LineOut(&amp;quot;Check Probes&amp;quot;);&lt;br /&gt;
#endif // s_Depth&lt;br /&gt;
&lt;br /&gt;
#ifdef s_BMP180&lt;br /&gt;
  if (BMP180_Count != 0)&lt;br /&gt;
  {&lt;br /&gt;
    timer.setInterval(10000, BMP180_main);&lt;br /&gt;
    debug_LineOut(&amp;quot;BMP180 Handler&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef s_BME280&lt;br /&gt;
  if (BME280_Count != 0)&lt;br /&gt;
  {&lt;br /&gt;
    timer.setInterval(10000, BME280_main);&lt;br /&gt;
    debug_LineOut(&amp;quot;BME280 Handler&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef s_CLIMATE&lt;br /&gt;
  if (BMP180_Count != 0)&lt;br /&gt;
  {&lt;br /&gt;
    timer.setInterval(10000, BMP180_main);&lt;br /&gt;
    debug_LineOut(&amp;quot;BMP180 Handler&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
    if (BME280_Count != 0)&lt;br /&gt;
  {&lt;br /&gt;
    timer.setInterval(10000, BME280_main);&lt;br /&gt;
    debug_LineOut(&amp;quot;BME280 Handler&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#ifdef d_SDD1306&lt;br /&gt;
  timer.setInterval(100, WavingDude); // Waving Dude in the top-right corner&lt;br /&gt;
  debug_LineOut(&amp;quot;Waving Dude Indicator&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
  // READY /////////////////////////////////////////////////////////////////////&lt;br /&gt;
  debug_ReadyScreen();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==loop()==&lt;br /&gt;
&lt;br /&gt;
You'll note this is currently aimed at the SugarBush project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  // Run the interval timers&lt;br /&gt;
  // Running processes here in loop() is a synchronous flow.&lt;br /&gt;
  // Running processes via the interval timers is assynchronous.&lt;br /&gt;
  // If your actions don't depend directly on each other,&lt;br /&gt;
  // synchronous flow makes no sense at all...&lt;br /&gt;
  timer.run();&lt;br /&gt;
&lt;br /&gt;
#ifdef SS_Dumper&lt;br /&gt;
  //   This is just here to give me console output while developing...&lt;br /&gt;
  // Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
  // delay(1000);&lt;br /&gt;
#endif // SS_Dumper&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tinker</name></author>
		
	</entry>
</feed>