Bläddra i källkod

serial OSC communication

changed OSC to serial transport
initial stepper control
Etienne Landon 7 år sedan
förälder
incheckning
61376f754d
3 ändrade filer med 154 tillägg och 114 borttagningar
  1. 4 2
      C_Vieille_OSCstepperCtl.ino
  2. 81 60
      osc.h
  3. 69 52
      stepper.h

+ 4 - 2
C_Vieille_OSCstepperCtl.ino

@@ -8,11 +8,13 @@ void setup() {
   setup_OSC();
   setup_Stepper();
   delay(1000);
-  init_Stepper() 
+  sendOSC("/ended ", "setup");
+//  init_Stepper() ;
 
 }
 
 void loop() {
   handleOSCIn();
-  update_Stepper();
+//  update_Stepper();
+  stepper.run();
 }

+ 81 - 60
osc.h

@@ -3,43 +3,66 @@
 #include <EthernetUdp.h>
 #include <SPI.h>
 
+#include <OSCBoards.h>
+
+#ifdef BOARD_HAS_USB_SERIAL
+#include <SLIPEncodedUSBSerial.h>
+SLIPEncodedUSBSerial SLIPSerial( thisBoardsSerialUSB );
+#else
+#include <SLIPEncodedSerial.h>
+ SLIPEncodedSerial SLIPSerial(Serial);
+#endif
+
+
+////  UTILITIES ///////// 
 
 
 template <typename TYPE> void sendOSC(const char * adress, TYPE parameter) {
   OSCMessage OSCmsg(adress);
   OSCmsg.add(parameter);
-  Udp.beginPacket(outIp, outPort);
-  OSCmsg.send(Udp); // send the bytes to the SLIP stream
-  Udp.endPacket(); // mark the end of the OSC Packet
+  SLIPSerial.beginPacket(); 
+  //Udp.beginPacket(outIp, outPort);
+  OSCmsg.send(SLIPSerial); // send the bytes to the SLIP stream
+//  OSCmsg.send(Udp); // send the bytes to the SLIP stream
+  SLIPSerial.endPacket();
+  //Udp.endPacket(); // mark the end of the OSC Packet
   OSCmsg.empty(); // free space occupied by message
 }
 
+void printTest(OSCMessage &msg) {
+  sendOSC("/still", "up and running");
+}
+
 /////  STEPPER /////////
 
-void init_Stepper_OSC(OSCMessage &msg) {
-  float maximum = init_Stepper();
-  sendOSC("/stepper/maxPos",maximum );
-}
 
+
+//void init_Stepper_OSC(OSCMessage &msg) {
+//  float maximum = init_Stepper();
+//  sendOSC("/stepper/maxPos",maximum );
+//}
+//
 void moveTo_Stepper_OSC (OSCMessage &msg){
   long int distance = moveTo_Stepper(msg.getInt(0));
   sendOSC("/stepper/distanceToGo",distance );
+//  while (!stepper.distanceToGo()==0)
+//    stepper.run();
 }
 
 void move_Stepper_OSC (OSCMessage &msg){
   long int distance = move_Stepper(msg.getInt(0));
   sendOSC("/stepper/distanceToGo",distance );
 }
-
-void moveToCm_Stepper_OSC (OSCMessage &msg){
-  long int distance = moveToCm_Stepper(msg.getFloat(0));
-  sendOSC("/stepper/distanceToGo/cm",distance );
-}
-
-void moveCm_Stepper_OSC (OSCMessage &msg){
-  long int distance = moveCm_Stepper(msg.getFloat(0));
-  sendOSC("/stepper/distanceToGo/cm",distance );
-}
+//
+//void moveToCm_Stepper_OSC (OSCMessage &msg){
+//  long int distance = moveToCm_Stepper(msg.getFloat(0));
+//  sendOSC("/stepper/distanceToGo/cm",distance );
+//}
+//
+//void moveCm_Stepper_OSC (OSCMessage &msg){
+//  long int distance = moveCm_Stepper(msg.getFloat(0));
+//  sendOSC("/stepper/distanceToGo/cm",distance );
+//}
 
 void maxSpeed_Stepper (OSCMessage &msg){
   long int max_speed = maxSpeed_Stepper(msg.getInt(0));
@@ -49,63 +72,61 @@ void maxSpeed_Stepper (OSCMessage &msg){
 void acceleration_Stepper (OSCMessage &msg){
   long int acceleration = acceleration_Stepper(msg.getInt(0));
   sendOSC("/stepper/acceleration",acceleration );
+}
+
+void currentPos_Stepper_OSC(OSCMessage &msg) {
+  sendOSC("/stepper/currentPos", stepper.currentPosition());
+}
 
 
 //////  OSC DECLARATIONS  /////////
 
 void setup_OSC(){
-  OSCMessage OSCmsg("/connected");
-
+  
+  SLIPSerial.begin(115200);
+//  delay (100);
+  sendOSC("/ready", "to go");
 
+  
 }
 
 
-
 void handleOSCIn() {
 
-//  //check ethernet connection periodically
-//  if ( millis() - ethernetTestTimer > 5000 ) {
-//    ethernetTestTimer = millis() ;  
-//    //Serial.println(Ethernet.maintain());    
-//  }
-  
+
   //define OSC message to function relationships
   OSCMessage OSCin;
   int size;
 
-  if ( (size = Udp.parsePacket()) > 0) {
-    while (size--)
-    OSCin.fill(Udp.read());
-
-    //Declare valid OSC messages here 
-    if (!OSCin.hasError()) {
-      OSCin.dispatch("/test", printTest);
-      OSCin.dispatch("/mode", mode_OSC);
-      
-      //SENSOR
-      OSCin.dispatch("/sensor/state", sensorState_OSC);
-      OSCin.dispatch("/sensor/time", sensorTimeOSC);
-      OSCin.dispatch("/sensor/scale/reset", resetScale_OSC);
-      OSCin.dispatch("/sensor/scale/current", currentScale_OSC);
-
-      //CC MOTOR CONTROL
-      OSCin.dispatch("/CC/speed", setSpeed_CCMotor_OSC);
-      OSCin.dispatch("/CC/cs", checkCS_CCMotor_OSC);
-      
-      //STEPPER CONTROL
-      OSCin.dispatch("/stepper/init", init_Stepper_OSC);
-      OSCin.dispatch("/stepper/moveTo", moveTo_Stepper_OSC);
-      OSCin.dispatch("/stepper/move", move_Stepper_OSC);
-      OSCin.dispatch("/stepper/moveTo/cm", moveToCm_Stepper_OSC);
-      OSCin.dispatch("/stepper/move/cm", moveCm_Stepper_OSC);
-      OSCin.dispatch("/stepper/maxSpeed", maxSpeed_Stepper);
-      OSCin.dispatch("/stepper/acceleration", acceleration_Stepper);
-      OSCin.dispatch("/stepper/randomMove", randomMove_Stepper_OSC);
-
-      //LEDS
-      OSCin.dispatch("/led/value", valueLed_OSC);
-      OSCin.dispatch("/led/sensor", sensorLed_OSC);
-      OSCin.dispatch("/led/lighting", lightingLed_OSC);
-    }    
+  if (SLIPSerial.available()) {
+    while (!SLIPSerial.endofPacket())
+      if ( (size = SLIPSerial.available()) > 0)
+      {
+        while (size--)
+          OSCin.fill(SLIPSerial.read());
+      }
   }
+      
+  //Declare valid OSC messages here 
+  if (!OSCin.hasError()) {
+    OSCin.dispatch("/test", printTest);
+
+
+//      //STEPPER CONTROL
+//      OSCin.dispatch("/stepper/init", init_Stepper_OSC);
+    OSCin.dispatch("/stepper/currentPos", currentPos_Stepper_OSC);  
+    OSCin.dispatch("/stepper/moveTo", moveTo_Stepper_OSC);
+    OSCin.dispatch("/stepper/move", move_Stepper_OSC);
+//      OSCin.dispatch("/stepper/moveTo/cm", moveToCm_Stepper_OSC);
+//      OSCin.dispatch("/stepper/move/cm", moveCm_Stepper_OSC);
+    OSCin.dispatch("/stepper/maxSpeed", maxSpeed_Stepper);
+    OSCin.dispatch("/stepper/acceleration", acceleration_Stepper);
+//      OSCin.dispatch("/stepper/randomMove", randomMove_Stepper_OSC);
+//
+//      //LEDS
+//      OSCin.dispatch("/led/value", valueLed_OSC);
+//      OSCin.dispatch("/led/sensor", sensorLed_OSC);
+//      OSCin.dispatch("/led/lighting", lightingLed_OSC);
+  }    
+//  }
 }

+ 69 - 52
stepper.h

@@ -21,32 +21,40 @@ AccelStepper stepper(1, 8, 7);
 // microswitch pins
 int switchLow = A5;
 
-int speedLimit[2] = { 50 , 1000 } ;// sets an absolute minimum/maximum speed limit
-int accLimit[2] = { 100, 2000} ;
+long int speedLimit[2] = { 50 , 10000000 } ;// sets an absolute minimum/maximum speed limit
+long int accLimit[2] = { 100, 200000} ;
 
 long int moveTo_Stepper(long int stepto ) {
-  stepper.moveTo( constrain( stepto , originPos * stepToCm, maxPos * stepToCm ) );
+  stepper.moveTo(stepto);
+//  while (!stepper.distanceToGo()==0)
+//    stepper.run();
+//  stepper.moveTo( constrain( stepto , originPos * stepToCm, maxPos * stepToCm ) );
   return stepper.distanceToGo();
 }
-float moveToCm_Stepper(float cmto ) {
-  stepper.moveTo(constrain( cmto * stepToCm , originPos, maxPos ));
-  return stepper.distanceToGo()/stepToCm;
-}
-
+//float moveToCm_Stepper(float cmto ) {
+//  stepper.moveTo(constrain( cmto * stepToCm , originPos, maxPos ));
+//  return stepper.distanceToGo()/stepToCm;
+//}
+//
 long int move_Stepper(long int stepRelative ) {
   stepper.move(stepRelative);
   return stepper.distanceToGo();
 }
-float moveCm_Stepper(float cmRelative ) {
-  stepper.move(cmRelative * stepToCm );
-  return stepper.distanceToGo()/stepToCm;
-}
-
+//float moveCm_Stepper(float cmRelative ) {
+//  stepper.move(cmRelative * stepToCm );
+//  return stepper.distanceToGo()/stepToCm;
+//}
+//
 long int maxSpeed_Stepper(long int maxspeed){
   stepper.setMaxSpeed( constrain (maxspeed, speedLimit[0], speedLimit[1] ) );
   return stepper.maxSpeed();
 }
 
+long int setSpeed_Stepper(long int maxspeed){
+  stepper.setSpeed( constrain (maxspeed, speedLimit[0], speedLimit[1] ) );
+  return stepper.maxSpeed();
+}
+
 long int acceleration_Stepper( long int acc ){
   stepper.setAcceleration(acc + 1); // prevent 0 step/s²
   return acc;
@@ -55,58 +63,67 @@ long int acceleration_Stepper( long int acc ){
 //////////////// CALIBRATION ////////////////////////
 
 float init_Stepper(){
-  //run at constant speed until hitting switchLow
-  stepper.setSpeed(-1*speedLimit[1]); 
-  while(digitalRead(switchLow)) {
-    stepper.runSpeed();
-  }
-  stepper.stop();
-  //this is the new 0 step
-  stepper.setCurrentPosition(0);
-
-
-
-  delay(1000); //take a breath
-
-  //run at constant speed until hitting switchHigh
-  stepper.setSpeed(speedLimit[1]);
-  while(digitalRead(switchHigh)) {
-    stepper.runSpeed(); 
-  }
-  stepper.stop();
-  maxPos = stepper.currentPosition() / stepToCm ;
-
-  delay(1000);
-
-  stepper.runToNewPosition(maxPos * stepToCm / 2) ; 
-  return maxPos ;
+//  //run at constant speed until hitting switchLow
+//  stepper.setSpeed(-1*speedLimit[1]); 
+//  while(digitalRead(switchLow)) {
+//    stepper.runSpeed();
+//  }
+//  stepper.stop();
+//  //this is the new 0 step
+//  stepper.setCurrentPosition(0);
+//
+//
+//
+//  delay(1000); //take a breath
+//
+//  //run at constant speed until hitting switchHigh
+//  stepper.setSpeed(speedLimit[1]);
+//  while(digitalRead(switchHigh)) {
+//    stepper.runSpeed(); 
+//  }
+//  stepper.stop();
+//  maxPos = stepper.currentPosition() / stepToCm ;
+//
+//  delay(1000);
+//
+//  stepper.runToNewPosition(maxPos * stepToCm / 2) ; 
+//  return maxPos ;
 }
 
 ///////////////////// SETUP ///////////////////////////
 void setup_Stepper(){
   pinMode (switchLow, INPUT_PULLUP);
-  pinMode (switchHigh, INPUT_PULLUP);
-  stepper.setMaxSpeed(speedLimit[1]);
-  //stepper.setSpeed(10000);
-  stepper.setAcceleration(accLimit[1]);
+//  pinMode (switchHigh, INPUT_PULLUP);
+//  stepper.moveTo(rand() % 200000);
+  stepper.setMaxSpeed( 20000);
+  stepper.setSpeed(10000);
+//  while (!stepper.distanceToGo()==0)
+//    stepper.run();
+//  stepper.moveTo(0);
+//  while (!stepper.distanceToGo()==0)
+//    stepper.run();
+//  stepper.setMaxSpeed(speedLimit[1]);
+//  //stepper.setSpeed(10000);
+//  stepper.setAcceleration(accLimit[1]);
+  
 }
 
 ///////////////////// LOOP ///////////////////////////
 
 bool update_Stepper() {
   
-  bool updated = 1 ;
+//  bool updated = 1 ;
   stepper.run();
   
-  if (!digitalRead(switchLow)) {
-    stepper.setCurrentPosition(0);
-    updated=0;
-  }
-  if (!digitalRead(switchHigh)) {
-    stepper.setCurrentPosition(maxPos * stepToCm);
-    updated=0;
-  }
-  return updated ;
+//  if (!digitalRead(switchLow)) {
+//    stepper.setCurrentPosition(0);
+//    updated=0;
+//  }
+//  if (!digitalRead(switchHigh)) {
+//    stepper.setCurrentPosition(maxPos * stepToCm);
+//    updated=0;
+//  }
+//  return updated ;
 }