arkadiusz binder 5 年之前
父節點
當前提交
d000311fb9

+ 74 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__i2c.h

@@ -0,0 +1,74 @@
+#ifndef P5__I2C
+#define P5__I2C
+
+
+#include <Wire.h>
+#include <Adafruit_PWMServoDriver.h>
+
+
+//P5__TASK__CONFIG__NAME__INDEX_T P5__TASK__CONFIG__NAME__ATTRIBUTE__I2C__ADDRESS_A_V = 0x40 ; //TODO scan?
+//Adafruit_PWMServoDriver P5__I2C__DEVICE__PWM = Adafruit_PWMServoDriver(0x40, Wire);  //todo 
+
+
+//testing if exec from constext plain loop is avilable 
+ 
+bool P5__TASK__I2C(
+    P5__TASK__CONFIG_T* P5__TASK__CONFIG_A,
+    P5__TASK__CONFIG__INDEX__CURRENT_T &P5__TASK__CONFIG__INDEX__CURRENT_A ,
+     P5__TASK__CONFIG__INDEX__CURRENT__EXEC_T &P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A ,
+
+     P5__TASK__ATTR_T* P5__TASK__ATTR_A,
+     P5__TASK__ATTR__INDEX__CURRENT_T  &P5__TASK__ATTR__INDEX__CURRENT_A ,
+     P5__TASK__ATTR__INDEX__CURRENT__EXEC_T  &P5__TASK__ATTR__INDEX__CURRENT__EXEC_A ,
+     P5__LATENCY_TASK_EXEC_TIME_T &P5__LATENCY_TASK_EXEC_TIME_A
+    
+    ) {
+      
+      
+       P5__LIMITS_T P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_MIN_A = 0;
+        P5__LIMITS_T P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_MAX_A = 4096; //TODO ASSERTS
+        
+    
+        //#if defined(DEBUG__I2C) and DEBUG__I2C > 3
+         SPFT(TASK_I2C);
+       // #endif      
+        
+         //TODO SEKWENCJE PORTOW, co sciagnac 
+          P5__TASK__ATTR_INT_T  P5__TASK__CONFIG__NAME__ATTRIBUTE__I2C__ADDRESS_A_V ;
+            P5__TASK__CONFIG__NAME__ATTRIBUTE__I2C__ADDRESS_A_V = P5__TASK___ATTR (P5__TASK__CONFIG_A, P5__TASK__CONFIG__INDEX__CURRENT_A, P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_A,P5__TASK__ATTR__INDEX__CURRENT_A, P5__TASK__ATTR__INDEX__CURRENT__EXEC_A, P5__TASK__TYPE__ATTRIBUTE_A , P5__TASK__CONFIG__NAME__ATTRIBUTE__I2C__ADDRESS_A , P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_INT__UNDEF_A, P5__TASK__ATTR_ACCTION__REPLY_A ) ;
+            SPFT2(ATTRIBUTE_I2C__ADDRESS, P5__TASK__CONFIG__NAME__ATTRIBUTE__I2C__ADDRESS_A_V );
+            
+            
+            P5__TASK__ATTR_INT_T  P5__TASK__CONFIG__NAME__ATTRIBUTE__HARDWARE_PIN__NUMBER_A_V ;
+            P5__TASK__CONFIG__NAME__ATTRIBUTE__HARDWARE_PIN__NUMBER_A_V = P5__TASK___ATTR (P5__TASK__CONFIG_A, P5__TASK__CONFIG__INDEX__CURRENT_A, P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_A,P5__TASK__ATTR__INDEX__CURRENT_A, P5__TASK__ATTR__INDEX__CURRENT__EXEC_A, P5__TASK__TYPE__ATTRIBUTE_A , P5__TASK__CONFIG__NAME__ATTRIBUTE__HARDWARE_PIN__NUMBER_A , P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_INT__UNDEF_A, P5__TASK__ATTR_ACCTION__REPLY_A ) ; 
+            SPFT2(ATTRIBUTE_HARDWARE_PIN__NUMBER, P5__TASK__CONFIG__NAME__ATTRIBUTE__HARDWARE_PIN__NUMBER_A_V );
+
+           
+             
+             if(P5__TASK___ATTR (P5__TASK__CONFIG_A, P5__TASK__CONFIG__INDEX__CURRENT_A, P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_A,P5__TASK__ATTR__INDEX__CURRENT_A, P5__TASK__ATTR__INDEX__CURRENT__EXEC_A, P5__TASK__TYPE__ATTRIBUTE_A , P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A , P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_INT__UNDEF_A, P5__TASK__ATTR_ACCTION__IF_EXISTS_A ) ) {
+                    SPFT(TODO_ATTR__EXISTS);
+                 
+             } else { //todo if set for driver
+                  SPFT(TODO_ATTR__NOT_EXISTS);
+               static Adafruit_PWMServoDriver P5__I2C__DEVICE__PWM = Adafruit_PWMServoDriver(0x40, Wire);  //todo init somehow
+                P5__I2C__DEVICE__PWM.begin();
+                
+             }
+                //P5__TASK__ATTR_ACCTION__IF_EXISTS
+                //ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__IF_EXISTS
+               //P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__IF_EXISTS_A
+             
+            
+             
+             
+              P5__TASK__ATTR_INT_T  P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A_V ;
+              P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A_V = P5__TASK___ATTR (P5__TASK__CONFIG_A, P5__TASK__CONFIG__INDEX__CURRENT_A, P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_A,P5__TASK__ATTR__INDEX__CURRENT_A, P5__TASK__ATTR__INDEX__CURRENT__EXEC_A, P5__TASK__TYPE__ATTRIBUTE_A , P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A , P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_MAX_A / 2, P5__TASK__ATTR_ACCTION__SET__INIT_A ) ; //todo init val?
+              SPFT2(ATTRIBUTE_STATUS__OUTPUT__LEVEL,P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A_V);
+                    static Adafruit_PWMServoDriver P5__I2C__DEVICE__PWM = Adafruit_PWMServoDriver(0x40, Wire); 
+                    P5__I2C__DEVICE__PWM.setPWM(P5__TASK__CONFIG__NAME__ATTRIBUTE__HARDWARE_PIN__NUMBER_A_V, 0, P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A_V);
+
+
+    
+  }
+
+#endif

+ 9 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__i2c__loop.h

@@ -0,0 +1,9 @@
+
+
+if(P5__TASK__CONFIG_A[P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A ].P5__TASK__CONFIG__NAME__INDEX_A == P5__TASK__CONFIG__NAME__INDEX__I2C_A  ) {
+        SPFTL(TASK_p5__i2c__loop);
+        
+            P5__TASK__I2C(P5__TASK__CONFIG_A , P5__TASK__CONFIG__INDEX__CURRENT_A , P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A   ,
+            P5__TASK__ATTR_A, P5__TASK__ATTR__INDEX__CURRENT_A , P5__TASK__ATTR__INDEX__CURRENT__EXEC_A ,
+            P5__LATENCY_TASK_EXEC_TIME_A);
+}

+ 206 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__progmem.h

@@ -0,0 +1,206 @@
+
+//### Defines for Flash saved Text #############################################
+#define FPr(x);   Serial.print(FP(x));              // FlashPrint(FT)
+#define FPrL(x);  Serial.println(FP(x));            // FlasPrintLine(FT)
+#define SPFT(x);  Serial.print(FP(FT_##x));         // shorter version (ID)
+    #define SPFT2(x,y);  Serial.print(FP(FT_##x)); Serial.print("[");   Serial.print(y);   Serial.print("] ");         // shorter version (ID)
+
+#define SPFTL(x); Serial.println(FP(FT_##x));       // shorter version (ID)
+    #define SPFTL2(x,y);  Serial.println(); Serial.println(FP(FT_##x));  Serial.print("[");  Serial.print(y); Serial.print("] ");    // shorter version (ID)
+
+#define SFP(x);   Serial.print(FP(x));
+    
+    #define USPFT(x);  u8g2.print(FP(FT_##x));         // shorter version (ID)
+    #define USPFT2(x,y);  u8g2.print(FP(FT_##x));  u8g2.print(y);          // shorter version (ID)
+    //    #define USPFTL(x); u8g2.println(FP(FT_##x));       // shorter version (ID)
+    //    #define USPFTL2(x,y); u8g2.println(FP(FT_##x)); u8g2.print(y);       // shorter version (ID)
+    #define USFP(x);   u8g2.print(FP(x));
+    #define USFP2(x,y);   u8g2.print(FP(x));  u8g2.print(y);
+
+
+
+#define FT(x,y);  const char FT_##x[] PROGMEM = {y};// generate FlashText(ID,FT)
+#define FP(x)     (__FlashStringHelper*)(x)         // Helper
+//******************************************************************************
+
+//### Shortening standard Serial.Print F() #####################################
+#define SPr(x);   Serial.print(x);                  // short for Serial.print
+#define SPrL(x);  Serial.println(x);                // short for Serial.println
+#define SPrF(x);  SPr(F(x));                        // short for F-Macro Serial.print
+#define SPrLF(x); SPrL(F(x));                       // short for F-Macro Serial.println
+//******************************************************************************
+
+
+//### Shortening standard Serial.Print F() #####################################
+#define USPr(x);   u8g2.print(x);                  // short for Serial.print
+#define USPrL(x);  u8g2.print(x);                // short for Serial.println
+#define USPrF(x);  USPr(F(x));                        // short for F-Macro Serial.print
+#define USPrLF(x); USPrL(F(x));                       // short for F-Macro Serial.println
+//******************************************************************************
+
+
+//### Generate global Flash saved strings ######################################
+//FT(0,"Text 0");                                               // Flash Text FT_0
+//FT(1,"This is a global saved and Flash "
+ //    "saved Text!");                                          // FT_1
+//FT(2,"File: " __FILE__ " Date: " __DATE__ " Time: " __TIME__);// FT_2
+//FT(3,"***************************************************");  // FT_3
+//FT(B4,"*\t RS232 Menu\t\t\t\t  *");                            // FT_4
+//FT(5,"###################################################");  // FT_3
+
+FT(TASK_config__set__increment, "## T++" );
+FT(TASK_config__set, "## T+" );         
+
+FT(TASK_p5__task__loop__run, "## TX" );         
+
+FT(TASK_ATTR, " #@ ");         
+FT(TODO_ATTR__NOT_EXISTS, "NOT_EXISTS");         
+FT(TODO_ATTR__EXISTS, "EXISTS");         
+
+FT(TODO_ATTR__ERROR__LIMITS, " ERROR LIMIT ELEMENTS ");         
+FT(TODO_ATTR__ERROR__NOT_FOUND, " ERROR NOT FOUND ");         
+FT(TODO_ATTR__OK__SAVED, " OK SAVED ");         
+FT(TODO_ATTR__OK__SAVED__INIT, " OK SAVED_INI ");         
+
+
+FT(TASK_LOOP, " ###L1 ");         
+FT(TASK_LOOP_EXEC, " Lx");         
+
+FT(TASK_PWM," PWM ");         
+FT(TASK_SWING," SWING ");         
+FT(TASK_DISPLAY," DISPLAY ");         
+FT(TASK_I2C," I2C ");         
+FT(TASK_p5__i2c__loop, "I2C@L"); //todo         
+FT(TASK_p5__swing__loop, "SWING@L");
+
+FT(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX," i#");
+FT(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION,"[act]");
+FT(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__REPLY,"repl");
+FT(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__SET__INIT,"ini");
+FT(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__SET,"set");
+FT(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__IF_EXISTS,"if");
+
+FT(ATTRIBUTE__P5__TASK__TYPE__SEQUENCE__ARRAY__INDEX," #.");
+FT(ATTRIBUTE__P5__TASK__TYPE__CLASS," *");
+FT(ATTRIBUTE__P5__TASK__ATTR_INT,"=v");
+FT(ATTRIBUTE__P5__TASK__CONFIG__INDEX__CURRENT__EXEC,"x");
+FT(ATTRIBUTE__P5__TASK__CONFIG__INDEX__CURRENT,"i#");
+FT(ATTRIBUTE__P5__TASK__TYPE__ASSOC_A, "^");
+
+
+
+FT(ATTRIBUTE_DISPLAY__REFERENCE__CONFIG__INDEX__CURRENT,"[Ref]");
+FT(ATTRIBUTE_LIMITS__MAX, "[x<]");
+FT(ATTRIBUTE_LIMITS__MIN, "[x>]");         
+FT(ATTRIBUTE_HARDWARE_PIN__NUMBER,"[p#]");         
+FT(ATTRIBUTE_LIMITS__MAX__DELTA,"D[x-y<]");         
+FT(ATTRIBUTE_LIMITS__CURRENT__DELTA,"D=");         
+FT(ATTRIBUTE_I2C__ADDRESS, "@i2c");
+FT(ATTRIBUTE_DISPLAY__ASSIGNED_X_MIN, "%[x>=]");         
+FT(ATTRIBUTE_DISPLAY__ASSIGNED_X_MAX, "%[x<=]");         
+FT(ATTRIBUTE_DISPLAY__ASSIGNED_Y_MIN, "%[y>=]");         
+FT(ATTRIBUTE_DISPLAY__ASSIGNED_Y_MAX, "%[y<=]");      
+FT(ATTRIBUTE_LATENCY_TASK_EXEC_TIME, "£[");   
+FT(ATTRIBUTE_LATENCY_TASK_EXEC_TICKS, ".[");  
+FT(ATTRIBUTE_LATENCY_TASK_EXEC_DIFF_RESULT, ".|");         
+
+FT(ATTRIBUTE_STATUS__OUTPUT__LEVEL, ">V");         
+FT(ATTRIBUTE_SWING__FREQUENCY, "~");    
+
+
+
+//******************************************************************************
+
+
+
+//### Typedefs ################################################################
+typedef void(*pF)(void);                        // Pointer to void FCN(void)
+//*****************************************************************************
+
+
+/*
+
+#define CMD_CNT (sizeof(CmdAR)/sizeof(CmdAR[0])) // Number of Commands
+
+//### Define RS232-Command-Array ##############################################
+Commands CmdAR[] = {
+// cmd1,    cmd2,    callback, info
+{"TASK",   "t  ",   cTask,   "set Task Parameter (ID, Periode, Set, CNT, Offset)"},
+{"Set",    "s  ",   cTask,   "set Task Parameter (ID, Periode, Set, CNT, Offset)"},
+{"LCDBL",  "lcdb",  cLcdBL,  "set LCD BackLight (off/Auto-Off Periode)"          }
+};
+
+
+void cTask(){
+  SPrLF("cTask");
+}
+
+void cLcdBL(){
+  SPrLF("cLcdBL");
+}
+
+void printComands(){
+  SPrL();
+  //SPrLF("**************************************************");
+  SPFTL(3);
+  //SPrLF("*\tRS232 Command List\t\t\t *");
+  SPFTL(B4);
+  //SPrLF("**************************************************");
+  SPFTL(3);
+  SPrLF("Cmd1\t, Cmd2\t, Info (Parameter)");
+  for(byte i=0; i<CMD_CNT; i++){
+    SPrF(" ");
+    //SPr(FP(CmdAR[i].cmd1)); SPrF("\t, ");
+    SFP(CmdAR[i].cmd1); SPrF("\t, ");
+    SFP(CmdAR[i].cmd2); SPrF("\t, ");
+    SFP(CmdAR[i].info); 
+    SPrL();
+  }
+  SPrL();
+  //SPrLF("**************************************************");
+  SPFTL(3);
+  SPrLF("Type: < Command1/2, Val1, Val2, Val3, Val4, Val5");
+  SPrL();
+}
+
+
+//### Setup() #####################################################
+void setup() {
+  Serial.begin(230400);
+  SPrL();
+  Serial.println(F("Macro-Based, only single "
+                   "In-Function usable Flash saved Text."));
+  SPrLF("...the same, but shorter command ");
+
+  SPrL();                   // Newline
+  
+  FPrL(FT_0);               // Serial Print Line Flash saved Text
+  FPrL(FT_1);
+  SPFTL(2);                 // Shortest Version SerialPrintFlashText(ID)
+  SPFTL(5);
+  
+  
+}//void setup()
+//*****************************************************************
+
+
+
+//### Main loop() #################################################
+void loop(){
+
+  // reuse same string anywere in the Code
+  //SPrL();                     // Newline
+  //SPFTL(3);                   // Headder, SerialPrintFlashTextLine
+  //SPFTL(B4);             
+  //SPFTL(3);
+
+  SPrL();
+  printComands();
+
+  delay(10000);  
+}// void loop() 
+//*****************************************************************
+
+
+
+*/

+ 12 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__swing__loop.h

@@ -0,0 +1,12 @@
+
+
+if(P5__TASK___ATTR (P5__TASK__CONFIG_A, P5__TASK__CONFIG__INDEX__CURRENT_A, P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A, P5__TASK__ATTR_A,P5__TASK__ATTR__INDEX__CURRENT_A, P5__TASK__ATTR__INDEX__CURRENT__EXEC_A, P5__TASK__TYPE__ATTRIBUTE_A , P5__TASK__CONFIG__NAME__ATTRIBUTE__STATUS__OUTPUT__LEVEL_A , P5__TASK__CONFIG__NAME__ATTRIBUTE__SWING__FREQUENCY_A, P5__TASK__ATTR_INT__UNDEF_A, P5__TASK__ATTR_ACCTION__IF_EXISTS_A ) ) { 
+        SPFTL(TASK_p5__swing__loop);
+        
+            P5__TASK__SWING(P5__TASK__CONFIG_A , P5__TASK__CONFIG__INDEX__CURRENT_A , P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A   ,
+            P5__TASK__ATTR_A, P5__TASK__ATTR__INDEX__CURRENT_A , P5__TASK__ATTR__INDEX__CURRENT__EXEC_A ,
+            P5__TASK__CONFIG__NAME__ASSERT__ARRAY_A,
+             P5__TASK__CONFIG__NAME__ASSERT__ARRAY_A__CURRENT_A, 
+            P5__TASK__CONFIG__NAME__ASSERT__ARRAY_A__CURRENT__EXEC_A,
+            P5__LATENCY_TASK_EXEC_TIME_A);
+}

+ 136 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__task___attr.h

@@ -0,0 +1,136 @@
+
+int P5__TASK___ATTR( //increment auto
+    P5__TASK__CONFIG_T* P5__TASK__CONFIG_A, 
+    P5__TASK__CONFIG__INDEX__CURRENT_T &P5__TASK__CONFIG__INDEX__CURRENT_A ,
+     P5__TASK__CONFIG__INDEX__CURRENT__EXEC_T &P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A ,
+
+     P5__TASK__ATTR_T* P5__TASK__ATTR_A,//4
+     P5__TASK__ATTR__INDEX__CURRENT_T  &P5__TASK__ATTR__INDEX__CURRENT_A , //5
+          P5__TASK__ATTR__INDEX__CURRENT__EXEC_T  &P5__TASK__ATTR__INDEX__CURRENT__EXEC_A , //6
+
+     P5__TASK__TYPE__CLASS_T P5__TASK__TYPE__CLASS_A, //7
+    P5__TASK__CONFIG__NAME__INDEX_T P5__TASK__CONFIG__NAME__INDEX_A, //8 
+    //unknown
+     P5__TASK__TYPE__ASSOC_T P5__TASK__TYPE__ASSOC_A, //9.5id ref elem 
+     P5__TASK__ATTR_INT_T  P5__TASK__ATTR_INT_A , //10 value
+    //int P5__TASK__PW__ATTR_A, 
+    P5__TASK__ATTR_ACCTION_T P5__TASK__ATTR_ACCTION )    //11) 
+    {
+                 int found ;
+                 if(P5__TASK__ATTR_ACCTION == 0) { //reply notgubg
+                 
+                 } else if(P5__TASK__ATTR_ACCTION == P5__TASK__ATTR_ACCTION__IF_EXISTS_A) {
+                    found = 0;
+                      for(int i=2;i<P5__TASK__ATTR__LIMIT ; i++) {
+                         if(P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A == P5__TASK__TYPE__ASSOC_A // P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A
+                              and  P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A == P5__TASK__TYPE__CLASS_A
+                              and P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A == P5__TASK__CONFIG__NAME__INDEX_A
+                              ) {
+                             SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX,String(P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A));
+                             return true;
+                                found ++ ;
+                         }
+                        
+                     }
+                      if(found == 0) {
+                        return false;
+                      }
+                     
+                }  else  if(P5__TASK__ATTR_ACCTION == P5__TASK__ATTR_ACCTION__REPLY_A) { //reply  current
+                        SPFTL(TASK_ATTR);
+                        found = 0;
+                     for(int i=2;i<P5__TASK__ATTR__LIMIT ; i++) {
+                         if(P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A == P5__TASK__TYPE__ASSOC_A // P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A
+                              and  P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A == P5__TASK__TYPE__CLASS_A
+                              and P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A == P5__TASK__CONFIG__NAME__INDEX_A
+                              ) {
+                             SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX,String(P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A));
+                             return(P5__TASK__ATTR_A[i].P5__TASK__ATTR_INT_A);
+                                found ++ ;
+                         }
+                        
+                     }
+                      if(found == 0) {
+                             SPFT2(TODO_ATTR__ERROR__NOT_FOUND,P5__TASK__CONFIG__NAME__INDEX_A);
+                               SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX, P5__TASK__CONFIG__NAME__INDEX_A);
+                               SPFT2(ATTRIBUTE__P5__TASK__CONFIG__INDEX__CURRENT__EXEC,P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A);
+                               SPFT2(ATTRIBUTE__P5__TASK__ATTR_INT,P5__TASK__ATTR_INT_A);
+                     }
+                 }  else if(P5__TASK__ATTR_ACCTION == P5__TASK__ATTR_ACCTION__SET__INIT_A  )  { //set new init
+                          found = 0;
+                          
+                      for(int i=2;i<P5__TASK__ATTR__LIMIT ; i++) {
+                         if(        //P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A ==  P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A
+                                 P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A == P5__TASK__TYPE__ASSOC_A //  P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A
+                                 and  P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A == P5__TASK__TYPE__CLASS_A
+                                 and  P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A == P5__TASK__CONFIG__NAME__INDEX_A ) {
+                             found ++;// = found + P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A;
+                             
+                             if(P5__TASK__CONFIG__NAME__INDEX_A == P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A) { //only when setup
+                              SPFTL2(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__SET__INIT,found);
+                                     SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__ATTRIBUTE__P5__TASK__ATTR_ACCTION__SET__INIT,"<!>");
+                                     SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX,String(P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A));
+                                      SPFT2(ATTRIBUTE__P5__TASK__TYPE__SEQUENCE__ARRAY__INDEX,i);
+                                      SPFT2(ATTRIBUTE__P5__TASK__TYPE__CLASS,String(P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A));
+                                       SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX, P5__TASK__CONFIG__NAME__INDEX_A);
+                                       SPFT2(ATTRIBUTE__P5__TASK__ATTR_INT,String(P5__TASK__ATTR_A[i].P5__TASK__ATTR_INT_A));
+                                       SPFT2(ATTRIBUTE__P5__TASK__CONFIG__INDEX__CURRENT__EXEC,P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A);
+                                       SPFT2(ATTRIBUTE__P5__TASK__ATTR_INT,P5__TASK__ATTR_INT_A);
+                               }
+                               
+                             return(P5__TASK__ATTR_A[i].P5__TASK__ATTR_INT_A);
+                             //P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A P5__TASK__PW__ATTR_A_S = 100; //P5__TASK__PW__ATTR_A;
+                             //Serial.print(P5__TASK__PW__ATTR_A_S);
+                             //return P5__TASK__PW__ATTR_A_S;
+                             //return(P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A ==  P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A);
+                         }
+                     }
+                          if(found == 0) {
+                          
+                                if(P5__TASK__ATTR__INDEX__CURRENT_A >=P5__TASK__ATTR__LIMIT) {
+                                    SPFT2(TODO_ATTR__ERROR__LIMITS,P5__TASK__ATTR__LIMIT);
+                                   delay(10000);
+                                } else {
+                                    
+                                    
+                                     P5__TASK__ATTR_A[P5__TASK__ATTR__INDEX__CURRENT_A].P5__TASK__TYPE__CLASS_A = P5__TASK__TYPE__CLASS_A ;
+                                     P5__TASK__ATTR_A[P5__TASK__ATTR__INDEX__CURRENT_A].P5__TASK__CONFIG__NAME__INDEX_A = P5__TASK__CONFIG__NAME__INDEX_A ;
+                                     P5__TASK__ATTR_A[P5__TASK__ATTR__INDEX__CURRENT_A].P5__TASK__TYPE__ASSOC_A = P5__TASK__TYPE__ASSOC_A ;//P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A;
+                                     P5__TASK__ATTR_A[P5__TASK__ATTR__INDEX__CURRENT_A].P5__TASK__ATTR_INT_A = P5__TASK__ATTR_INT_A ;
+                                     
+                                      SPFT2(TODO_ATTR__OK__SAVED__INIT, P5__TASK__ATTR__INDEX__CURRENT_A);
+                                     SPFT2(ATTRIBUTE__P5__TASK__TYPE__ASSOC_A, P5__TASK__ATTR__INDEX__CURRENT_A) ;
+                                     SPFT2(ATTRIBUTE__P5__TASK__CONFIG__INDEX__CURRENT, P5__TASK__TYPE__ASSOC_A) ;
+                                     SPFT2(ATTRIBUTE__P5__TASK__TYPE__CLASS, P5__TASK__TYPE__CLASS_A) ;
+                                      SPFT2(ATTRIBUTE__P5__TASK__CONFIG__NAME__INDEX,   P5__TASK__CONFIG__NAME__INDEX_A) ;
+                                      SPFT2(ATTRIBUTE__P5__TASK__ATTR_INT, P5__TASK__ATTR_INT_A) ;
+                                     
+                                         P5__TASK__ATTR__INDEX__CURRENT_A ++ ;
+                                      return(P5__TASK__ATTR_A[P5__TASK__ATTR__INDEX__CURRENT_A - 1].P5__TASK__ATTR_INT_A);
+                                    }
+                          } else {
+                            Serial.print("[!@+#]");
+                          }
+                     
+                 } else 
+                 
+                 if(P5__TASK__ATTR_ACCTION ==  P5__TASK__ATTR_ACCTION__SET_A)  { //set new
+                       found = 0;
+                     //findinf
+                      for(int i=2;i<P5__TASK__ATTR__LIMIT ; i++) {
+                                if(P5__TASK__ATTR_A[i].P5__TASK__TYPE__ASSOC_A ==  P5__TASK__CONFIG__INDEX__CURRENT__EXEC_A
+                                  and  P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A == P5__TASK__TYPE__CLASS_A 
+                                  and  P5__TASK__ATTR_A[i].P5__TASK__CONFIG__NAME__INDEX_A == P5__TASK__CONFIG__NAME__INDEX_A
+                                  ) {
+                                    found ++;//= found + P5__TASK__ATTR_A[i].P5__TASK__TYPE__CLASS_A;
+                                     P5__TASK__ATTR_A[i].P5__TASK__ATTR_INT_A = P5__TASK__ATTR_INT_A;
+                                      Serial.print("[@>#]");
+                                     return P5__TASK__ATTR_A[i].P5__TASK__ATTR_INT_A;
+                                }
+                       }
+                       if(found == 0) {
+                         Serial.print("[@>!#]");
+                       }
+                 }
+            
+ }

+ 17 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__task__loop__exec.h

@@ -0,0 +1,17 @@
+// delay(100);
+   if(P5__LATENCY_TASK_EXEC_TIME_TIMESTAMP_A < millis() ) {
+        P5__LATENCY_TASK_EXEC_TIME_TIMESTAMP_A = millis() +  P5__LATENCY_TASK_EXEC_TICK_A ;
+            P5__LATENCY_TASK_EXEC_TIME_A =  2000 /  P5__LATENCY_TASK_EXEC_TICKS_A  ;///  P5__LATENCY_TASK_EXEC_TICK_A
+            if(P5__LATENCY_TASK_EXEC_DIFF_TICKS_A > 0)
+                P5__LATENCY_TASK_EXEC_DIFF_RESULT_A += abs(P5__LATENCY_TASK_EXEC_TIME_A - P5__LATENCY_TASK_EXEC_DIFF_TICKS_A );
+                P5__LATENCY_TASK_EXEC_DIFF_COUNT_A = P5__LATENCY_TASK_EXEC_TICKS_A ;
+                P5__LATENCY_TASK_EXEC_DIFF_TICKS_A = P5__LATENCY_TASK_EXEC_TIME_A ;
+            
+        SPFTL(TASK_LOOP_EXEC);
+        SPFT2(ATTRIBUTE_LATENCY_TASK_EXEC_TIME,P5__LATENCY_TASK_EXEC_TIME_A );
+        SPFT2(ATTRIBUTE_LATENCY_TASK_EXEC_TICKS,P5__LATENCY_TASK_EXEC_TICKS_A);
+         SPFT2(ATTRIBUTE_LATENCY_TASK_EXEC_DIFF_RESULT,P5__LATENCY_TASK_EXEC_DIFF_RESULT_A);             
+              P5__LATENCY_TASK_EXEC_TICKS_A = 1 ; //todo assert? or final?
+
+   } else   P5__LATENCY_TASK_EXEC_TICKS_A ++ ;
+ 

+ 28 - 0
SE/stuff/P5_Automation_can-dev-res-working-1930/___SUBMODULES___/testing_pwm_amp/___P5_LIB/p5__task__scan.h

@@ -0,0 +1,28 @@
+//todo implement i2c and other casses
+  byte count = 0;
+  pinMode(13,OUTPUT); 
+  digitalWrite(13,HIGH);
+  Wire.begin();
+  for (byte i = 1; i < 120; i++)
+  {
+    Wire.beginTransmission (i);
+    if (Wire.endTransmission () == 0)
+      {
+      Serial.print ("Found address: ");
+      Serial.print (i, DEC);
+      Serial.print (" (0x");
+      Serial.print (i, HEX);
+      Serial.println (")");
+      count++;
+      delay (1); 
+      } 
+  } 
+  Serial.println ("Done.");
+  Serial.print ("Found ");
+  Serial.print (count, DEC);
+  Serial.println (" device(s).");
+  
+  
+  delay(5000);
+  
+