diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b25c15b81fae06e1c55946ac6270bfdb293870e8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/ansible/playbooks/lists.yml b/ansible/playbooks/lists.yml
index fa4618e0a8df32d8e73c877d6f7cec9586e370b0..6731153893e3da3fcfed16b2836d0f3b96e5b2cd 100644
--- a/ansible/playbooks/lists.yml
+++ b/ansible/playbooks/lists.yml
@@ -3,5 +3,6 @@ rpi-swlist:
   - cowsay
   - openssh-server
   - minicom
+  - python3-serial
 
   
diff --git a/ansible/playbooks/platform-io.sh b/ansible/playbooks/platform-io.sh
new file mode 100644
index 0000000000000000000000000000000000000000..d319f53328a99d2e801f034d90dc4320b67a1023
--- /dev/null
+++ b/ansible/playbooks/platform-io.sh
@@ -0,0 +1,6 @@
+python3 -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/develop/scripts/get-platformio.py)"
+
+# add to path /home/karol/.platformio/penv/bin
+
+pio lib install VariableTimedAction
+pio run -e uno -t upload
diff --git a/arduino/Multiloop_skeleton_pio/platformio.ini b/arduino/Multiloop_skeleton_pio/platformio.ini
new file mode 100644
index 0000000000000000000000000000000000000000..7568b6b5fce4e56b1c355ae870a23ee2aa27c0e6
--- /dev/null
+++ b/arduino/Multiloop_skeleton_pio/platformio.ini
@@ -0,0 +1,25 @@
+
+[env:uno]
+platform = atmelavr
+framework = arduino
+board = uno
+
+[env:mkrwifi1010]
+platform = atmelsam
+framework = arduino
+board = mkrwifi1010
+
+[env:mkrvidor4000]
+platform = atmelsam
+framework = arduino
+board = mkrvidor4000
+
+[env:featheresp32]
+platform = espressif32
+framework = arduino
+board = featheresp32
+
+[env:nodemcu-32s]
+platform = espressif32
+framework = arduino
+board = nodemcu-32s
diff --git a/arduino/Multiloop_skeleton_pio/src/Multiloop_skeleton.ino b/arduino/Multiloop_skeleton_pio/src/Multiloop_skeleton.ino
new file mode 100644
index 0000000000000000000000000000000000000000..a35505a9ef76468143af94e5002a222da92a2892
--- /dev/null
+++ b/arduino/Multiloop_skeleton_pio/src/Multiloop_skeleton.ino
@@ -0,0 +1,78 @@
+// Multi-loops skeleton
+// Description: Shows 3 loops operating in "parallel" reading/writing a global variable
+// Karol Hennessy
+// 2020-03-29
+
+#include <VariableTimedAction.h>
+
+// global variables
+static int globalcnt = 0;
+
+
+
+class SafetyAlarmLoop : public VariableTimedAction
+{
+  private:
+    int cnt = 0; 
+    unsigned long run()
+    {
+      cnt++;
+      Serial.println("SA "+ String(globalcnt));
+      return 0;  
+    }
+  public:
+    int getCnt()
+    {
+      return cnt;  
+    }
+} safetyalarmloop ; 
+
+class BreathingLoop : public VariableTimedAction
+{
+  private:
+    int cnt = 0; 
+    unsigned long run()
+    {
+      cnt++;
+      Serial.println("BR "+ String(cnt));
+      return 0;  
+    }
+  public:
+    int getCnt()
+    {
+      return cnt;  
+    }
+    
+} breathingloop; 
+
+class UILoop : public VariableTimedAction
+{ 
+  private:
+    //int cnt = 0; 
+    unsigned long run()
+    {
+      globalcnt++;
+      Serial.println("UI "+ String(globalcnt));
+      return 0;  
+    }
+  public:
+   /* int getCnt()
+    {
+      return cnt;  
+    }*/
+  
+} uiloop;
+
+
+void setup() {
+  Serial.begin(9600);
+  // note - order is not guaranteed if they all run on the same "cycle"
+  safetyalarmloop.start(1000);
+  //breathingloop.start(500);
+  uiloop.start(1000);
+}
+
+void loop() {
+  // put your main code here, to run repeatedly:
+  VariableTimedAction::updateActions();
+}
diff --git a/arduino/breathing_loop_only/.gitignore b/arduino/breathing_loop_only/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..89cc49cbd652508924b868ea609fa8f6b758ec56
--- /dev/null
+++ b/arduino/breathing_loop_only/.gitignore
@@ -0,0 +1,5 @@
+.pio
+.vscode/.browse.c_cpp.db*
+.vscode/c_cpp_properties.json
+.vscode/launch.json
+.vscode/ipch
diff --git a/arduino/breathing_loop_only/platformio.ini b/arduino/breathing_loop_only/platformio.ini
new file mode 100644
index 0000000000000000000000000000000000000000..ea23b772d9dad2e6acc33c365dd89d08fa7888a7
--- /dev/null
+++ b/arduino/breathing_loop_only/platformio.ini
@@ -0,0 +1,14 @@
+; PlatformIO Project Configuration File
+;
+;   Build options: build flags, source filter
+;   Upload options: custom upload port, speed and extra flags
+;   Library options: dependencies, extra library storages
+;   Advanced options: extra scripting
+;
+; Please visit documentation for the other options and examples
+; https://docs.platformio.org/page/projectconf.html
+
+[env:uno]
+platform = atmelavr
+board = uno
+framework = arduino
diff --git a/arduino/breathing_loop_only/src/main.cpp b/arduino/breathing_loop_only/src/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2cbcf393262c0aa7637315f764b98784d29a51f0
--- /dev/null
+++ b/arduino/breathing_loop_only/src/main.cpp
@@ -0,0 +1,36 @@
+#include <Arduino.h>
+
+// arduino uno
+    // pwm pins
+const int pin_valve_in       = 11;
+const int pin_valve_out      = 6;
+const int pin_valve_scavenge = 5;
+
+    // adcs
+const int pin_p_supply       = A0;
+const int pin_p_regulated    = A1;
+const int pin_p_buffer       = A2;
+const int pin_p_inhale       = A3;
+const int pin_p_exhale       = A4;
+
+    // leds
+const int pin_led_0          = 0;
+const int pin_led_1          = 0;
+const int pin_led_2          = 0;
+
+    // buzzer
+const int pin_buzzer         = 9;
+
+
+void setup() {
+  Serial.begin(9600);
+}
+
+void loop() {
+  // put your main code here, to run repeatedly:
+  Serial.println("Breathing Only");
+  delay(5000);
+
+  // buzzer 
+  // tone(pin, freq (Hz), duration);
+}
\ No newline at end of file