Advertisement
Guest User

Untitled

a guest
Dec 12th, 2011
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.45 KB | None | 0 0
  1.  
  2. #include <Servo.h>
  3.  
  4. #define CMD_FULL_REWIND "#"
  5.  
  6. #define CMD_CONFIRM_CONNECTION "V"
  7.  
  8. #define CMD_MEMORY "M"
  9.  
  10. #define RESPONSE_SUN_AVAILABLE "READY TO BURN"
  11. #define RESPONSE_SUN_DIMMED "NIGHT"
  12.  
  13. #define RESPONSE_FLASH "FLASH"
  14.  
  15. uint8_t * heapptr, * stackptr;
  16. void check_mem() {
  17.   stackptr = (uint8_t *)malloc(4);          // use stackptr temporarily
  18.   heapptr = stackptr;                     // save value of heap pointer
  19.   free(stackptr);      // free up the memory again (sets stackptr to 0)
  20.   stackptr =  (uint8_t *)(SP);           // save value of stack pointer
  21. }
  22.  
  23. Servo servo1;
  24. String buffer;
  25. String feedBuffer;
  26.  
  27. int cfg_base = 93;
  28. int cfg_tic = 20;
  29.  
  30. int cfg_speed = 10;
  31.  
  32. int cfg_delay = 300;
  33.  
  34. int ff = 0;
  35. int rew = 0;
  36. int pos = 0;
  37.  
  38. int servoPin = 9;
  39. int lockPin = 10;
  40. int brightnessPin = 14;
  41. int failPin = 12;
  42.        
  43. void setup() {
  44.   Serial.begin(28800);  
  45.   pinMode(lockPin,INPUT);  
  46.   pinMode(brightnessPin, INPUT);  
  47.   pinMode(failPin, OUTPUT);  
  48.   servo1.attach(servoPin);
  49.   buffer = "";
  50.   feedBuffer = "";
  51.   digitalWrite(failPin, LOW);
  52.  
  53. }
  54. void processCommand(String buffer) {
  55.    /* Confirm We Are The Sun */
  56.    if(buffer.substring(0,1)==CMD_CONFIRM_CONNECTION) {
  57.      say(RESPONSE_SUN_AVAILABLE);
  58.    }
  59.  
  60.    if(buffer.substring(0,1)==CMD_FULL_REWIND) {
  61.      rewind();
  62.    }  
  63.  
  64.    if(buffer.substring(0,1)==CMD_MEMORY) {
  65.      check_mem();
  66.      say("Memory "+String((long)heapptr)+" "+String((long)stackptr));
  67.    }
  68.  
  69. }
  70.  
  71. boolean isLocked() {
  72.   return digitalRead(lockPin) == HIGH;
  73. }
  74.  
  75. void say(String s) {
  76.   feedBuffer+=s+"\r\n";
  77. }
  78.  
  79. void feed() {
  80.   if(Serial.available()==0) { /* input queue empty */
  81.     Serial.print(feedBuffer.substring(0,1));
  82.     feedBuffer = feedBuffer.substring(1);
  83.   }
  84. }
  85.  
  86. void rewind() {
  87.   servo1.write(cfg_base+(cfg_speed));  
  88.   int steps = 140;  
  89.   while(steps>0 && !isLocked()) {
  90.     steps--;
  91.     delay(cfg_tic);
  92.   }  
  93.   servo1.write(cfg_base-cfg_speed);  
  94.   delay(cfg_tic*2);
  95.   steps = 8;
  96.   while(steps>0 && isLocked()) {
  97.     servo1.write(cfg_base-cfg_speed);
  98.     steps--;
  99.     delay(cfg_tic);
  100.     servo1.write(cfg_base);
  101.     delay(100);
  102.   }  
  103.   servo1.write(cfg_base);
  104.   pos = 0;
  105.   say(RESPONSE_SUN_DIMMED);
  106. }
  107.  
  108.  
  109.  
  110.  
  111. void loop() {
  112.  
  113.   if ( Serial.available()) {
  114.     char ch = Serial.read();    
  115.     if((ch!='\r')&&(ch!='\n')) {
  116.       buffer += ch;
  117.     }
  118.     if(ch=='\n') {
  119.       processCommand(buffer);
  120.       buffer="";
  121.     }    
  122.   }  
  123.  
  124.   feed();
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement