asd
uint8_t index = 0;
uint8_t tx_index = 0;
uint8_t TX_Buffer[] = {0x41,0x49,0x44,0x53,0x13,0,0,0,0,0,'\n'};
uint8_t RX_Buffer[] = {0,0,0,0,0};
uint8_t RV_Buffer[] = {0,0,0,0,0};
double value = 0;
double value_old = 0;
double winkel = 0;
char fnum[20];
#include <math.h>
void portconfig(){
UBRR0H = 0;
UBRR0L = 103;
DDRB |= (1<<PB5);
DDRB |= (1<<PB3);
UCSR0B |= (1<<RXEN0);
UCSR0B |= (1<<RXCIE0);
sei();
TCCR1B = (1<<CS12)|(1<<WGM12);
OCR1A = 62500;
TIMSK1 = (1<<OCIE1A);
}
int parseint(uint8_t number[]){
int numbersize = 5;
int result = 0;
boolean dotoccured = false;
int nachkomma = 0;
for (int x= 0; x<numbersize; x++){
//checks if the char is betwenn "0" and "9"
if (number[x]>=0x31 && number[x] <= 0x39){
result = result*10 + number[x]-0x30;
if ( dotoccured)
++nachkomma;
}
else{
if(number[x] == '.' || number[x] == ','){
dotoccured = true;
}
}
}
result = result / pow(10,nachkomma);
return result;
}
int main(){
value_old = value;
portconfig();
while(1){
UCSR0B |= (1<<RXEN0);
if (value_old != value){
PORTB ^= (1<<PB3);
UCSR0B |= (1<<TXEN0);
tx_index = 0;
UDR0 = TX_Buffer[tx_index++];
UCSR0B &= ~(1<<RXCIE0);
UCSR0B |= (1<<TXCIE0);
value_old = value;
}
}
}
ISR(USART_RX_vect){
uint8_t read_byte = UDR0;
value = parseint(RV_Buffer);
winkel = value * 90;
PORTB = (1<<PB5);
TX_Buffer[5] = RV_Buffer[0];
TX_Buffer[6] = RV_Buffer[1];
TX_Buffer[7] = RV_Buffer[2];
TX_Buffer[8] = RV_Buffer[3];
TX_Buffer[9] = RV_Buffer[4];
if(index>5 || read_byte == 13){
RX_Buffer[0] = 0;
RX_Buffer[1] = 0;
RX_Buffer[2] = 0;
RX_Buffer[3] = 0;
RX_Buffer[4] = 0;
index = 0;
}
if(read_byte!='!'&&read_byte!=13){
RX_Buffer[index] = read_byte;
index++;
}
if(read_byte == '!'){
PORTB ^= (1<<PB5);
UCSR0B &= ~(1<<RXEN0);
RV_Buffer[0] = RX_Buffer[0];
RV_Buffer[1] = RX_Buffer[1];
RV_Buffer[2] = RX_Buffer[2];
RV_Buffer[3] = RX_Buffer[3];
RV_Buffer[4] = RX_Buffer[4];
RX_Buffer[0] = 0;
RX_Buffer[1] = 0;
RX_Buffer[2] = 0;
RX_Buffer[3] = 0;
RX_Buffer[4] = 0;
}
}
ISR(USART_TX_vect){
if(tx_index>10){
UCSR0B |= (1<<RXEN0);
UCSR0B &= ~(1<<TXEN0);
UCSR0B |= (1<<RXCIE0);
UCSR0B &= ~(1<<TXCIE0);
}
//UDR0 = fnum[tx_index++];
UDR0 = TX_Buffer[tx_index++];
}