Оператор if с несколькими условиями

chainik
Offline
Зарегистрирован: 04.01.2017

Всем привет!

Помогите чайнику

Задача получить постоянно на выходе №9 - 2,3В, при входном сигнале на входе №7 - 3,0В, при входном сигнале на входах №7 и №8 - 4,1В

int in1Pin = 7; 
int in2Pin = 8; 
int outpin = 9;                
 
void setup() 
{ 
  pinMode(outpin, OUTPUT);      //устанавливаем 9 контакт в режим вывода
  pinMode(in1Pin, INPUT); 
  pinMode(in2Pin, INPUT); 
}

void loop()
{
  if (digitalRead(in1Pin) == HIGH)
      { 
    analogWrite(9, 153);
      }   
        else if (digitalRead(in1Pin) == HIGH && digitalRead(in2Pin) == HIGH)
          {
            analogWrite(9, 209);
          }
else
{
 analogWrite(9, 118);
}
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

chainik пишет:

Задача получить постоянно на выходе №9 - 2,3В, при входном сигнале на входе №7 - 3,0В, при входном сигнале на входах №7 и №8 - 4,1В

Это невозможно.

Ищите другой способ сделать то, что Вам нужно.

chainik
Offline
Зарегистрирован: 04.01.2017

ЕвгенийП пишет:

chainik пишет:

Задача получить постоянно на выходе №9 - 2,3В, при входном сигнале на входе №7 - 3,0В, при входном сигнале на входах №7 и №8 - 4,1В

Это невозможно.

Ищите другой способ сделать то, что Вам нужно.

Может циклом FOR или что то подобное?

неужели никак нельзя это сделать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы по русски понимаете? Посмотрите в словаре слово "невозможно".

chainik
Offline
Зарегистрирован: 04.01.2017

По-руссски понимаю.

Можете объяснить почему невозможно?

А если так?

int in1Pin = 7; 
int in2Pin = 8; 
int outpin = 9;                
 
void setup() 
{ 
  pinMode(outpin, OUTPUT);      //устанавливаем 9 контакт в режим вывода
  pinMode(in1Pin, INPUT); 
  pinMode(in2Pin, INPUT); 
}

void loop()
{
   while (digitalRead(in1Pin) == HIGH)
          {
             while(digitalRead(in2Pin) == HIGH)
                 {
                     analogWrite(9, 209);
                 }
             analogWrite(9, 153);
            
          }
          
     
 analogWrite(9, 118);
 
 
}

 

CARLOS
CARLOS аватар
Offline
Зарегистрирован: 09.11.2016

 

void loop()
{
   while (digitalRead(in1Pin) == HIGH)
          {
             while(digitalRead(in2Pin) == HIGH)
                 {
                     analogWrite(9, 209);
                 }
             analogWrite(9, 153);
            
          }
          
     
 analogWrite(9, 118);
 
 
}

 

analogWrite(pin, value)

Параметры
  • pin: порт вход/выхода на который подаем ШИМ сигнал.
  • value: период рабочего цикла значение между 0 (полностью выключено) and 255 (сигнал подан постоянно) - это не значение напряжения в вольтах

Программно не возможно, так как с завода ардуина выпускается с постояными напряжениями на портах - вам надо решать проблему преобразования напряжения железом (по полученному сигналу с контроллера )

 

[/quote]

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

chainik пишет:

По-руссски понимаю.

Похоже, нет. Иначе бы не спрашивали

chainik пишет:

А если так?

потому что слово "невозможно" предполагает "никак". Говорил же - посмотрите в словаре!

chainik пишет:

Можете объяснить почему невозможно?

Ну, вот с этого вопроса и надо было начинать.

Потому, что на выходы, как Вы их назвали, данного контроллера можно выдать либо 0В, либо напряжение питания (обычно 5В или 3.3В).  На некоторые выходы (не на все) можно выдать т.н. ШИМ - это те же самые 0В и напряжение питания, но не постоянные а все время прыгающие с 0 до питания и обратно с некоторой частотой и скважность.

И ничего другого туда выдать нельзя - ни  2,3В, ни - 4,1В. Ну, не умеет контроллер этого! Забудьте.

В принципе напряжения типа 2,3В, 4,1В можно сделать из ШИМ, но это надо именно делать - нужна доплнительная схема из трёх деталей - на самом выходе получить такие напряжени нельзя никак.

 

evgta
Offline
Зарегистрирован: 02.09.2016

Можно кренки поставить и выбирать кренку с нужным уровнем напряжения

nik182
Offline
Зарегистрирован: 04.05.2015

А можно взять http://arduino.ru/Hardware/ArduinoDue с двумя ЦАП и иметь два любых напряжения. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы бы написали чего Вам точно нужно, а главное, что Вы потом собираетесь делать с этими напряжениями, мож Вам помогли бы чем-нибудь. Сказали бы как можно их попроще получить.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

1. Вот модель того, что можно получить на выходе Ардуино.

Там, где написано Pulse выход ШИМ от контроллера. Зеленый вольтметр (№1 его показывает. Для примера настроено 15% ШИМ. Это около 0.7 В.

резистор 100 Ом и конденсатор 220 мкФ создают интегрирующую цепочку, или фильтр, как будет угодно. Сопротивление 2К - нагрузка. Вольтметр номер 2 (синий) показывает гапряжение на нагрузке.

 

 

2. Вот картинка с эмулятора.

параметры фильтра зависят от нагрузки. При некоторых условиях фильтр невозможно сделать.

Вот поэтому автора и спрашивают: для чего нужен выход? Как автор планирует его использовать? На какую нагрузку?

По большому счету, ответ Евгения правильный - то, что можно получить от контроллера, выровняв фильтром, не годится почти НИ ДЛЯ КАКОЙ нагрузки.

Только для измерения или косвенного использования, как сигнала, например для сервомотора.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:

Только для измерения или косвенного использования, как сигнала, например для сервомотора.

Да и то ... я всегда ставлю операционный усилитель. Вот типичная схема, которую я всегда использую, если надо напряжение  от 0 до 5. +7В означает - "не меньше", т.к. усилитель не rail-to-rail. Если надо другое напряжение - (там до 12В или типа того) - два дополнительных резистора вполне спасают отца русской демократии.

 

bizzon
Offline
Зарегистрирован: 29.03.2016

evgta пишет:
Можно кренки поставить и выбирать кренку с нужным уровнем напряжения

Гениально! Зачем вообще для такой задачи ардуина? Надо просто взять три(или одну) регулируемую кренку.

Darkblue
Offline
Зарегистрирован: 06.01.2017

Можете запилить простой блокинг генератор на дросселе  транзисторе и диоде, правильно расчитав частоту и дроссель получите на выходе желаемое,можете использовать i2C или SPI АЦП, у AnalogDevice их куча, ну или собрать сами по схеме R-2R