Skip to content

Help with sensor based run/stop #149

Description

@parrotcam

I have included notes in the following code describing what I am trying to accomplish and some of the many attempts I've made to come up with logic to make it work. I'm not sophisticated at programming, though I have made a variety of successful projects with non-Arduino systems. For some (probably obvious) reason, this one eludes me.

/*  There are 12 magnets on a rotational perimeter with a hall effect sensor used to determine when one has arrived.
 *  The desire is to pass up 11 magnets and stop at the 12th. I can get the system to respond and stop 
 *  at every sensor with the While routine below. The accompanying If routine will not respond when a 
 *  magnet passes. The other two routines simply stop at eveRy magnet. 
 *  The system uses a Teensy 3.5 and a TB67S279FTG driver.
 */

#include "Arduino.h" 
#include "TeensyStep.h"

Stepper motor(19,18);                          // STEP pin: 19, DIR pin: 18
RotateControl controller;                     // use for indefinite moves
                             
const byte ENABLE = 14;                     // to enable the driver (or save current drain)
const byte EXPOSURE = 8;                  // button to initiate exposure  
const byte HOUR_PIN = 4;                  // hour magnets interacting with sensor
byte hour_count = 0;                           // last known hour count : for tracking exposure progress

void setup() {
  pinMode(ENABLE, OUTPUT);             // ENABLE is output pin
  digitalWrite(ENABLE, HIGH);              // disable driver
  pinMode(EXPOSURE, INPUT_PULLUP);            // exposure switch
  pinMode(HOUR_PIN, INPUT_PULLUP);            // sensor magnet locations
  motor
    .setMaxSpeed(10000)                      // steps/s
    .setAcceleration(50000);                  // steps/s^2  
}

void exposure() {
   hour_count= 0;                                 // reset hour_count
  digitalWrite(ENABLE, LOW);              // enable driver
  controller.rotateAsync(motor);        

/* THIS DOES NOT RESPOND TO THE MAGNETS
  if (digitalRead(HOUR_PIN) == LOW){
    controller.stop();                             // stop motor and return immediately     
  }
*/

/* THIS WILL RESPOND TO EACH MAGNET AND STOP AT EACH IN TURN
    while (digitalRead(HOUR_PIN) == HIGH){}   // wait until magnet is sensed
    controller.stop();
    delay(5000);
*/

/* THIS STOPS AT EVERY MAGNET
  while (hour_count < 12){
    if (digitalRead(HOUR_PIN) == LOW){
      hour_count = hour_count + 1; 
    }
  }
  controller.stop();                                   // stop motor and return immediately
}
*/

/* THIS STOPS AT EVERY MAGNET
  while (hour_count < 12){
      if (digitalRead(HOUR_PIN) == LOW){
        hour_count = hour_count + 1; 
      }
  }
  controller.stop();                                // stop motor
}
*/

void loop() {                                                   // look for button actuation
    if (digitalRead(EXPOSURE) == LOW){        // has exposure button been pressed
      exposure();
    }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions