Parcourir la source

added serial command machine
base code running, stepper can be home and sent to a relative or
absolute position

eLandon il y a 6 ans
Parent
commit
e799d5d01d

+ 22 - 4
HTequi-firmware/src/Atm_lien/Atm_TeensyStep.cpp

@@ -67,7 +67,7 @@ void Atm_TeensyStep::action( int id ) {
     case LP_RUNNING:
       // _motor.run();
       _currentStep = motor->getPosition();
-      
+
      // Serial.println(_motor.currentPosition());
       return;
     case ENT_STOPPING:
@@ -102,9 +102,9 @@ int Atm_TeensyStep::state( void ) {
  *
  */
 
-Atm_TeensyStep& Atm_TeensyStep::gotoStep(long int targetStep ) {
-  _targetStep   = targetStep;
-  motor->setTargetRel(_targetStep);
+Atm_TeensyStep& Atm_TeensyStep::move(long int stepRel ) {
+  _targetStep   += stepRel;
+  motor->setTargetAbs(_targetStep);
   controller->moveAsync(*motor);
 
   // _motor.move(targetStep);
@@ -116,6 +116,24 @@ Atm_TeensyStep& Atm_TeensyStep::gotoStep(long int targetStep ) {
   return *this;
 }
 
+Atm_TeensyStep& Atm_TeensyStep::moveTo(long int stepAbs ) {
+  _targetStep   = stepAbs;
+  motor->setTargetAbs(_targetStep);
+  controller->moveAsync(*motor);
+
+  // _motor.move(targetStep);
+  // _motor.run();
+  // Serial.println(_motor.distanceToGo());
+  // _motor.setMaxSpeed(5000);
+  // _motor.setAcceleration(6000);
+  trigger( EVT_GOTO );
+  return *this;
+}
+
+Atm_TeensyStep& Atm_TeensyStep::stop(){
+  controller->stopAsync();
+  //trigger( EVT_STOPPING );
+}
 /*
  * onOnchange() push connector variants ( slots 1, autostore 0, broadcast 0 )
  */

+ 4 - 1
HTequi-firmware/src/Atm_lien/Atm_TeensyStep.h

@@ -10,12 +10,15 @@ class Atm_TeensyStep: public Machine {
   enum { EVT_IDLE_TIMER, EVT_ON_TARGET, EVT_GOTO, ELSE }; // EVENTS
   Atm_TeensyStep( void ) : Machine()  {};
   Atm_TeensyStep& begin( Stepper & motorRef , StepControl & stepControlRef ) ;
+
   Atm_TeensyStep& trace( Stream & stream );
   Atm_TeensyStep& trigger( int event );
   int state( void );
   Atm_TeensyStep& onOnchange( Machine& machine, int event = 0 );
   Atm_TeensyStep& onOnchange( atm_cb_push_t callback, int idx = 0 );
-  Atm_TeensyStep& gotoStep( long int targetStep );
+  Atm_TeensyStep& move( long int stepRel );
+  Atm_TeensyStep& moveTo( long int stepAbs );
+  Atm_TeensyStep& stop();
   Stepper * motor;
   StepControl * controller;
 

+ 94 - 15
HTequi-firmware/src/blobcnc_feeder/main.cpp

@@ -10,31 +10,94 @@
 #include <TeensyMAC.h>
 #include <OSCMessage.h>
 
+////////////////    Ethernet  /////////////////////////////
 // Enter a MAC address and IP address for your controller below.
 // The IP address will be dependent on your local network:
-byte mac[] = {
- 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
-};
-
+byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
 IPAddress ip(192, 168, 1, 204);    //local IP of Arduino/Teensy
 //unsigned int localPort = 8888;      // local port to listen on (not needed for multicast)
-
 IPAddress ipMulti(239, 200, 200, 200); // ipMidi Multicast address
 unsigned int portMulti = 9977;   // ipMidi Mutlicast port 1
-
-
 // buffers for receiving and sending data
 byte packetBuffer[UDP_TX_PACKET_MAX_SIZE];       // buffer to hold incoming packet
 byte sendBuffer1[] = {0x90, 0x14, 0x22};        // MIDI Note On to Multicast address
 byte sendBuffer2[] = {0x80, 0x14, 0x00};        // MIDI Note Off to Multicast address
-
 // An EthernetUDP instance to let us send and receive packets over UDP
 EthernetUDP Udp;
 
-// Atm_stepper stepper;
-Atm_TeensyStep stepper;
-Stepper A_stepper(22, 21);
-StepControl controller ;
+
+/////////////////// STEPPER machines  ////////////////////////
+const int HIGH_SPEED = 1000 ;
+const int HIGH_ACC = 8000 ;
+const int LOW_SPEED = 100 ;
+const int LOW_ACC = 5000 ;
+const int BARREL_DISTANCE = 8592 ;
+
+Atm_TeensyStep barrel_step;
+Stepper barrel_stepper(3, 2);
+StepControl barrel_controller ;
+
+Atm_analog barrel_sensor;
+
+Atm_TeensyStep pill_step;
+Stepper pill_stepper(6, 5);
+StepControl pill_controller ;
+
+
+void barrel_homing(){
+  digitalWrite( 13, HIGH );
+  barrel_stepper.setMaxSpeed(LOW_SPEED);
+  barrel_stepper.setAcceleration(LOW_ACC);
+  barrel_step.move(BARREL_DISTANCE);
+  Serial.println(barrel_sensor.state());
+  while(barrel_sensor.state()<500 && (barrel_step.state() == barrel_step.RUNNING)){ // &&
+    //automaton.run();
+    barrel_step.cycle();
+    Serial.println(barrel_sensor.state());
+  }
+  barrel_step.stop();
+  barrel_stepper.setPosition(0);
+  digitalWrite( 13, LOW );
+
+}
+
+void barrel_next(){
+  digitalWrite( 13, HIGH );
+  barrel_stepper.setMaxSpeed(HIGH_SPEED);
+  barrel_stepper.setAcceleration(HIGH_ACC);
+  barrel_step.move(BARREL_DISTANCE);
+}
+
+//////////////  Serial command machine  /////////////////////
+char cmd_buffer[80];
+Atm_command cmd;
+enum { CMD_TEST, CMD_BARREL_MOVE, CMD_BARREL_HOME, CMD_BARREL_NEXT };
+const char cmdlist[] =
+    "test barrel_move barrel_home barrel_next";
+void cmd_callback( int idx, int v, int up ) {
+  int pin = atoi( cmd.arg( 1 ) );
+  Serial.print(v);
+  Serial.println("  in callback");
+  switch ( v ) {
+    case CMD_TEST:
+      digitalWrite( 13, HIGH );
+      Serial.println("in test");
+      return;
+    case CMD_BARREL_MOVE:
+      digitalWrite( 13, LOW );
+      barrel_step.move(atoi( cmd.arg( 1 ) ));
+      return;
+    case CMD_BARREL_HOME:
+      barrel_homing();
+      return;
+    case CMD_BARREL_NEXT:
+      barrel_next();
+      return;
+  }
+}
+
+
+
 
 void setup() {
   //Configure and start ethernet module (not needed for feeder)
@@ -49,11 +112,27 @@ void setup() {
   Serial.begin(115200); // higher Baud rate for faster refresh, CHANGE IN SERIAL MONITOR
   delay(2000);
   Serial.println("Started");
+  cmd.begin( Serial, cmd_buffer, sizeof( cmd_buffer ) )
+    .trace(Serial)
+    .list( cmdlist )
+    .onCommand( cmd_callback );
+
+  pinMode(13, OUTPUT);
+
+
+  barrel_step.trace( Serial );
+  barrel_step.begin(barrel_stepper, barrel_controller);
+  barrel_stepper.setMaxSpeed(LOW_SPEED);
+  barrel_stepper.setAcceleration(HIGH_ACC);
+  barrel_sensor.begin(A1);
 
-  stepper.trace( Serial );
-  stepper.begin(A_stepper, controller);
+  pill_step.trace( Serial );
+  pill_step.begin(pill_stepper, pill_controller);
+  pill_stepper.setMaxSpeed(HIGH_SPEED);
+  pill_stepper.setAcceleration(HIGH_ACC);
+  //stepper.onOnchange(Machine &machine, optional int event = 0)
   //stepper.cycle(1000);
-  stepper.gotoStep(10000);
+  //barrel_step.gotoStep(10000);
   //controller.moveAsync(*stepper.motor);
 
 }