Порты ввода и вывода

Тема в разделе "Arduino & Shields", создана пользователем arcon, 28 ноя 2016.

  1. arcon

    arcon Нуб

    Народ! нужна ваша помощь. Осваиваю порты ввода/вывода. Написал программку для проверки:
    void setup() {
    // put your setup code here, to run once:

    Serial.begin(115200);
    }

    void loop() {
    // put your main code here, to run repeatedly:
    Serial.begin(115200);
    long val = Serial.parseInt();
    if ( val < 4)
    {
    DDRB = B00000000; //устанавливаем 13 и 12 пин на вход
    PORTB = B00000000; // z состояние
    }

    if(val >= 4){
    DDRB = B11000000; //устанавливаем 13 на вход и 12 пин на выход
    PORTB = B11000000; //1 на выходе
    }
    }

    Не понимаю, можно ли в программе переключать DDRB с входа на выход по условию? И если залить эту программу в ардуинку, то при посылки значения больше 4 светодиод L (pin 13) горит пару секунду и гаснет,а задумывал чтобы он горел постоянно или гас при значении меньше 4.
     
  2. rkit

    rkit Гуру

    Может вам рановато в такой низкий уровень лезть? Научитесь хоть просто ардуино программировать. В таком маленьком коде две логические ошибки, и оформлено криво. А проблема в том, что parseInt возвращает 0 по таймауту.
     
  3. arcon

    arcon Нуб

    Рано это точно. Разобрался как зажигать светодиод и теперь хочу разобраться с портами, так как нужно переключать одну ножку в z состояние. А какие логические ошибки?
     
  4. VITAL_P

    VITAL_P Нерд

    Вообще правильным направлением идет автор. Вот только поспешил не изучив синтаксис.
    DDRB = 0b00000000; //устанавливаем 13 и 12 пин на вход
    так правильно... и в этом случае ты управляешь не пином а всем портом, что порой чревато:(
    DDRB&=~(1<<6|1<<7);
    так ты обнуляешь 7и8 пин.
    http://microsin.net/programming/avr/accessing-avr-ports-with-winavr-gcc.html
    тут читай.