Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2018, 17:36   #1
shiva787
 
Регистрация: 24.11.2018
Сообщений: 5
По умолчанию Загадочный делитель напряжения.

Делитель напряжения из двух резисторов разного номинала подключен между пинами D2 и D3, а средняя точка подключена к аналоговому пину A0, как показано на схеме:
https://ucarecdn.com/9bf878c0-7f3f-4...-761083c28bd8/
Значение напряжения измеряется при разных комбинациях настроек пинов. Считать, что напряжение на пине в выходном режиме в точности равно либо 0, либо напряжению питания (хотя в реальных схемах, логический "0" всегда чуть выше 0V, а логическая "1" чуть ниже напряжения питания). Сопротивление внутреннего подтягивающего резистора (на любом пине) принять за 10кОм.

Нужно написать программу, которая рассчитывает все возможные напряжения, которые можно намерить на A0, изменяя настройки пинов. В этой задаче не используется мини-симулятор Ардуино, вы просто пишете код на любом удобном для вас языке.

На входе программы: два числа через пробел - сопротивления резисторов R1 и R2,
На выходе: на первой строке - число значений в ответе, на второй строке - последовательность целых чисел в диапазоне 0..1023, которые можно было бы получить функцией analogRead(A0) при различных настройках пинов. Все числа в ответе должны быть на одной строке через пробел, упорядочены по возрастанию, повторяющиеся значения удалены. Допускается отклонение вычисленных значений на 1 в любую сторону.

Мой код:
Код:
#include <iostream>
#include <set>
#include <cmath>
using namespace std;
int main() {
    set <int> s;
    int R1, R2; 
    cin>>R1>>R2;
    
    s.insert(  (R1 * 1023) / (R1 + R2)); //272
    s.insert(  (R1 * 1023) / (R1 + 10 )); // 558
    s.insert(  (R1 * 1023) / (R1 + R2 + 10)); // 223   

    
    s.insert(  (R2 * 1023) / (R1+R2)); // 750
    s.insert(  (R2 * 1023) / (R2 + 10)); // 785
    s.insert(  (R2 * 1023) / (R1 + R2 + 10)); // 613
    
    s.insert(  (R1 * 1023 ) / (R1)); // 1023
    s.insert(  (0 ) / (R1+0)); // 0

    
    cout<<s.size()<<endl;
    for(auto x: s) cout<<x<<" ";
    
        
}
Нам нужно понять, какой может быть выход на пине a0, т.е. какое может быть напряжение в цепи. Напряжение зависит от настройки пинов: input output или input_pullup.

В моём коде нет варианта, когда оба pinа настроенны на input pull up.

Совсем не понимаю, что делать дальше. Готов оплатить
shiva787 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загадочный баг blacktener Общие вопросы по Java, Java SE, Kotlin 4 20.02.2014 19:52
загадочный куь warca Паскаль, Turbo Pascal, PascalABC.NET 6 14.12.2011 21:24
Загадочный тип PChar, критика OCTAGRAM Обсуждение статей 4 11.11.2009 10:25
Загадочный NMSMTP InseR Работа с сетью в Delphi 5 13.02.2009 08:14
загадочный цикл semantics Общие вопросы Delphi 2 30.05.2008 14:00