Ошибка компиляции аттини 13

Тема в разделе "Микроконтроллеры AVR", создана пользователем blackflash2009, 29 янв 2022.

  1. При компиляции скетча для аттини 13 выпадает ошибка ругается на это "dCO = analogRead(PB3);"
    C:\Users\����\AppData\Local\Arduino15\packages\MicroCore\hardware\avr\2.2.0\cores\microcore/Arduino.h:102:11: note: initializing argument 1 of 'int16_t analogRead(analog_pin_t)'
    int16_t analogRead(analog_pin_t pin);
    ^~~~~~~~~~
    exit status 1
    invalid conversion from 'int' to 'analog_pin_t' [-fpermissive]

    код прилагаю
    Код (C++):
    /*Контроль уровня газа и сигнализация в случае опасности.
    Алгоритм работы:
    ---Прогрев датчика и замер нормальной концентрации газа.
    ---Пауза
    ---Прогрев датчика и замер концентрации газа.
    ---В случае превышения концентрации  пищим тревогу.
    ---И так в цикле.*/

    //               AtTity13
    //                 ----
    // ADC0 (D5) res 1|    |8 Vcc
    // ADC3 (D3) PB3 2|    |7 PB2 (D2) ADC1
    // ADC2 (D4) PB4 3|    |6 PB1 (D1) PWM1
    //           GND 4|    |5 PB0 (D0) PWM0
    //                 ----
    // * PB0-LED
    // * PB1-BUZZER
    // * PB3-MQ7
    // * PB4-key MQ7
    #include <avr/delay.h> //уже есть в ИДЕ подключать не нужно

    #define porog 100      //порог для тревоги
    int dCO = 0;           //переменная уровня СО
    int norm_dCO = 0;      //переменная нормального уровня СО
    byte flag_trevoga = 0; //флаг тревоги

    void setup() {
      DDRB |= (1 << 0);     // устанавливаем вывод PB0 как выход
      DDRB |= (1 << 1);     // устанавливаем вывод PB1 как выход
      DDRB |= (1 << 4);     // устанавливаем вывод PB1 как выход
      DDRB |= (0 << 3);     // устанавливаем вывод PB3 как вход
      PORTB &= ~(1 << 0); // устанавливаем низкий уровень на выводе PB0
      PORTB &= ~(1 << 1); // устанавливаем низкий уровень на выводе PB1
      PORTB &= ~(1 << 4); // устанавливаем низкий уровень на выводе PB4
      progrev ();
      //при сиарте меряем уровень СО десять раз находим среднее и принимаем его нормальным
      PORTB |= (1 << 0);  // включаем LED
      for (int i = 0; i <= 10; i++) {
        dCO = analogRead(PB3);
        norm_dCO = norm_dCO + dCO;
        _delay_ms(10);
      }
      norm_dCO = norm_dCO / 10;
      PORTB &= ~(1 << 4); //выключаем питание датчика
      PORTB &= ~(1 << 0); // выключаем LED
      //##################
    }

    void loop() {
      progrev ();
      PORTB |= (1 << 0);  // включаем LED
      _delay_ms(1000);
      dCO = analogRead(PB3);
      PORTB &= ~(1 << 4); //выключаем питание датчика
      PORTB &= ~(1 << 0); // выключаем LED
      if (dCO > norm_dCO + porog) { //Если превышен уровень СО
        flag_trevoga = 1;
      }
      if (dCO < norm_dCO + porog) { //Если не превышен уровень СО
        flag_trevoga = 0;
      }
      for (byte i = 0; i < 30; i++) { // пауза 30сек
        _delay_ms(1000);
        if (flag_trevoga == 1) {
          trevoga ();
        }
      }
    }

    void progrev () { // Греем датчик 30сек
      PORTB |= (1 << 4);  //включаем питание датчика
      for (byte i = 0; i < 30; i++) {
        _delay_ms(1000);
        if (flag_trevoga == 1) {
          trevoga ();
        }
      }
    }

    void trevoga () { //пищим
      for (int i = 0; i < 1000; i++) {
        PORTB |= (1 << 1);  //включаем Buzzer
        _delay_us(100);
        PORTB &= ~(1 << 1);  //выключаем Buzzer
        _delay_us(100);
      }
    }
     
  2. SergeiL

    SergeiL Оракул Модератор

    А если так:
    Код (C++):
    analogRead(A3)
     
    DetSimen нравится это.
  3. (A3) помогло будет интересно ано так работать только )
     
  4. ZAZ-965

    ZAZ-965 Гуру

    Рокки1945 нравится это.
  5. parovoZZ

    parovoZZ Гуру

    PB3 - таких пинов никогда не было в дурине.
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Дак это не Дурина а Тини13.
    У меня работает так— analogRead(3)
     
  7. Kakmyc

    Kakmyc Нерд

    Если так важно что бы было именно "PB3" , то тогда такой вариант:
    analogRead(PIN_PB3);