commit c1c0a4eb5e66940c8e36cbb66167aa554b01ab07
Author: Jimmy <git@jimmy.nz>
Date:   Sat Nov 20 11:46:48 2021 +1300

    Inital commit

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..89cc49c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.pio
+.vscode/.browse.c_cpp.db*
+.vscode/c_cpp_properties.json
+.vscode/launch.json
+.vscode/ipch
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..0f0d740
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,7 @@
+{
+    // See http://go.microsoft.com/fwlink/?LinkId=827846
+    // for the documentation about the extensions.json format
+    "recommendations": [
+        "platformio.platformio-ide"
+    ]
+}
diff --git a/include/README b/include/README
new file mode 100644
index 0000000..194dcd4
--- /dev/null
+++ b/include/README
@@ -0,0 +1,39 @@
+
+This directory is intended for project header files.
+
+A header file is a file containing C declarations and macro definitions
+to be shared between several project source files. You request the use of a
+header file in your project source file (C, C++, etc) located in `src` folder
+by including it, with the C preprocessing directive `#include'.
+
+```src/main.c
+
+#include "header.h"
+
+int main (void)
+{
+ ...
+}
+```
+
+Including a header file produces the same results as copying the header file
+into each source file that needs it. Such copying would be time-consuming
+and error-prone. With a header file, the related declarations appear
+in only one place. If they need to be changed, they can be changed in one
+place, and programs that include the header file will automatically use the
+new version when next recompiled. The header file eliminates the labor of
+finding and changing all the copies as well as the risk that a failure to
+find one copy will result in inconsistencies within a program.
+
+In C, the usual convention is to give header files names that end with `.h'.
+It is most portable to use only letters, digits, dashes, and underscores in
+header file names, and at most one dot.
+
+Read more about using header files in official GCC documentation:
+
+* Include Syntax
+* Include Operation
+* Once-Only Headers
+* Computed Includes
+
+https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/lib/README b/lib/README
new file mode 100644
index 0000000..6debab1
--- /dev/null
+++ b/lib/README
@@ -0,0 +1,46 @@
+
+This directory is intended for project specific (private) libraries.
+PlatformIO will compile them to static libraries and link into executable file.
+
+The source code of each library should be placed in a an own separate directory
+("lib/your_library_name/[here are source files]").
+
+For example, see a structure of the following two libraries `Foo` and `Bar`:
+
+|--lib
+|  |
+|  |--Bar
+|  |  |--docs
+|  |  |--examples
+|  |  |--src
+|  |     |- Bar.c
+|  |     |- Bar.h
+|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
+|  |
+|  |--Foo
+|  |  |- Foo.c
+|  |  |- Foo.h
+|  |
+|  |- README --> THIS FILE
+|
+|- platformio.ini
+|--src
+   |- main.c
+
+and a contents of `src/main.c`:
+```
+#include <Foo.h>
+#include <Bar.h>
+
+int main (void)
+{
+  ...
+}
+
+```
+
+PlatformIO Library Dependency Finder will find automatically dependent
+libraries scanning project source files.
+
+More information about PlatformIO Library Dependency Finder
+- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..59bc845
--- /dev/null
+++ b/main.py
@@ -0,0 +1,82 @@
+from machine import Pin
+from machine import PWM
+from time import sleep
+
+class Motor:
+    def __init__(self, dirpin, speedpin):
+        self.dirpin = Pin(dirpin, Pin.OUT)
+        self.speedpin = PWM(Pin(speedpin))
+        print(self.speedpin.freq(50))
+        print(self.speedpin.duty())
+    
+    def off(self):
+        self.dirpin.off()
+        self.speedpin.duty(0)
+        
+    def forward(self, speed):
+        self.dirpin.off()
+        self.speedpin.duty(speed)
+        
+    def reverse(self, speed):
+        self.dirpin.on()
+        self.speedpin.duty(1023-speed)
+        
+    
+sensorpins = [15, 2, 4, 16, 17, 5, 18]
+sensors = []
+
+for i, pin in enumerate(sensorpins):
+    print(pin)
+    sensors.append(Pin(pin, Pin.IN))
+    print(sensors[i])
+
+left = Motor(1, 3)
+right = Motor(22, 23)
+
+left.off()
+right.off()
+
+#left.forward(512)
+#right.reverse(512)
+
+print("Started")
+#left.off()
+#right.on()
+
+try:
+    # while True:
+    #     if sensors[0].value() == 1:
+    #         print("Left")
+    #         left.off()
+    #         right.forward(400)
+    #     if sensors[1].value() == 1:
+    #         left.forward(300)
+    #         right.forward(600)
+        
+    #     if sensors[2].value() == 1:
+    #         left.forward(400)
+    #         right.forward(800)
+        
+    #     if sensors[3].value() == 1:
+    #         left.forward(800)
+    #         right.forward(800)
+    #         print("Forward")
+        
+    #     if sensors[4].value() == 1:
+    #         left.forward(800)
+    #         right.forward(400)
+        
+    #     if sensors[5].value() == 1:
+    #         left.forward(600)
+    #         right.forward(300)
+
+    #     if sensors[6].value() == 1:
+    #         print("Right")
+    #         left.forward(400)
+    #         right.off()
+        
+    pass
+finally:
+    left.off()
+    right.off()
+    
diff --git a/motor.py b/motor.py
new file mode 100644
index 0000000..15b57fd
--- /dev/null
+++ b/motor.py
@@ -0,0 +1,34 @@
+from machine import Pin
+from machine import PWM
+
+
+class Motor:
+    def __init__(self, dirpin, speedpin):
+        self.dirpin = Pin(dirpin, Pin.OUT)
+        self.speedpin = PWM(Pin(speedpin))
+        
+    def stop(self):
+        self.dirpin.off()
+        self.speedpin.duty(0)
+        
+    def forward(self, speed):
+        self.dirpin.off()
+        self.speedpin.duty(speed)
+    
+    def backward(self, speed):
+        self.dirpin.on()
+        self.speedpin.duty(1023-speed)
+    
+    
+if __name__ == "__main__":
+    left = Motor(26, 25)
+    right = Motor(32, 33)
+  
+    left.forward(2000)
+    right.forward(2000)
+    try:
+        while True:
+            pass
+    finally:
+       left.stop()
+       right.stop()
\ No newline at end of file
diff --git a/platformio.ini b/platformio.ini
new file mode 100644
index 0000000..c4b493e
--- /dev/null
+++ b/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:esp32doit-devkit-v1]
+platform = espressif32
+board = esp32doit-devkit-v1
+framework = arduino
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..4668534
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,76 @@
+#include <Arduino.h>
+#include "motor.h"
+
+char sensorpins[] = {13, 14, 27, 26, 25, 33, 32};
+int values[7];
+int average;
+int threshold = 500;
+
+Motor left(22, 23, 0);
+Motor right(19, 21, 1);
+void setup() {
+  // put your setup code here, to run once:
+  Serial.begin(9600);
+  // pinMode(22, OUTPUT);
+  // pinMode(23, OUTPUT);
+  // pinMode(19, OUTPUT);
+  // pinMode(21, OUTPUT);
+  // digitalWrite(22, LOW);
+  // digitalWrite(23, LOW);
+  // digitalWrite(19, LOW);
+  // digitalWrite(21, LOW);
+  left.forward(255);
+  right.forward(255);
+}
+
+void loop() {
+  // put your main code here, to run repeatedly:
+  static int leftspeed = 0;
+  static int rightspeed = 0;
+  for(int i=0;i<7;i++) {
+    values[i] = analogRead(sensorpins[i]);  
+    average += values[i];
+    average >>= 1;
+    //Serial.printf("%i ", values[i]);
+    if(values[i] > average + threshold ) {
+      Serial.print(" 1 ");
+    } else {
+      Serial.print(" 0 ");
+    }
+  }
+
+  // if(values[0] > average + threshold) {
+  //   right.forward(63);
+  //   left.forward(0);
+  // }
+  // // if(values[1] > average + threshold) {
+  // //   right.forward(255);
+  // //   left.forward(63);
+  // // }
+  // // if(values[2] > average + threshold) {
+  // //   right.forward(255);
+  // //   left.forward(127);
+  // // }
+  // if(values[3] > average + threshold) {
+  //   left.forward(63);
+  //   right.forward(63);
+  // }
+  // // if(values[4] > average + threshold) {
+  // //   left.forward(63);
+  // //   right.forward(32);
+  // // }
+  // // if(values[5] > average + threshold) {
+  // //   left.forward();
+  // //   right.forward(63);
+  // // } 
+  // if(values[6] > average + threshold) {
+  //   left.forward(63);
+  //   right.forward(0);
+  // }
+
+  
+  Serial.printf("\r");
+  //delay(1000);
+ 
+  
+} 
diff --git a/src/motor.cpp b/src/motor.cpp
new file mode 100644
index 0000000..ae40c15
--- /dev/null
+++ b/src/motor.cpp
@@ -0,0 +1,24 @@
+#include "motor.h"
+
+#include <Arduino.h>
+
+Motor::Motor(int dir, int speed, int chanel) {
+    this->dirpin = dir;
+    this->speedpin = speed;
+    this->channel = chanel;
+    ledcSetup(chanel, 500, 8);
+    ledcAttachPin(speed, chanel);
+    pinMode(dir, OUTPUT);
+    digitalWrite(dirpin, LOW);
+}
+
+void Motor::forward(int speed) {
+   digitalWrite(this->dirpin, LOW);
+   ledcWrite(this->channel, speed);
+}
+
+void Motor::reverse(int speed) {
+    digitalWrite(this->dirpin, HIGH);
+    ledcWrite(this->channel, 255-speed);
+}
+
diff --git a/src/motor.h b/src/motor.h
new file mode 100644
index 0000000..09618a2
--- /dev/null
+++ b/src/motor.h
@@ -0,0 +1,9 @@
+#pragma once
+
+class Motor {
+    int dirpin, speedpin, channel;
+    public:
+    Motor(int, int, int);
+    void forward(int speed);
+    void reverse(int speed);
+};
\ No newline at end of file
diff --git a/test/README b/test/README
new file mode 100644
index 0000000..b94d089
--- /dev/null
+++ b/test/README
@@ -0,0 +1,11 @@
+
+This directory is intended for PlatformIO Unit Testing and project tests.
+
+Unit Testing is a software testing method by which individual units of
+source code, sets of one or more MCU program modules together with associated
+control data, usage procedures, and operating procedures, are tested to
+determine whether they are fit for use. Unit testing finds problems early
+in the development cycle.
+
+More information about PlatformIO Unit Testing:
+- https://docs.platformio.org/page/plus/unit-testing.html