main.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include <Arduino.h>
  2. #include <Automaton.h>
  3. #include "Atm_lien/Atm_stepper.h"
  4. #include "Atm_lien/Atm_TeensyStep.h"
  5. #include <SPI.h>
  6. #include <Ethernet.h>
  7. #include <EthernetUdp.h>
  8. #include <TeensyMAC.h>
  9. #include <OSCMessage.h>
  10. //////////////// Ethernet /////////////////////////////
  11. // Enter a MAC address and IP address for your controller below.
  12. // The IP address will be dependent on your local network:
  13. byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
  14. IPAddress ip(192, 168, 1, 204); //local IP of Arduino/Teensy
  15. //unsigned int localPort = 8888; // local port to listen on (not needed for multicast)
  16. IPAddress ipMulti(239, 200, 200, 200); // ipMidi Multicast address
  17. unsigned int portMulti = 9977; // ipMidi Mutlicast port 1
  18. // buffers for receiving and sending data
  19. byte packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet
  20. byte sendBuffer1[] = {0x90, 0x14, 0x22}; // MIDI Note On to Multicast address
  21. byte sendBuffer2[] = {0x80, 0x14, 0x00}; // MIDI Note Off to Multicast address
  22. // An EthernetUDP instance to let us send and receive packets over UDP
  23. EthernetUDP Udp;
  24. /////////////////// STEPPER machines ////////////////////////
  25. const int HIGH_SPEED = 1000 ;
  26. const int HIGH_ACC = 8000 ;
  27. const int LOW_SPEED = 100 ;
  28. const int LOW_ACC = 5000 ;
  29. const int BARREL_DISTANCE = 8592 ;
  30. Atm_TeensyStep barrel_step;
  31. Stepper barrel_stepper(3, 2);
  32. StepControl barrel_controller ;
  33. Atm_analog barrel_sensor;
  34. Atm_TeensyStep pill_step;
  35. Stepper pill_stepper(6, 5);
  36. StepControl pill_controller ;
  37. void barrel_homing(){
  38. digitalWrite( 13, HIGH );
  39. barrel_stepper.setMaxSpeed(LOW_SPEED);
  40. barrel_stepper.setAcceleration(LOW_ACC);
  41. barrel_step.move(BARREL_DISTANCE);
  42. Serial.println(barrel_sensor.state());
  43. while(barrel_sensor.state()<500 && (barrel_step.state() == barrel_step.RUNNING)){ // &&
  44. //automaton.run();
  45. barrel_step.cycle();
  46. Serial.println(barrel_sensor.state());
  47. }
  48. barrel_step.stop();
  49. barrel_stepper.setPosition(0);
  50. digitalWrite( 13, LOW );
  51. }
  52. void barrel_next(){
  53. digitalWrite( 13, HIGH );
  54. barrel_stepper.setMaxSpeed(HIGH_SPEED);
  55. barrel_stepper.setAcceleration(HIGH_ACC);
  56. barrel_step.move(BARREL_DISTANCE);
  57. }
  58. ////////////// Serial command machine /////////////////////
  59. char cmd_buffer[80];
  60. Atm_command cmd;
  61. enum { CMD_TEST, CMD_BARREL_MOVE, CMD_BARREL_HOME, CMD_BARREL_NEXT };
  62. const char cmdlist[] =
  63. "test barrel_move barrel_home barrel_next";
  64. void cmd_callback( int idx, int v, int up ) {
  65. int pin = atoi( cmd.arg( 1 ) );
  66. Serial.print(v);
  67. Serial.println(" in callback");
  68. switch ( v ) {
  69. case CMD_TEST:
  70. digitalWrite( 13, HIGH );
  71. Serial.println("in test");
  72. return;
  73. case CMD_BARREL_MOVE:
  74. digitalWrite( 13, LOW );
  75. barrel_step.move(atoi( cmd.arg( 1 ) ));
  76. return;
  77. case CMD_BARREL_HOME:
  78. barrel_homing();
  79. return;
  80. case CMD_BARREL_NEXT:
  81. barrel_next();
  82. return;
  83. }
  84. }
  85. void setup() {
  86. //Configure and start ethernet module (not needed for feeder)
  87. //SPI.setSCK(27);
  88. // Ethernet.init(15);//(10)
  89. // teensyMAC(mac);
  90. // Ethernet.begin(mac, ip); // start the Ethernet and UDP:
  91. // // Udp.beginMulti(ipMulti, portMulti); // for modified Arduino library
  92. // Udp.beginMulticast(ipMulti, portMulti); // for modified Teensy Ethernet library
  93. //Start serial
  94. Serial.begin(115200); // higher Baud rate for faster refresh, CHANGE IN SERIAL MONITOR
  95. delay(2000);
  96. Serial.println("Started");
  97. cmd.begin( Serial, cmd_buffer, sizeof( cmd_buffer ) )
  98. .trace(Serial)
  99. .list( cmdlist )
  100. .onCommand( cmd_callback );
  101. pinMode(13, OUTPUT);
  102. barrel_step.trace( Serial );
  103. barrel_step.begin(barrel_stepper, barrel_controller);
  104. barrel_stepper.setMaxSpeed(LOW_SPEED);
  105. barrel_stepper.setAcceleration(HIGH_ACC);
  106. barrel_sensor.begin(A1);
  107. pill_step.trace( Serial );
  108. pill_step.begin(pill_stepper, pill_controller);
  109. pill_stepper.setMaxSpeed(HIGH_SPEED);
  110. pill_stepper.setAcceleration(HIGH_ACC);
  111. //stepper.onOnchange(Machine &machine, optional int event = 0)
  112. //stepper.cycle(1000);
  113. //barrel_step.gotoStep(10000);
  114. //controller.moveAsync(*stepper.motor);
  115. }
  116. void loop() {
  117. automaton.run();
  118. }