Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <string.h>
- #include <stdio.h>
- void initialiseUART(void);
- void initisliseIO(void);
- void sendNumber(int number);
- void sendString(char *stringToSend);
- void transmitChar(unsigned char data);
- int8_t readEncoder(void);
- void delay(uint32_t ms);
- void newLine(void);
- int main(void)
- {
- initialiseUART();
- initisliseIO();
- uint8_t number = 128;
- while (1)
- {
- int8_t direction = readEncoder();
- switch(direction)
- {
- case 1:
- if(number == 255)
- {
- ;
- }
- else
- {
- sendString("\x1B[2J");
- sendString("\x1B[H");
- sendNumber(++number);
- newLine();
- }
- break;
- case -1:
- if(number == 0)
- {
- ;
- }
- else
- {
- sendString("\x1B[2J"); //clear screan
- sendString("\x1B[H"); // cursor to home
- sendNumber(--number);
- newLine();
- }
- break;
- default:
- break;
- }
- }
- }
- void newLine(void)
- {
- transmitChar(10);
- transmitChar(13);
- }
- void initialiseUART(void)
- {
- uint16_t baud = 103;
- UBRR0H = (baud >> 8);
- UBRR0L = baud;
- UCSR0B |= (1<< TXEN0 | 1 << RXEN0);
- }
- void initisliseIO(void)
- {
- DDRC &= ~(1 << DDC0 | 1 << DDC1);
- }
- void sendNumber(int number)
- {
- char temp[10];
- sprintf(temp, "%d", number);
- sendString(temp);
- }
- void sendString(char *stringToSend)
- {
- int lenght =strlen(stringToSend);
- for(int i = 0; i < lenght; i++)
- {
- transmitChar(stringToSend[i]);
- }
- }
- void transmitChar(unsigned char data)
- {
- while( !(UCSR0A & (1 << UDRE0)) ); // or while( (UCSR0A & (1 << UDRE0)) ==0 );
- UDR0 = data;
- }
- int8_t readEncoder(void)
- {
- int8_t states[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
- static uint8_t state = 0;
- state <<=2;
- state |= (PINC & (1 << PINC0 | 1 << PINC1));
- //Make sure channel a is off
- if((PINC & (1 << PINC0)) !=0)
- {
- //make sure channel b is off
- if((PINC & (1 << PINC1)) !=0)
- {
- return states[(state & 0x0F)]; //mask the high nibble 0
- }
- }
- return 0;
- }
- void delay(uint32_t ms)
- {
- uint32_t i = 471 * ms;
- while(--i > 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement