Advertisement
Guest User

Untitled

a guest
Apr 21st, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. //================================================================================
  2. // Pin Assignments
  3. //================================================================================
  4. //Encoder
  5. #define enkoderPinA 2
  6. #define enkoderPinB 3
  7. #define enkoderIndexPin 21
  8. //Motor
  9. #define kjørPin 4
  10. #define retningPin 10
  11. #define hurtighetPin 5
  12. //Bryter
  13. #define startknappPin 9
  14.  
  15.  
  16.  
  17. //================================================================================
  18. // Faster DigitalRead/Write
  19. //================================================================================
  20. //setup
  21. #define portOfPin(P)\
  22. (((P)>=0&&(P)<8)?&PORTD:(((P)>7&&(P)<14)?&PORTB:&PORTC))
  23. #define ddrOfPin(P)\
  24. (((P)>=0&&(P)<8)?&DDRD:(((P)>7&&(P)<14)?&DDRB:&DDRC))
  25. #define pinOfPin(P)\
  26. (((P)>=0&&(P)<8)?&PIND:(((P)>7&&(P)<14)?&PINB:&PINC))
  27. #define pinIndex(P)((uint8_t)(P>13?P-14:P&7))
  28. #define pinMask(P)((uint8_t)(1<<pinIndex(P)))
  29. //funksjoner som brukes
  30. #define pinAsInput(P) *(ddrOfPin(P))&=~pinMask(P)
  31. #define pinAsInputPullUp(P) *(ddrOfPin(P))&=~pinMask(P);digitalHigh(P)
  32. #define pinAsOutput(P) *(ddrOfPin(P))|=pinMask(P)
  33. #define digitalLow(P) *(portOfPin(P))&=~pinMask(P)
  34. #define digitalHigh(P) *(portOfPin(P))|=pinMask(P)
  35. #define isHigh(P)((*(pinOfPin(P))& pinMask(P))>0)
  36. #define isLow(P)((*(pinOfPin(P))& pinMask(P))==0)
  37.  
  38. //================================================================================
  39. // Debug
  40. //================================================================================
  41.  
  42. #ifdef DEBUG
  43. #define DEBUG_PRINT(x) Serial.print (x)
  44. #define DEBUG_PRINTDEC(x) Serial.print (x, DEC)
  45. #define DEBUG_PRINTLN(x) Serial.println (x)
  46. #else
  47. #define DEBUG_PRINT(x)
  48. #define DEBUG_PRINTDEC(x)
  49. #define DEBUG_PRINTLN(x)
  50. #endif
  51.  
  52.  
  53. //================================================================================
  54. // Variabler
  55. //================================================================================
  56.  
  57. //Encoder
  58. volatile int enkoder0Pos = 0;
  59. volatile int enkoder0PosTemp = 0;
  60. int runder = 0;
  61. int runderCW = 0;
  62. int runderCCW = 0;
  63. //Motor
  64. boolean motorStart;
  65. unsigned int fart = 10;
  66. //Misc
  67. #define DEBUG 0
  68.  
  69. //================================================================================
  70. // Main
  71. //================================================================================
  72. void setup()
  73. {
  74. ///////setup Pinns///////
  75. //Bryter
  76. pinAsInput(startknappPin);
  77. //Motor
  78. pinAsOutput(kjørPin);
  79. pinAsOutput(retningPin);
  80. pinAsOutput(hurtighetPin);
  81. //Encoder
  82. pinAsInput(enkoderPinA);
  83. pinAsInput(enkoderPinB);
  84. pinAsInput(enkoderIndexPin);
  85. //interupts
  86. attachInterrupt(0, doEnkoderA, RISING);
  87. attachInterrupt(1, doEnkoderB, RISING);
  88. attachInterrupt(2, doEnkoderI, RISING);
  89. attachInterrupt(3, doBryter, CHANGE);
  90.  
  91. //Serial Setup
  92. Serial.begin(115200);
  93.  
  94. }
  95.  
  96. //Main loop
  97. void loop()
  98. {
  99.  
  100. if (enkoder0Pos != enkoder0PosTemp) {
  101. DEBUG_PRINTLN(enkoder0Pos);
  102. enkoder0PosTemp = enkoder0Pos;
  103. }
  104.  
  105.  
  106. if (motorStart){
  107. beregnVei();
  108. }
  109. }
  110.  
  111. //================================================================================
  112. // Funksjoner
  113. //================================================================================
  114.  
  115. void beregnVei(){
  116. //kjør høyre
  117. if (enkoder0Pos > 100){
  118. digitalLow(retningPin);
  119. analogWrite(hurtighetPin, 10);
  120. return;
  121. }
  122. //kjør venstre
  123. if (enkoder0Pos == 0){
  124. digitalHigh(retningPin);
  125. analogWrite(hurtighetPin,10);
  126. }
  127. }
  128.  
  129.  
  130. //================================================================================
  131. // Interupts
  132. //================================================================================
  133. /////Encoder/////
  134. //Interrupt på stigandeflanke A
  135. void doEnkoderA()
  136. {
  137. //Agammal++;
  138. if (isHigh(enkoderPinB))
  139. {
  140. enkoder0Pos--;
  141. }
  142. }
  143.  
  144. //Interrupt på stigande flanke B
  145. void doEnkoderB()
  146. {
  147. //Bny++;
  148. if (isHigh(enkoderPinA))
  149. {
  150. enkoder0Pos++;
  151. }
  152. }
  153.  
  154. void doEnkoderI()
  155. {
  156. runder += 1;
  157.  
  158. if (enkoder0Pos++)
  159. {
  160. runderCW++;
  161. }
  162.  
  163. if (enkoder0Pos--)
  164. {
  165. runderCCW++;
  166. }
  167. }
  168.  
  169. /////Bryter/////
  170. void doBryter(){
  171. if (isHigh(startknappPin)){
  172. motorStart = true;
  173. return;
  174. }
  175. motorStart = false;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement