From f1bf7be6ff010c2bc088a52fa486a962314895c0 Mon Sep 17 00:00:00 2001
From: 42loop <ulf.freyhoff@hfbk-hamburg.de>
Date: Thu, 3 Mar 2022 16:51:22 +0100
Subject: [PATCH] clean up, added speed slider & status feedback from machine

---
 data/index.html   | 30 +++++++--------
 rolli_websock.ino | 94 ++++++++++++++++++++++++++++-------------------
 2 files changed, 71 insertions(+), 53 deletions(-)

diff --git a/data/index.html b/data/index.html
index a6d7a9d..c820a2d 100644
--- a/data/index.html
+++ b/data/index.html
@@ -33,7 +33,9 @@
       </div>
 
   </main>
+  <br>
 
+<p><span id="status">0</span></p>
 
 
 <script>
@@ -61,21 +63,14 @@
     }
 
   var bgcolor = [
-                'rgba(255, 99, 132, 0.2)',
                 'rgba(54, 162, 235, 0.2)',
-                'rgba(255, 206, 86, 0.2)',
-                'rgba(75, 192, 192, 0.2)',
-                'rgba(153, 102, 255, 0.2)',
-                'rgba(255, 159, 64, 0.2)'
-            ]
+                'rgba(255, 99, 132, 0.2)',
+
+           ]
 
   var bordercolor = [
-                'rgba(255, 99, 132, 1)',
                 'rgba(54, 162, 235, 1)',
-                'rgba(255, 206, 86, 1)',
-                'rgba(75, 192, 192, 1)',
-                'rgba(153, 102, 255, 1)',
-                'rgba(255, 159, 64, 1)'
+                'rgba(255, 99, 132, 1)',
             ]
 
   var lschartoptions=Object.create(defaultoptions);
@@ -111,7 +106,7 @@
 
 
 
-  lschart.config.options.scales.y.max=1000;
+  lschart.config.options.scales.y.max=4000;
   lschart.update();
 
 
@@ -138,7 +133,7 @@
     },
     options: rschartoptions
   });
-  rschart.config.options.scales.y.max=1000;
+  rschart.config.options.scales.y.max=4000;
   rschart.update();
 
   ctx = document.getElementById('rightpowerchart').getContext('2d');
@@ -218,12 +213,17 @@
   function onMessage(event) {
     var state;
     let data = JSON.parse(event.data);
-
+console.log(data);
     var x = (new Date()).getTime(),
           ls = parseFloat(data.leftsens),
           rs = parseFloat(data.rightsens),
           lp = parseFloat(data.leftpower),
-          rp = parseFloat(data.rightpower);
+          rp = parseFloat(data.rightpower),
+          status = data.status;
+
+    var o = document.getElementById("status");
+    o.innerHTML = status;
+
 
     if (lschart.config.data.labels.length>50)
     {
diff --git a/rolli_websock.ino b/rolli_websock.ino
index f8dd0d6..a78c461 100644
--- a/rolli_websock.ino
+++ b/rolli_websock.ino
@@ -1,5 +1,7 @@
 // use websocket
 
+//#define NOROLLI
+
 #include "credentials.h"
 
 const char* host = "rolli";
@@ -13,6 +15,7 @@ const int rpowerlimit=1000;
 const int ldistlimit=400;
 const int rdistlimit=400;
 
+char rollistat[100]="Ok\0";
 
 char cmd[20];
 /*
@@ -77,6 +80,8 @@ const int r_step=1;
 
 volatile int tcount=0;
 
+volatile byte lscount=0;
+volatile byte rscount=0;
    
 
 //pins:
@@ -106,7 +111,7 @@ Adafruit_MPU6050 mpu;
 Adafruit_VL53L0X sensors[] = {Adafruit_VL53L0X(),Adafruit_VL53L0X()};
 const int xshutpin[]={32,33};
 
-volatile int dist[]={0,0};
+volatile int dist[]={450,450};
 
 const int freq = 5000; 
 const int resolution = 8;
@@ -157,13 +162,11 @@ void IRAM_ATTR TimerHandler0(void)
 void sensortask( void * parameter) {
 for(;;){
 
+
   powerl=analogRead(power_lpin);
   powerr=analogRead(power_rpin);
-  
-  log_to_websocket();
-  delay(250);
-continue;
-  
+
+#ifndef NOROLLI
   mpu.getEvent(&a, &g, &temp);
 
   VL53L0X_RangingMeasurementData_t measure;
@@ -177,8 +180,13 @@ continue;
     //Serial.println(" out of range ");
   }
   }
-
-  Serial.print("LP: ");
+#else
+  dist[0]=random(350,800);
+  dist[1]=random(350,800);
+  
+#endif
+  
+/*  Serial.print("LP: ");
   Serial.print(powerl);Serial.print("\t");
   Serial.print("RP: ");
   Serial.print(powerr);Serial.print("\t");
@@ -194,9 +202,8 @@ continue;
   Serial.print(", Y: ");
   Serial.print(a.acceleration.y);
   Serial.println();
-
-
-
+*/
+  
   /*
   X - vorne / hinten
   Y - links /rechts
@@ -205,32 +212,45 @@ continue;
 
   ledstate=!ledstate;
   digitalWrite(ledpin,ledstate);
-  
 
-  if (dist[0]<ldistlimit) {Serial.println("LEFT SENSOR!, turn right");turnright();}
-  if (dist[1]<rdistlimit) {Serial.println("RIGHT SENSOR!, turn left");turnleft();}
+  int action=0;
+
+  if (dist[0]<ldistlimit) lscount+=1;
+  if (dist[1]<rdistlimit) rscount+=1;
+
+  if (lscount==2) {lscount=0;Serial.println("LEFT SENSOR!, turn right");strcpy(rollistat,"left sensor, turning right");action=1;}
+  if (rscount==2) {rscount=0;Serial.println("RIGHT SENSOR!, turn left");strcpy(rollistat,"right sensor, turning left");action=2;}
     
   if ((powerl>lpowerlimit) and (powerr>rpowerlimit)) 
     {Serial.println("collision");
-     turnaround();}
-
+    strcpy(rollistat,"frontal collision, turning around");
+     action=3;
+    }
   else {
     if (powerl>lpowerlimit) 
       {Serial.println("LEFT POWER!, turn right");
-       turnright();}
+      strcpy(rollistat,"left power, turning right");
+       action=1;}
     if (powerr>rpowerlimit) 
       {Serial.println("RIGHT POWER!, turn left");
-       turnleft();}
+      strcpy(rollistat,"right power, turning left");
+       action=2;}
     
     }
-  
-  mytime+=1;
-  if (mytime==4)
-  {
-    //log_to_websocket();
-    mytime=0;
-  }
 
+    if (action==0) strcpy(rollistat,"Ok");
+    else digitalWrite(ledpin,HIGH);
+
+//notify first
+    wsnotifyClients();
+
+//actions with delays:
+    switch (action)
+    {
+      case 1:turnright();break;
+      case 2:turnleft();break;
+      case 3:turnaround();break;
+    }
   
   delay(250);
   
@@ -238,20 +258,14 @@ continue;
    
 }
 
-void log_to_websocket()
-{
-  //Serial.println("notify...");
-  wsnotifyClients();
-}
-
 void wsnotifyClients() {
-    char buffer[200];
-    //limit dist to 2048:
-    
-    sprintf(buffer, "{\"leftsens\":\"%i\",\"rightsens\":\"%i\",\"leftpower\":\"%i\",\"rightpower\":\"%i\"}", random(0,100),random(0,100),random(0,100),random(0,100));
+    char buffer[300];
+    sprintf(buffer, "{\"leftsens\":\"%i\",\"rightsens\":\"%i\",\"leftpower\":\"%i\",\"rightpower\":\"%i\",\"status\":\"%s\"}", dist[0],dist[1],powerl,powerr,rollistat);
+    Serial.println(buffer);
     ws.textAll(buffer);
 }
 
+
 void handleWebSocketMessage(void *arg, uint8_t *data, size_t len) {
   AwsFrameInfo *info = (AwsFrameInfo*)arg;
   if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) {
@@ -402,9 +416,13 @@ void setup(void) {
   initWebSocket();
 
   //init i2c devices
-  
-  //setID();
-  //mpu_init();
+
+  #ifndef NOROLLI
+  setID();
+  mpu_init();
+  #else
+
+  #endif
 
   //scan i2c devices
   i2c_scanner();
-- 
GitLab