как выводить напряжение с 9-го пина в последовательный порт в этом примере?

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

  1. andrrpetr

    andrrpetr Нуб

    как выводить напряжение с 9-го пина в последовательный порт в этом примере?
    void setup()
    {
    pinMode(9, OUTPUT);
    }
    void loop()
    {
    analogWrite(9,0);
    delay(1000);
    analogWrite(9,10);
    delay(1000);
    analogWrite(9,40);
    delay(1000);
    analogWrite(9, 100 );
    delay(1000);
    analogWrite(9,40);
    delay(1000);
    analogWrite(9,10);
    delay(1000);
    }


    как можно это сделать?
    какие строчки кода надо написать?
    спасибо
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    где код? ;)
     
  3. ostrov

    ostrov Гуру

    Что значит выводить напряжение в последовательный порт? Печатать что ли сколько выводится в данный момент? Тогда вот с помощью этого метода, там все просто и есть примеры.
     
  4. andrrpetr

    andrrpetr Нуб

    спасибо за ответ )

    у меня к пин 9 подключен светодиод
    хотел чтобы печатались аналоговые значение с пин 9 , т.е. -- 0, 10,40, 100, 40,10,0,10 ... и т.д.

    но видимо просто сделать это не получится )
     
  5. Vetrinus

    Vetrinus Гик

    "Этот метод" - это не метод, а объект. Просто чтобы в заблуждение не вводить попусту. Вы, наверное, хотели дать ссылку на Serial.println?
    А если совсем просто, то так:
    Код (C++):
    Serial.println(analogRead(9));
    Не забудьте про Serial.begin();
     
  6. andrrpetr

    andrrpetr Нуб

    спасибо )
    я так и делал сначала:

    void setup()
    {
    pinMode(9, OUTPUT);
    Serial.begin(9600);
    }
    void loop()
    {
    analogWrite(9,0);
    Serial.println(analogRead(9));
    delay(1000);
    analogWrite(9,10);
    Serial.println(analogRead(9));
    delay(1000);
    analogWrite(9,40);
    Serial.println(analogRead(9));
    delay(1000);
    analogWrite(9, 100 );
    Serial.println(analogRead(9));
    delay(1000);
    analogWrite(9,40);
    Serial.println(analogRead(9));
    delay(1000);
    analogWrite(9,10);
    Serial.println(analogRead(9));
    delay(1000);
    }

    но я хотел чтобы монитор показывал те значния с пин9 : 0, 10,40,100,40,10,0, 10 и т.д.

    а там показывет такое: )
    275
    276
    274
    270
    266
    273
    276
    278
    275
    272
    269
    276

    к пин9 я подключаю светодиод без резистора (т.к. максиальное значение analogWrite(100))

    я понимаю, что на пин9 -- ШИМ, и аналоговый сигнал у меня от 0 до100 , а на аналогвый вход например A1 считывает от 0 до 1023,


    но как сделать тогда?
     
  7. Vetrinus

    Vetrinus Гик

    Так, что-то я вас не понимаю.. Давайте определяться.
    1)Вы хотите считывать с ацп значения с цифрового пина?
    2) Что за "те" значения?
    3) Пин микроконтроллера у вас сконфигурирован как выход, что именно вы хотите увидеть?
    P.S. Если вы думаете, что analogWrite понижает напряжение на логическом пине — вы ошибаетесь. Вы манипулируете только частотой появления на этом пине меандра, а на выходе там напряжение питания (5V)
    UPD. Я понял так: вы хотите плавно помигать светодиодом, и хотите знать, в какой момент времени какой аргумент функции analogWrite() у вас работает в данный момент?
    P.S. Кто-нибудь из знающих, проясните, пожалуйста, момент со считыванием значения с АЦП из цифрового пина. А то я тут увидел, что в прошлом сообщении написал analogRead с цифрового пина, а у человека еще и заработало и что-то показывает.
     
  8. Unixon

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

    Вместо чтения АЦП библиотека что-то свое делает на цифровом пине, нужно код смотреть.
     
  9. Vetrinus

    Vetrinus Гик

    А оно (АЦП) там есть, на цифровых пинах?
     
  10. Unixon

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

    Нет его там, библиотека возвращает непонятно что и непонятно откуда.

    p.s. На Leonardo больше каналов АЦП, там может и совпадает с каким-нибудь.
     
    Vetrinus нравится это.
  11. andrrpetr

    andrrpetr Нуб

    да, точно так )
    и как сделать тогда?
     
  12. Unixon

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

    Код (C++):
    const int N=6;
    int L[N] = {0,10,40,100,40,10};

    void loop()
    {
      for (int i = 0; i < N; i++)
      {
        analogWrite(pin,L[i]);
        Serial.println(L[i]);
        delay(1000);
      }
    }
     
     
  13. Unixon

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

    Считать через АЦП вы ничего толком не сможете, поскольку analogWrite() на этом пине не выводит определенное напряжение через ЦАП, а имитирует среднее напряжение путем генерации ШИМ сигнала с нужной скважностью.
     
  14. andrrpetr

    andrrpetr Нуб

    ну так то да, ) можно было это сделать

    я просто хотел считывать это, но теперь понятно, что это очень сложно или невозможно
    большое спасибо )

    крутой форум
     
  15. Unixon

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

    Просто на большинстве плат нет АЦП и ЦАП одновременно на одних и тех же пинах МК, а так то конечно можно было бы прочитать. На Iskra JS на A4/A5 это бы прокатило, наверное, если порт можно одновременно закоммутировать на разные блоки внутри МК, но это нужно документацию на STM32 смотреть, позволяет ли он так делать.
     
  16. andrrpetr

    andrrpetr Нуб

    спасибо )
     
  17. ZAZ-965

    ZAZ-965 Гуру

    "Этот метод" - это не метод, не объект, а класс. Просто чтобы пофлудить.;)

    @andrrpetr, можно попробовать генерировать ШИМ на девятом пине, а считывать полученное напряжение с помощью АЦП (например, пином А0, после интегрирующей RC цепочки )
     
  18. ostrov

    ostrov Гуру

    В справочнике вообще написано, что это "набор функций" и никого это пока что в заблуждение не ввело. А по АЦП еще можно глянуть вот подобную штуку.
     
  19. Vetrinus

    Vetrinus Гик

    "Этот метод" - это не класс, а его экземпляр, который вполне позволительно назвать объектом)
     
    Последнее редактирование: 28 ноя 2016
  20. ostrov

    ostrov Гуру

    И где объявляется экземпляр класса Serial?