a.binder 5 anni fa
parent
commit
3e02db76f8

+ 12 - 1
SE/stuff/P5_Automation_can-dev-res/P5_Automation_can-dev-res.ino

@@ -118,13 +118,19 @@
 #include "_I2C_driver_Adafruit_PWMServoDriver_struct.h"
 
 
+#if defined(HAS_ROTTARY_SW)
+ #include "_ROTTARY_SW_config.h"
+#endif
+
 
 
 #if defined(HAS_I2C_driver_Adafruit_PWMServoDriver)
  #include "_I2C_driver_Adafruit_PWMServoDriver_config.h"
 #endif
 
-
+#if defined(HAS_ROTTARY_SW)
+    #include "_ROTTARY_SW_struct.h"
+#endif
 
 #include "Queue.h"
  
@@ -354,6 +360,11 @@ void loop() {
 #endif 
 
  
+ 
+#if defined(HAS_ROTTARY_SW)
+    #include "_ROTTARY_SW_loop.h"
+#endif
+ 
 
   time = millis();
   Serial.print("Time: " );   Serial.println(time);

+ 7 - 1
SE/stuff/P5_Automation_can-dev-res/_PCINT_struct.h

@@ -31,4 +31,10 @@
 
 volatile uint8_t latest_interrupted_pin;
 volatile uint8_t interrupt_count[TOTAL_PINS]={0}; // possible arduino pins
-volatile uint8_t pin3Count=0;
+volatile uint8_t pin3Count=0;
+
+/*
+volatile unsigned int encoder0Pos = 0;
+static boolean rotating = false;
+
+*/

+ 43 - 0
SE/stuff/P5_Automation_can-dev-res/_ROTTARY_SW_func.h

@@ -4,9 +4,52 @@ void ROTTARY_SW_sw_INT() {
    Serial.println("ROTTARY_SW_sw_INT TRIG");
 }
 
+/*
 void ROTTARY_SW_dt_INT() {
    Serial.println("ROTTARY_SW_dt_INT TRIG");
 }
 void ROTTARY_SW_clk_INT() {
    Serial.println("ROTTARY_SW_clk_INT TRIG");
 }
+*/
+
+void ROTTARY_SW_dt_INT() {
+ cli(); //stop interrupts happening before we read pin values
+  reading1 = digitalRead(ROTTARY_SW_clk) ;
+  reading2 = digitalRead(ROTTARY_SW_dt);
+  //reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values
+  if (reading1 == 1 and reading1 == 1 and aFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
+    encoderPos --; //increment the encoder's position count
+    bFlag = 0; //reset flags for the next turn
+    aFlag = 0; //reset flags for the next turn
+    
+  }  else if (reading1  == 0 and reading2  == 1) {
+   aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation
+  }
+  sei(); //restart interrupts
+  Serial.print("dt_: #[");  Serial.print(encoderPos); Serial.print("] R1[");  Serial.print(reading1); Serial.print("] R2[");  Serial.print(reading2); Serial.print("] aFlag["); Serial.print(aFlag);   Serial.print("] bFlag["); Serial.print(bFlag); 
+   Serial.println("] ");
+   
+}
+
+void ROTTARY_SW_clk_INT(){
+ cli(); //stop interrupts happening before we read pin values
+  reading1 = digitalRead(ROTTARY_SW_clk) ;
+  reading2 = digitalRead(ROTTARY_SW_dt);
+  //reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values
+  if (reading1 == 1 and reading2 == 1 && bFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
+    encoderPos ++; //increment the encoder's position count
+    bFlag = 0; //reset flags for the next turn
+    aFlag = 0; //reset flags for the next turn
+     
+  //  Serial.print("clkA: #[");  Serial.print(encoderPos); Serial.print("] R1["); Serial.print(reading1); Serial.print("] R2[");  Serial.print(reading2); Serial.print("] AFlag["); Serial.print(aFlag);   Serial.print("] bFlag["); Serial.print(bFlag);  Serial.println("] ");
+
+  }  else if (reading1 == 1  ) {
+   aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation
+  }
+  
+    Serial.print("clkA: #[");  Serial.print(encoderPos); Serial.print("] R1["); Serial.print(reading1); Serial.print("] R2[");  Serial.print(reading2); Serial.print("] AFlag["); Serial.print(aFlag);   Serial.print("] bFlag["); Serial.print(bFlag);  
+    Serial.println("] ");
+  sei(); //restart interrupts
+}
+

+ 0 - 13
SE/stuff/P5_Automation_can-dev-res/_ROTTARY_SW_init.h

@@ -1,13 +0,0 @@
-// rottary switch ports 
-#define ROTTARY_SW_sw A8 // 62 // A8 //A8 //53 // 89 // = A8
-#define ROTTARY_SW_dt A9 // 90 // = A9
-#define ROTTARY_SW_clk A10 // 91 // = A10
-
-/*
- LOW to trigger the interrupt whenever the pin is low,
-CHANGE to trigger the interrupt whenever the pin changes value
-RISING to trigger when the pin goes from low to high,
-FALLING for when the pin goes from high to low.
-The Due, Zero and MKR1000 boards allow also:
-HIGH to trigger the interrupt whenever the pin is high.
- */

+ 17 - 2
SE/stuff/P5_Automation_can-dev-res/_ROTTARY_SW_setup.h

@@ -9,9 +9,24 @@
 
   attachPinChangeInterrupt(ROTTARY_SW_sw, ROTTARY_SW_sw_INT, FALLING);  // add more attachInterrupt code as required
   pinMode(ROTTARY_SW_sw, INPUT_PULLUP);
-  attachPinChangeInterrupt(ROTTARY_SW_dt, ROTTARY_SW_dt_INT, FALLING); //FALLING //RISING 
+  
+  
+  attachPinChangeInterrupt(ROTTARY_SW_dt, ROTTARY_SW_dt_INT, RISING); //FALLING //RISING 
+  pinMode(ROTTARY_SW_dt, INPUT_PULLUP);
+  attachPinChangeInterrupt(ROTTARY_SW_clk, ROTTARY_SW_clk_INT, RISING); //CHANGE
+  pinMode(ROTTARY_SW_clk, INPUT_PULLUP);
+  
+  
+/*
+  attachPinChangeInterrupt(ROTTARY_SW_dt, ROTTARY_SW_dt_FALLING, FALLING); //FALLING //RISING
+  attachPinChangeInterrupt(ROTTARY_SW_dt, ROTTARY_SW_dt_RISING, RISING); //FALLING //RISING 
+ 
   pinMode(ROTTARY_SW_dt, INPUT_PULLUP);
-  attachPinChangeInterrupt(ROTTARY_SW_clk, ROTTARY_SW_clk_INT, FALLING); //CHANGE
+  attachPinChangeInterrupt(ROTTARY_SW_clk, ROTTARY_SW_clk_FALLING, FALLING); //CHANGE
+  attachPinChangeInterrupt(ROTTARY_SW_clk, ROTTARY_SW_clk_RISING, RISING); //CHANGE
+
   pinMode(ROTTARY_SW_clk, INPUT_PULLUP);
   
+  */
+  
 #endif

+ 1 - 1
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_I2C_func.h

@@ -71,7 +71,7 @@
                                     
                                     
                                     if(Slave_Ports_Status_A[i].Exp_state == Exp_state_ON ) {
-                                        Adafruit_PWMServoDriver_0X40.setPWM(Slave_Ports_Status_A[i].LocalPort, 4000, 4000);
+                                        Adafruit_PWMServoDriver_0X40.setPWM(Slave_Ports_Status_A[i].LocalPort, 3000, 3000);
                                         Serial.print("#77 I2C_driver Exp_state [ON]"); Serial.print(Slave_Ports_Status_A[i].Exp_state); Serial.println("] ");
                                     } else if(Slave_Ports_Status_A[i].Exp_state == Exp_state_OFF ){
                                         Adafruit_PWMServoDriver_0X40.setPWM(Slave_Ports_Status_A[i].LocalPort, 0, 0);

+ 24 - 0
SE/stuff/P5_Automation_can-dev-res/__main_struct.h

@@ -92,3 +92,27 @@ const ARDUINO_ARRAY_INDEX_T ARDUINO_ATTR_ARRAY_S_INDEX = ARDUINO_ARRAY_INDEX_FIR
 #define SERVOMIN  150 // this is the 'minimum' pulse length count (out of 4096)
 #define SERVOMAX  600 // this is the 'maximum' pulse length count (out of 4096)
 int degrees;
+
+
+ARDUINO_ARRAY_time_min_run_MIN_T  ARDUINO_ARRAY_time_min_run_MIN_A; 
+
+/* n = digitalRead(encoder0PinA);
+  if ((encoder0PinALast == LOW) && (n == HIGH)) {
+    if (digitalRead(encoder0PinB) == LOW) {
+      encoder0Pos--;
+    } else {
+      encoder0Pos++;
+    }
+    Serial.print (encoder0Pos);
+    Serial.print ("/");
+  }
+  encoder0PinALast = n;
+  
+  
+
+typedef ARDUINO_ROTTARY_ENC_DIR_S 
+
+  val = encoder_direction();
+  
+  
+  */