Хуан Тортик писал(а): Зеленый: горит все время, пока работает контроллер Красный(сигнализирует о препятствии): зажигается при появлении сигнала от TSOPа, тушится при его исчезновении
Видимо я плохо написал. Красный тушится, если после следующей пачки импульсов при проверке сигнал от тсопа не был обнаружен.
Если бы время его свечения было настолько маленькое, что его нельзя было бы увидеть, то он бы вообще никогда не работал. А у меня проблема в том, что он загорается тоько при резком появлении препятствия, а если медленно подносить, то срабатывает только на 2-3 см На сигнал от TV пульта реагирует вполне сносно
int main( void ) { //конфигурация портов DDRA = 0b11101111; DDRB = 0b11111111; PORTA = 0b11011111; PORTB = 0b00000000;
while( 1 ) { //цикл подачи пачки импульсов ик светодиодом for( char i = 0; i < 30; i++ ) { delay_us(14); // задержка 14 микросекунд, чтобы получилась частота примерно 36 кГц PORTB ^= 0x01; // начало импульса }
PORTB &= ~0x01;
if( !PINA.4 ) // проверка: если на ноге PA4 (к ней TSOP подключен) ноль (есть сигнал) PORTA.7 = 0; // то зажигаем красный светик else // если нет сигнала PORTA.7 = 1; // то красный светик не зажигаем/тушим после последнего включения
delay_us( 1000 ); //пауза между пачками импульсов }
return 0; }
Поправил код. <Сергей> * Точка с запятой не нужно ставить после блоков * В цикле for нужно обнулять переменную вначале * и просто допричесал
Использую плату Arduino Duemilanove, с атмегой 168. 1) Использую тзоп 1756. Итак. Там ракладка ножек какая? как привидена здесь? http://parts.roboclub.ru/index.shtml?ik
И тоже вопрос - сколько питания ему надо? я даю 3 вольта. Могу пять. Впрочем всё равно не фурычит))
2) использую диод - l-53f3bt (диаметр 5мм, волна 940 нм, 30 мВт). Почему то фотки его врут - на фотах у него три ножки, но это очевидный брет - диод с тремя ножками)) Так вот, у него очевидно их две. Одну сую в землю, вторую в диджитал пин. Ну, напрямую подключаю к атмеге. Код вроде написал верный, он написан в компиляторе для платы ардуино, по сути обычный си. Так вот, у меня там диод на 13-м разъёме должен гаснуть если есть препятствие. Он вообще постоянно горит.
Я сомневаюсь, что код не верен, но.. в чём тогда проблема???
int i, del=4, pause=14, num=10, val=0; /*переменные для: счётчик, время импульса, количество импульсов между пачками, количество импульсов в пачке, переменная для хранения сигнала с тсопа*/
void setup() //установка режима работы разъёмов. { pinMode (irLed, OUTPUT); // разъём 11 на вывод pinMode(Led, OUTPUT); //разъём 13 на вывод pinMode(tsop, INPUT); // разъём 8 на ввод }
void loop() //постоянно повторяющийся код {
for(i=0; i<num; i++) //цикл пофторяеца столько раз, сколько нужно импульсов { digitalWrite(irLed, HIGH); /зажигаем ик-диод/ delay(del); //ждём 0,004 секунды digitalWrite(irLed, LOW); //гасим ик-диод delay(del+1); // ждём 0,005 секунды }
val=digitalRead(tsop); //считываем значение сигнала тсопа.
if (val==HIGH) { digitalWrite(Led, HIGH); //если сигнал высокий - то есть припятствия нет, то зажигаем диод } else { digitalWrite(Led, LOW); //если сигнал низкий - то есть препятствие есть, гасим диод }
delay(pause*del); //ждём столько времени, сколько займёт пауза между пачками. }
Последний раз редактировалось bersekter 03 фев 2009, 00:35, всего редактировалось 1 раз.
либо ты неправильно понял либо тот кто объяснял сам не понимает тебе подойдёт любой ИК светодиод, плевать какой длинны волны лишь бы ИК для тсопа твоего частота должна быть 56 кГц и не иначе
секунду делим на 56000 колебаний и получаем время 1 импульса = 0,0000178 секунды делим ещё пополам и получаем время 0.0000089 секунды это время вкл состояния или выключенного так как импульс состоит из времени включенного и выключенного тоесть в твоей программе del будет равен.... примерно 0.01 а не 4
вот хотя может я гдето с нулями напутал спать охото
светодиоду важно не напряжение а ток (и 3 и 5 вольт подходят), смотри в даташите какой именно светику ток нужен, и подключай его не на прямую к выводу конротроллера, а через резистор иначе точно запалишь нафиг.