<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.lvl1.org/index.php?action=history&amp;feed=atom&amp;title=Pseudo-Medical_Monitor_Code_ControlPanel_STUFF</id>
	<title>Pseudo-Medical Monitor Code ControlPanel STUFF - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.lvl1.org/index.php?action=history&amp;feed=atom&amp;title=Pseudo-Medical_Monitor_Code_ControlPanel_STUFF"/>
	<link rel="alternate" type="text/html" href="http://wiki.lvl1.org/index.php?title=Pseudo-Medical_Monitor_Code_ControlPanel_STUFF&amp;action=history"/>
	<updated>2026-11-08T18:24:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>http://wiki.lvl1.org/index.php?title=Pseudo-Medical_Monitor_Code_ControlPanel_STUFF&amp;diff=14925&amp;oldid=prev</id>
		<title>Unknown user: Created page with &quot; &lt;nowiki&gt;  #define ControlPanel_INT_PIN 2 #define ControlPanel_I2C_ADDR 0x38  class Dual_Encoder_Class {   private:     static volatile uint8_t pcf_switch_status;   static vol...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.lvl1.org/index.php?title=Pseudo-Medical_Monitor_Code_ControlPanel_STUFF&amp;diff=14925&amp;oldid=prev"/>
		<updated>2021-12-14T21:05:31Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; &amp;lt;nowiki&amp;gt;  #define ControlPanel_INT_PIN 2 #define ControlPanel_I2C_ADDR 0x38  class Dual_Encoder_Class {   private:     static volatile uint8_t pcf_switch_status;   static vol...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define ControlPanel_INT_PIN 2&lt;br /&gt;
#define ControlPanel_I2C_ADDR 0x38&lt;br /&gt;
&lt;br /&gt;
class Dual_Encoder_Class&lt;br /&gt;
{&lt;br /&gt;
  private:  &lt;br /&gt;
  static volatile uint8_t pcf_switch_status;&lt;br /&gt;
  static volatile uint8_t pcf_present_value;&lt;br /&gt;
  static volatile int pcf_encoder_1;&lt;br /&gt;
  static volatile int pcf_encoder_2;&lt;br /&gt;
  static volatile bool pcf_bypass_flag;&lt;br /&gt;
  &lt;br /&gt;
  static PCF pcf_device;&lt;br /&gt;
  int i2c_address;    &lt;br /&gt;
&lt;br /&gt;
  static void embedded_check()&lt;br /&gt;
    {&lt;br /&gt;
      if (pcf_bypass_flag)&lt;br /&gt;
        return;&lt;br /&gt;
        &lt;br /&gt;
      uint8_t encoder_1 = 0, encoder_2 = 0;&lt;br /&gt;
&lt;br /&gt;
      pcf_present_value = pcf_device.read();&lt;br /&gt;
&lt;br /&gt;
      encoder_1 = pcf_present_value &amp;amp; 0b00000011;&lt;br /&gt;
      encoder_2 = pcf_present_value &amp;amp; 0b00001100;&lt;br /&gt;
      encoder_2 = encoder_2 &amp;gt;&amp;gt; 2;&lt;br /&gt;
      encoder_1 = encoder_1 | ((pcf_previous_value &amp;amp; 0b00000011) &amp;lt;&amp;lt; 2);&lt;br /&gt;
      encoder_2 = encoder_2 | (pcf_previous_value &amp;amp; 0b00001100);&lt;br /&gt;
&lt;br /&gt;
      pcf_encoder_1 = 0;&lt;br /&gt;
      switch (encoder_1)&lt;br /&gt;
        {&lt;br /&gt;
          case 0b0001:  // fall through..&lt;br /&gt;
          case 0b0111:&lt;br /&gt;
          case 0b1110:&lt;br /&gt;
          case 0b1000:&lt;br /&gt;
            pcf_encoder_1 = -1;&lt;br /&gt;
            break;&lt;br /&gt;
          case 0b0010:&lt;br /&gt;
          case 0b0100:&lt;br /&gt;
          case 0b1101:&lt;br /&gt;
          case 0b1011:&lt;br /&gt;
            pcf_encoder_1 = 1;&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      pcf_encoder_2 = 0;&lt;br /&gt;
      switch (encoder_2)&lt;br /&gt;
        {&lt;br /&gt;
          case 0b0001:  // fall through..&lt;br /&gt;
          case 0b0111:&lt;br /&gt;
          case 0b1110:&lt;br /&gt;
          case 0b1000:&lt;br /&gt;
            pcf_encoder_2 = -1;&lt;br /&gt;
            break;&lt;br /&gt;
          case 0b0010:&lt;br /&gt;
          case 0b0100:&lt;br /&gt;
          case 0b1101:&lt;br /&gt;
          case 0b1011:&lt;br /&gt;
            pcf_encoder_2 = 1;&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
      pcf_switch_status = 0;&lt;br /&gt;
      pcf_switch_status = pcf_present_value &amp;amp; 0b00110000;&lt;br /&gt;
      pcf_switch_status = (pcf_switch_status ^ 0b00110000) &amp;gt;&amp;gt; 4;&lt;br /&gt;
      pcf_previous_value = pcf_present_value;      &lt;br /&gt;
      pcf_event = true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  public:&lt;br /&gt;
  static volatile bool pcf_event;&lt;br /&gt;
  static volatile uint8_t pcf_previous_value;&lt;br /&gt;
    &lt;br /&gt;
  int encoder_A_Dir(void)    &lt;br /&gt;
    {&lt;br /&gt;
      int return_value = pcf_encoder_1;&lt;br /&gt;
      pcf_encoder_1 = 0;&lt;br /&gt;
      return(return_value);&lt;br /&gt;
    }&lt;br /&gt;
  int encoder_B_Dir(void)    &lt;br /&gt;
    {&lt;br /&gt;
      int return_value = pcf_encoder_2;&lt;br /&gt;
      pcf_encoder_2 = 0;&lt;br /&gt;
      return(return_value);&lt;br /&gt;
    }&lt;br /&gt;
  bool encoder_A_Switch(void)&lt;br /&gt;
    {&lt;br /&gt;
      bool return_value = pcf_switch_status &amp;amp; 0b01;&lt;br /&gt;
      pcf_switch_status = pcf_switch_status &amp;amp; 0b10;&lt;br /&gt;
      return(return_value);      &lt;br /&gt;
    }&lt;br /&gt;
  bool encoder_B_Switch(void)&lt;br /&gt;
    {&lt;br /&gt;
      bool return_value = (pcf_switch_status &amp;amp; 0b10) &amp;gt;&amp;gt; 1;&lt;br /&gt;
      pcf_switch_status = pcf_switch_status &amp;amp; 0b01;&lt;br /&gt;
      return(return_value);      &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  void begin(int i2cAddr)&lt;br /&gt;
    {  &lt;br /&gt;
      pcf_device.setup(i2cAddr); &lt;br /&gt;
      i2c_address = i2cAddr;&lt;br /&gt;
      pinMode(ControlPanel_INT_PIN, INPUT_PULLUP);    &lt;br /&gt;
      attachInterrupt(digitalPinToInterrupt(ControlPanel_INT_PIN), embedded_check, FALLING);    &lt;br /&gt;
      reset_All();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  void reset_All()&lt;br /&gt;
    {&lt;br /&gt;
      pcf_device.write(0b11111111); // Turns all port HIGH      &lt;br /&gt;
      pcf_encoder_1 = 0;&lt;br /&gt;
      pcf_encoder_2 = 0;  &lt;br /&gt;
      pcf_switch_status = 0;   &lt;br /&gt;
      pcf_event = false;   &lt;br /&gt;
      pcf_bypass_flag = false;&lt;br /&gt;
      Serial.println(&amp;quot;Hit&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  static void LED_Off(int led_number)&lt;br /&gt;
    {&lt;br /&gt;
      uint8_t data_bin = pcf_previous_value;&lt;br /&gt;
      pcf_bypass_flag = true;&lt;br /&gt;
      switch(led_number)&lt;br /&gt;
        {&lt;br /&gt;
          case 1:&lt;br /&gt;
            data_bin = data_bin | 0b10000000;&lt;br /&gt;
            pcf_previous_value = data_bin;&lt;br /&gt;
            data_bin = data_bin | 0b00111111;&lt;br /&gt;
            pcf_device.write(data_bin);&lt;br /&gt;
            break;&lt;br /&gt;
          case 2:&lt;br /&gt;
            data_bin = data_bin | 0b01000000;&lt;br /&gt;
            pcf_previous_value = data_bin;&lt;br /&gt;
            data_bin = data_bin | 0b00111111;&lt;br /&gt;
            pcf_device.write(data_bin);            &lt;br /&gt;
            break;&lt;br /&gt;
        }          &lt;br /&gt;
      pcf_bypass_flag = false;  &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  static void LED_On(int led_number)&lt;br /&gt;
    {&lt;br /&gt;
      uint8_t data_bin = pcf_previous_value;&lt;br /&gt;
      pcf_bypass_flag = true;      &lt;br /&gt;
      switch(led_number)&lt;br /&gt;
        {&lt;br /&gt;
          case 1:&lt;br /&gt;
            data_bin = data_bin &amp;amp; 0b01111111;&lt;br /&gt;
            pcf_previous_value = data_bin;&lt;br /&gt;
            data_bin = data_bin | 0b00111111;&lt;br /&gt;
            pcf_device.write(data_bin);&lt;br /&gt;
            break;&lt;br /&gt;
          case 2:&lt;br /&gt;
            data_bin = data_bin &amp;amp; 0b10111111;&lt;br /&gt;
            pcf_previous_value = data_bin;&lt;br /&gt;
            data_bin = data_bin | 0b00111111;&lt;br /&gt;
            pcf_device.write(data_bin);&lt;br /&gt;
            break;&lt;br /&gt;
        }          &lt;br /&gt;
      pcf_bypass_flag = false;&lt;br /&gt;
    }    &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
volatile uint8_t Dual_Encoder_Class::pcf_switch_status;&lt;br /&gt;
volatile uint8_t Dual_Encoder_Class::pcf_previous_value;&lt;br /&gt;
volatile uint8_t Dual_Encoder_Class::pcf_present_value;&lt;br /&gt;
volatile int Dual_Encoder_Class::pcf_encoder_1;&lt;br /&gt;
volatile int Dual_Encoder_Class::pcf_encoder_2;&lt;br /&gt;
volatile bool Dual_Encoder_Class::pcf_event;&lt;br /&gt;
volatile bool Dual_Encoder_Class::pcf_bypass_flag;&lt;br /&gt;
PCF Dual_Encoder_Class::pcf_device;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dual_Encoder_Class Controls;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
bool setup_ControlPanel()&lt;br /&gt;
{&lt;br /&gt;
  Controls.begin(ControlPanel_I2C_ADDR); &lt;br /&gt;
  &lt;br /&gt;
  return(true);&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Pseudo-Medical_Monitor_Code#Custom_Includes]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>