Advertisement
fulminator

Untitled

Jun 4th, 2013
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.88 KB | None | 0 0
  1.  
  2. //  libraries
  3. #include <Stepper.h>
  4.  
  5. //  buffer containing the data
  6. char inData[50];
  7. //  index used for buffer
  8. byte index;
  9. //  set start and end of packet of data sent
  10. #define SOP '<'
  11. #define EOP '>'
  12. //  and it's semaphore lights
  13. bool started = false;
  14. bool ended = false;
  15. //  led
  16. int led = 13;
  17. //  the 3 variables of interest (default values)
  18. int _dir = 0, _speed = 60;
  19. unsigned int _steps = 1;
  20. //  the stepper
  21. Stepper myStepper(_steps, 7,8);
  22.  
  23.  
  24. //  setup
  25. void setup(){
  26.   myStepper.setSpeed(_speed);
  27.   Serial.begin(9600);
  28.   pinMode(led, OUTPUT);
  29.   memset(inData, '\0', 50);
  30. }
  31.  
  32.  
  33. //  loop
  34. void loop() {
  35.  
  36.   readSerialData();
  37.   processPacket();
  38.    
  39.   if (_dir == 0 && _speed == 0 && _steps == 0)
  40.   {
  41.     digitalWrite(led, HIGH);
  42.     Serial.println("arduino found");
  43.   }
  44.   else
  45.   {
  46.     digitalWrite(led, LOW);
  47.     //  Print check for values
  48.     Serial.print("direction: ");
  49.     Serial.print(_dir);
  50.     Serial.print(" speed: ");
  51.     Serial.print(_speed);
  52.     Serial.print(" steps: ");
  53.     Serial.println(_steps);
  54.    
  55.     //  command the stepper
  56.     //  continuous rotation (_steps == 0)
  57.     if (_steps == 0)
  58.     {
  59.       myStepper.setSpeed(_speed);
  60.       if (_dir == 0)
  61.       {
  62.         while (_steps != 1)
  63.         {
  64.           myStepper.step(1);
  65.           readSerialData();
  66.           processPacket();
  67.           resetPacket();
  68.         }
  69.       }
  70.       else
  71.       {
  72.        while (_steps != 1)
  73.         {
  74.           myStepper.step(-1);
  75.           readSerialData();
  76.           processPacket();
  77.           resetPacket();
  78.         }
  79.       }
  80.     }
  81.     //  explicit rotation (_steps == other value than 0)
  82.     else {
  83.       myStepper.setSpeed(_speed);
  84.       if (_dir == 0)
  85.       {
  86.         myStepper.step(_steps);
  87.         delay(500);
  88.       }
  89.       else
  90.       {
  91.         myStepper.step(-_steps);
  92.         delay(500);
  93.       }
  94.     }
  95.   }
  96.  
  97.   resetPacket();
  98.  
  99. }
  100.  
  101. //  saving serial data into buffer
  102. void readSerialData()
  103. {
  104.   while (Serial.available() > 0)
  105.   {
  106.     char inChar = Serial.read();
  107.    
  108.     if (inChar == SOP)
  109.     {
  110.       index = 0;
  111.       inData[index] = '\0';
  112.       started = true;
  113.       ended = false;
  114.     }
  115.     else if (inChar == EOP)
  116.     {
  117.       ended = true;
  118.       break;
  119.     }
  120.     else
  121.     {
  122.       if (index < 49)
  123.       {
  124.         inData[index] = inChar;
  125.         index++;
  126.         inData[index] = '\0';
  127.       }
  128.     }
  129.   }
  130. }
  131.  
  132. //  process the packet
  133. void processPacket()
  134. {
  135.   //  check packet
  136.   if (started && ended)
  137.   {
  138.     //  find _dir, _speed and _steps
  139.     char * pch;
  140.     pch = strtok (inData, ",");
  141.     if (pch != NULL)
  142.     {
  143.       _dir = atoi(pch);
  144.       _speed = atoi(strtok(NULL, ","));
  145.       _steps = atoi(strtok(NULL, ","));
  146.     }
  147.   }
  148. }
  149.  
  150. //  reset for the next packet
  151. void resetPacket()
  152. {
  153.   started = false;
  154.   ended = false;
  155.   index = 0;
  156.   inData[index] = '\0';
  157.   //  _steps = 1;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement