Обращение к аналоговому пину в цикле for

Marshma11ovv
Offline
Зарегистрирован: 23.03.2018

Здравствуйте, у меня стоит задача считать значение с аналоговых пинов в цикле for, вот так бы я поступил с цифровыми:

for (int i=1; i<5; i++){
    int a = digitalRead(i);
    // какие-то действия
}

А вот с аналоговым проблема в букве "A" перед номером пина.
Как можно обыграть это?

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

Marshma11ovv пишет:

А вот с аналоговым проблема в букве "A" перед номером пина.
Как можно обыграть это?

узнать номер пина А

Marshma11ovv
Offline
Зарегистрирован: 23.03.2018

Я делаю так: 

for (int i=1; i<5; i++){
    a=analogRead(/*вот что здесь писать не знаю*/);
}

То есть мне нужно прочитать с 1 по 4 аналоговые порты, что в скобках писать?

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

Marshma11ovv пишет:

Я делаю так: 

for (int i=1; i<5; i++){
    a=analogRead(/*вот что здесь писать не знаю*/);
}

То есть мне нужно прочитать с 1 по 4 аналоговые порты, что в скобках писать?

тебе нужно посмотреть сопроводительную документацию на свою дуино и прочесть оттуда номер аналогового пина, а не писать на форум по поводу каждого своего пука.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

for (int i = 0; i < 4; i++) {
analogRead ( i );
}
Так?

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

Нет. analogRead ( i +14); Внимательнее описание ардуины читать бы. Это для наны. Для других может отличатся.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
#define PIN_A0   (14)
#define PIN_A1   (15)
#define PIN_A2   (16)
#define PIN_A3   (17)
#define PIN_A4   (18)
#define PIN_A5   (19)
#define PIN_A6   (20)
#define PIN_A7   (21)

static const uint8_t A0 = PIN_A0;
static const uint8_t A1 = PIN_A1;
static const uint8_t A2 = PIN_A2;
static const uint8_t A3 = PIN_A3;
static const uint8_t A4 = PIN_A4;
static const uint8_t A5 = PIN_A5;
static const uint8_t A6 = PIN_A6;
static const uint8_t A7 = PIN_A7;

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну и 

for (int i = 0; i < 4; i++) {
  o = analogRead ( A0 + i );
}

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

nik182 пишет:
Нет. analogRead ( i +14); Внимательнее описание ардуины читать бы. Это для наны. Для других может отличатся.

А вот и не так!

Нулевой аналоговый пин ( А0 )  становится четырнадцатым ( для НАНы ) только тогда
когда мы  к нему обращаемся как к цифровому.
А когда как к аналоговому то он всегда нулевой  -  или А0 или 0.

analogRead ( A0 ) или  analogRead ( 0 )

А по вашему будет попытка читать с 14-го и выше  аналогового входа который вы вряд-ли найдёте у НАНы.....

Чтобы сделать его цифровым не обязательно что-то вычислять.
Надо просто написать как есть:

digitalRead ( A0 )
И работать будет хоть на 328 хоть на 2560

А если коротко то нулевой аналоговый и нулевой цифровой - разные пины.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

во блин !!! ща проверим ...

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

trembo пишет:

А вот и не так!

может, хватит?

пин 14 всегда пин 14 - как к нему не обращайся

#define PIN_A0   (14)

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Клапауций 555 пишет:

trembo пишет:

А вот и не так!

может, хватит?

пин 14 всегда пин 14 - как к нему не обращайся

#define PIN_A0   (14)

фу, блин ... а то я испугался :)))

trembo, так проверять или нет ?

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Клапауций 555 пишет:

trembo пишет:

А вот и не так!

может, хватит?

пин 14 всегда пин 14 - как к нему не обращайся

#define PIN_A0   (14)

Тогда предлагаю запустить Serial.println ( PIN_A0);

на НАНе и на 2560
сравнить и не вводить новичков в заблуждение.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

xDriver пишет:

Клапауций 555 пишет:

trembo пишет:

А вот и не так!

может, хватит?

пин 14 всегда пин 14 - как к нему не обращайся

#define PIN_A0   (14)

фу, блин ... а то я испугался :)))

trembo, так проверять или нет ?

Врёт он всё..... Или добросовестно заблуждается про слово всегда.
Несчастный человек, ничего лучше НАНы в своей жизни не видел.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

trembo пишет:

xDriver пишет:

Клапауций 555 пишет:

trembo пишет:

А вот и не так!

может, хватит?

пин 14 всегда пин 14 - как к нему не обращайся

#define PIN_A0   (14)

фу, блин ... а то я испугался :)))

trembo, так проверять или нет ?

Врёт он всё..... Или добросовестно заблуждается про слово всегда.
Несчастный человек, ничего лучше НАНы в своей жизни не видел.

что скажите про UNO или proMini ?

или в МЕГЕ вот это работать не будет ?

for (int i = 0; i < 4; i++) {
  o = analogRead ( A0 + i );
}

 

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

Она конечно гдето так. В wiring есть строка if (pin >= 14) pin -= 14; так что 0 что 14 это одно и тоже. Для однообразия мне привычней 14.

Клапауций 555
Offline
Зарегистрирован: 10.03.2018

trembo пишет:

Тогда предлагаю запустить Serial.println ( PIN_A0);

на НАНе и на 2560
сравнить и не вводить новичков в заблуждение.

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

nik182 пишет:
Она конечно гдето так. В wiring есть строка if (pin >= 14) pin -= 14; так что 0 что 14 это одно и тоже. Для однообразия мне привычней 14.

Опять же смотря для какого процессора.

А мне, для однообразия  и  привычней   пин А0  всегда называть коротким и ёмким  именем:  А0

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

1 этерация 

trembo пишет:

А мне, для однообразия  и  привычней   пин А0  всегда называть  А0

2 этерация 

trembo пишет:

А мне, для однообразия  и  привычней   пин А0  всегда называть коротким именем:  А0

3 этерация 

trembo пишет:

А мне, для однообразия  и  привычней   пин А0  всегда называть коротким и ёмким  именем:  А0

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Неверно. Точнее не совсем. Вместо 14 надо подставлять соответствующую константу из Ардуино.h или вложенных в него хидеров. У разных Ардуин это разное чиселко..

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

Marshma11ovv пишет:

А вот с аналоговым проблема в букве "A" перед номером пина.

Как можно обыграть это?

Просто не писать букву A. Нулевой, так и пишете 0, первый, так и пишете - 1 и т.п. analogRead сама разберётся.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Подведение итогов про циклы, поправьте если  я не прав:

for (int i = 0; i < 4; i++) {

digitalRead ( i );                   //  цифровой как обычно

analogRead ( i );                //   аналоговый  как обычно

digitalRead (A0 + i ) ;        //    аналоговый как цифровой
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А може, ну его разбираться, чему равно А0?

for(byte i = A0; i <= A7; i++)

и все дела...