Подробная информация по модулю на странице: [[Модули OpenRobotics и документация к ним]]
Все вопросы дальнейшей доработки модуля и почему были выбраны те или иные технические решения - в теме
roboforum.ruТехнический форум по робототехнике. |
|
|
#include "defines.h"
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "uart.c"
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
int main(void)
{
uart_init();
stdout = stdin = &uart_str;
printf("Linetracer ready 1!\n");
DDRC=0x20;
DDRD=0x30;
_delay_ms(5000);
//PWM, Phase and frequency correct, TOP=ICR1
TCCR1A=0xA0; //clear on up-counting, set on down-counting
TCCR1B=0x12; //Clock prescaler 1/8
ICR1=9216; //Set 50Hz frequency
uint16_t baseA=(153*2+1)*23/10;
uint16_t baseB=(156*2+1)*23/10;
OCR1A=0;
OCR1B=0;
while(1==1){
DDRA=0xFF;
PORTA=0xFF;
DDRC|=0xC0;
PORTC|=0xC0;
_delay_us(1000);
DDRA=0x00;
PORTA=0x00;
DDRC&=~0xC0;
PORTC&=~0xC0;
PORTC|=0x20;
_delay_us(4000);
int x=PINA;
int y=PINC>>6;
if(y==1){ y=2; }else if (y==2){y=1;};
x=x+(y<<8);
int pos1=-1;
int pos2=10;
for(int i=0; i<10; i++){
int j=x&0x01;
if(j==1 && pos1==-1){ pos1=i; };
if(j==1){ pos2=i; };
printf("%d",j);
x=x>>1;
};
printf("\n");
int pos=(pos2+pos1)/2;
printf("pos=%d\n\n",pos);
_delay_ms(1000);
};
}
int x = PINA;
int y = PINC>>6;
_delay_us(500);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11