roboforum.ru

Технический форум по робототехнике.

номер аналогового порта это какой тип данных?

номер аналогового порта это какой тип данных?

good_idea » 24 янв 2018, 20:51

Всех приветствую.
Сначала вопрос: какой тип данных надо поставить вместо многоточия?

Программа должна сохранить номера аналоговых пинов в виде массива
... thermistor[5] = {A0,A1,A2,A3,A4}.

В дальнейшем она будет в цикле опрашивать эти пины и обрабатывать данные функцией tempCalc:
void loop()
{
for (int i=0; i<=4; i++) // заполняем массив temperature[i] температурами всех моторов
{
temperature[i]=tempCalc(analogRead(thermistor[i]));
}
}
Ну, то есть вместо thermistor[i] должно подставиться А0, затем А1 и т.д.
Спасибо.

Re: номер аналогового порта это какой тип данных?

sergey2x » 24 янв 2018, 20:59

В arduino.h посмотри прототип функции analogRead и тип входного параметра соответственно.

Re: номер аналогового порта это какой тип данных?

Angel71 » 24 янв 2018, 21:08

исходнтки/заголовочные файлы штука полезная, но иногда можно и по другому
гугл -> arduino pinout -> поиск по картинкам -> выбрать нужную плату
что-то на подобии такой http://marcusjenkins.com/wp-content/uploads/2014/06/ARDUINO_V2.png
Последний раз редактировалось Angel71 24 янв 2018, 21:12, всего редактировалось 1 раз.

Re: номер аналогового порта это какой тип данных?

good_idea » 24 янв 2018, 21:23

Спасибо, единственное место, где там встретилось analogRead это:
int analogRead(uint8_t);
Гугл говорит, что uint8_t это то же самое, что byte.
Объявляю
byte thermistor[i] = {A0,A1,A2,A3,A4}
и на просьбу трудящегося
Serial.print("thermistor[4]=");
Serial.println(thermistor[4]);
получаю
thermistor[4]=58
А вовсе даже не А4. Видно этот byte хранится в каком-то другом виде.Так что помощь по-прежнему нужна.

Добавлено спустя 11 минут 31 секунду:
58 это и есть номер пина А0 на ардуино Мега. Заработало.
Всем спасибо!

Re: номер аналогового порта это какой тип данных?

Angel71 » 25 янв 2018, 11:22

это от незнание основ языка. 0xA4, A4 и "A4" не одно и тоже, т.е. A4 где-то обьявлено и надо было искать не analogRead, а A4 (и нашли бы файлик "pins_arduino.h"). найденое "int analogRead(uint8_t)" опять таки должно было намекнуть, что байтовое, а не какой массив числел/"символов". тем более сами же писали "byte thermistor[i] = {A0,A1,A2,A3,A4}". т.е. пишите и сами не понимаете, что обьявляя и создавая одномерный массив байтов, кроме как одиночные байты массив не хранит.
A0 это вообще 54, 58 это A4
и от таких записей "byte thermistor[i] = {A0,A1,A2,A3,A4}" лучше уходить. под ардуино так "uint8_t i = 5; byte thermistor[i] = {A0,A1,A2,A3,A4};" откомпилирует, но от такого лучше сразу отвыкать - "i" в общем должна быть известна на этапе компиляции (иначе некоторые компиляторы просто выдадут ошибку) , т.е. через define или const/static const. можно машинально накосячить при внесении изменений "... i=5; byte thermistor[i] = {A0,A1,A2,A3,A4,A5,A6,A7};" "... i=5; byte thermistor[i] = {A0,A1};". в первом случае скорей всего выругается уже на этапе компиляции. если размерность массива больше, чем потом элементов в скобках {}, выдаст предупреждение/ошибку или что скорей всего, инициализирует вашими данными часть массива, а остальные элементы забьёт нулями или без инициализации значениями выделит место. иногда лучше писать так "byte thermistor[] = {A0,A1,A2,A3,A4}", а размерность или сами должны учитывать (в голове или храня константу/в переменной и быть внимательней, когда кол-во элементов меняете) или при необходимости она вычисляется в коде.

Re: номер аналогового порта это какой тип данных?

sergey2x » 25 янв 2018, 15:54

Angel71 писал(а): и надо было искать не analogRead, а A4

И чем бы это помогло в выборе типа данных (человеку задающему такой вопрос)?

Re: номер аналогового порта это какой тип данных?

Scorpio » 25 янв 2018, 17:52

Как мы уже поняли, A0,A1,A2,A3,A4 соответствуют 54,55,56,57,58 (для arduino mega, в других платах может отличаться). Т.е. считывать значения можно циклом, без использования промежуточного массива
Код: Выделить всёРазвернуть
for (int i=0; i<=4; i++) // заполняем массив temperature[i] температурами всех моторов
{
temperature[i]=tempCalc(analogRead(i+54));
}

Re: номер аналогового порта это какой тип данных?

dimamichev » 25 янв 2018, 18:27

Код: Выделить всёРазвернуть
#include <Servo.h>

Servo myservo1;  //
Servo myservo2;
int potpin1 = 0;  //
int val1;    //
int potpin2 = 1;  //
int val2;    //
void setup() {
  myservo1.attach(6);  //
  myservo2.attach(7);

}

void loop() {
  val1 = analogRead(potpin1);            //
  val1 = map(val1, 0, 1023, 180, 0);     //
  myservo1.write(val1);//
  val2 = analogRead(potpin2);            //
  val2 = map(val2, 0, 1023, 180, 0);     //
  myservo2.write(val2);//
 
  delay(15);                           //
}

А я, когда крутил сервы таким кодом удивился почему А0 это 0,А1 это 1 :)

Re: номер аналогового порта это какой тип данных?

Angel71 » 25 янв 2018, 18:34

sergey2x, вот этим бы помогло
#define PIN_A4 (58)
static const uint8_t A4 = PIN_A4;
только кроме типа данных ещё было про опрос ацп в цикле и намёк, что не понимает, что есть недопонимание, что такое эти Ax. смотреть, какие значения у всех этих Ax, последовательно они идут или нет (создавать доп. массив или если понадобиться озу экономить, можно ли написать "i + 54") в wiring_analog.c, arduino.h и прочих, где analogRead обьявлен? затея не очень.

Re: номер аналогового порта это какой тип данных?

Scorpio » 25 янв 2018, 20:35

Нафига вообще ардуина тем, кто может разобраться в wiring_analog.c, arduino.h?
Если не нравится "i + 54", то можно написать "i + А0"

Re: номер аналогового порта это какой тип данных?

Angel71 » 25 янв 2018, 23:38

для "i + А0" всё-равно нужно знать, последовательны ли значения или нет.
кто сможет в пинах ардуинки самостоятельно разобраться, ещё не факт, что осилит без статей на родном языке с описанием нужного момента, допустим очень популярные сейчас стм32. ардуинки на допотопных авр удобны для быстрой проверки работоспособности или особенностей работы какого модуля/датчика/схемы/... - скачал библиотеку/пример, залил и проверил.

Re: номер аналогового порта это какой тип данных?

Dmitry__ » 26 янв 2018, 00:12

Тиха народ! :)
Щаз сорвется с крючка уйдет в ступор начинающий робостроитель :)
Angel71, к твоему уровню профессионализма нет вопросов, но поверь, это них не легко, читать твои тексты начинающим :) Нужна прокладка в виде более адекватных учитилей (не я)...

Re: номер аналогового порта это какой тип данных?

sergey2x » 26 янв 2018, 00:24

Angel71 писал(а):sergey2x, вот этим бы помогло
#define PIN_A4 (58)
static const uint8_t A4 = PIN_A4;

А, тогда сорри, не посмотрел, думал там просто дефайн.

Добавлено спустя 6 минут 53 секунды:
Angel71 писал(а):кто сможет в пинах ардуинки самостоятельно разобраться, ещё не факт, что осилит без статей на родном языке с описанием нужного момента, допустим очень популярные сейчас стм32.

Из среды ардуино можно и с стм32 работать :)

Re: номер аналогового порта это какой тип данных?

Scorpio » 26 янв 2018, 00:54

И незаметно на нее подсаживаешься, хотя сама IDE довольно примитивная. Редактор - отстой, отладчика нет, сообщения компилятора порой приводят в ступор. Но все таки разработчикам удалось сделать очень важную вещь - внедрить интерес к робототехнике в массы.

Re: номер аналогового порта это какой тип данных?

Angel71 » 26 янв 2018, 11:47

sergey2x, что-то давно пилят, но на сколько это уже годно для использования, утверждать не берусь. а если начинать в том же кейле без ардуиновских упрощений вникать по стшной документации, как работает переферия и как её настраивать... не такая уж и тривиальная задачка. даже если мозги в нужную сторону повёрнуты, всё-равно на некоторое время нужно запастись терпением для изучения документации и примеров.


Rambler\'s Top100 Mail.ru counter