Проблема с данным датчиком, читаю его значения через UART и получаю, что он не видит черной полосы (расстояние между датчиком и поверхностьтю около 5мм):
0000000000
Когда поднимаю датчик, т.е. увеличиваю расстояние между датчиком и поверхностью, тополучаю:
1111111111
Т.е. датчик то вроде работает, светодиод C5 горит, т.е. на ножку LED-on идет логическая единица.
И еще, поднимаю робота вместе с датчиком над поверхностью так, чтобы датчик видел белый лист под собой (и показывал 0000000000), подношу вырезанную черную полоску и получаю 0000010000 или 0010000000, или подношу черный маркер (не важно, чтот маркер, важно что он черный и цилиндрический) и получаю примерно такую же картину. Как только ставлю на землю и полоску и робота сразу вс нули, как-будто ему главно, чтобы полоску распологалась не перпендикулярно датчику...
Не понимаю в чем дело.
Исходный код проверки датчика через ваш UART модуль (USB-UART)
- Код: Выделить всё • Развернуть
#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);
};
}
Добавлено спустя 37 минут 31 секунду:Уже не так трагично. Датчик не реагирует на поверхность - лист A4 с нарисованной маркером черной линии шириной 2 см, зато видит черную линию если поднести черную клеищую бумагу (она является более глянцевой), кто экспериментировал с этим датчиком и разными поверхностями отзовитесь!