Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. void initialiseUART(void);
  6. void initisliseIO(void);
  7. void sendNumber(int number);
  8. void sendString(char *stringToSend);
  9. void transmitChar(unsigned char data);
  10. int8_t readEncoder(void);
  11. void delay(uint32_t ms);
  12. void newLine(void);
  13.  
  14.  
  15. int main(void)
  16. {
  17. initialiseUART();
  18. initisliseIO();
  19.  
  20. uint8_t number = 128;
  21.  
  22. while (1)
  23. {
  24. int8_t direction = readEncoder();
  25. switch(direction)
  26. {
  27. case 1:
  28. if(number == 255)
  29. {
  30. ;
  31. }
  32. else
  33. {
  34. sendString("\x1B[2J");
  35. sendString("\x1B[H");
  36. sendNumber(++number);
  37. newLine();
  38. }
  39. break;
  40. case -1:
  41. if(number == 0)
  42. {
  43. ;
  44. }
  45. else
  46. {
  47. sendString("\x1B[2J"); //clear screan
  48. sendString("\x1B[H"); // cursor to home
  49. sendNumber(--number);
  50. newLine();
  51. }
  52. break;
  53. default:
  54. break;
  55. }
  56. }
  57. }
  58.  
  59. void newLine(void)
  60. {
  61. transmitChar(10);
  62. transmitChar(13);
  63. }
  64.  
  65. void initialiseUART(void)
  66. {
  67. uint16_t baud = 103;
  68. UBRR0H = (baud >> 8);
  69. UBRR0L = baud;
  70.  
  71. UCSR0B |= (1<< TXEN0 | 1 << RXEN0);
  72. }
  73.  
  74. void initisliseIO(void)
  75. {
  76. DDRC &= ~(1 << DDC0 | 1 << DDC1);
  77. }
  78.  
  79. void sendNumber(int number)
  80. {
  81. char temp[10];
  82.  
  83. sprintf(temp, "%d", number);
  84. sendString(temp);
  85. }
  86.  
  87. void sendString(char *stringToSend)
  88. {
  89. int lenght =strlen(stringToSend);
  90. for(int i = 0; i < lenght; i++)
  91. {
  92. transmitChar(stringToSend[i]);
  93. }
  94. }
  95.  
  96. void transmitChar(unsigned char data)
  97. {
  98. while( !(UCSR0A & (1 << UDRE0)) ); // or while( (UCSR0A & (1 << UDRE0)) ==0 );
  99. UDR0 = data;
  100. }
  101.  
  102. int8_t readEncoder(void)
  103. {
  104. int8_t states[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
  105. static uint8_t state = 0;
  106.  
  107. state <<=2;
  108. state |= (PINC & (1 << PINC0 | 1 << PINC1));
  109.  
  110. //Make sure channel a is off
  111. if((PINC & (1 << PINC0)) !=0)
  112. {
  113. //make sure channel b is off
  114. if((PINC & (1 << PINC1)) !=0)
  115. {
  116. return states[(state & 0x0F)]; //mask the high nibble 0
  117. }
  118. }
  119. return 0;
  120. }
  121.  
  122. void delay(uint32_t ms)
  123. {
  124. uint32_t i = 471 * ms;
  125. while(--i > 0);
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement