|  | roboforum.ruТехнический форум по робототехнике. |  | 

Хуан Тортик писал(а):
Зеленый: горит все время, пока работает контроллер
Красный(сигнализирует о препятствии): зажигается при появлении сигнала от TSOPа, тушится при его исчезновении





// vim:set ts=4 sw=4 et:
#include <io.h> // -> <tiny26.h>
#include <delay.h>
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;
}

int tsop = 8; //tsop на разъёме 8
int irLed = 11;  //ик-диод на разъёме 11
int Led = 13; //обычный диод на разъёме 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 писал(а):Как я понимаю это 20 милиампер. Ииии... как расчитать нужный резистор???


Вернуться в Новичкам или основы основ роботостроения.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0