roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 17:20

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 24 янв 2018, 20:51 
Не в сети

Зарегистрирован: 19 апр 2017, 13:05
Сообщения: 55
Всех приветствую.
Сначала вопрос: какой тип данных надо поставить вместо многоточия?

Программа должна сохранить номера аналоговых пинов в виде массива
... 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: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 24 янв 2018, 20:59 
Не в сети

Зарегистрирован: 14 янв 2015, 16:18
Сообщения: 235
Откуда: СПб
В arduino.h посмотри прототип функции analogRead и тип входного параметра соответственно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 24 янв 2018, 21:08 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
исходнтки/заголовочные файлы штука полезная, но иногда можно и по другому
гугл -> arduino pinout -> поиск по картинкам -> выбрать нужную плату
что-то на подобии такой http://marcusjenkins.com/wp-content/uploads/2014/06/ARDUINO_V2.png


Последний раз редактировалось Angel71 24 янв 2018, 21:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 24 янв 2018, 21:23 
Не в сети

Зарегистрирован: 19 апр 2017, 13:05
Сообщения: 55
Спасибо, единственное место, где там встретилось 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: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 11:22 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
это от незнание основ языка. 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: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 15:54 
Не в сети

Зарегистрирован: 14 янв 2015, 16:18
Сообщения: 235
Откуда: СПб
Angel71 писал(а):
и надо было искать не analogRead, а A4

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 17:52 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
Как мы уже поняли, 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: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 18:27 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Код:
#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: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 18:34 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 20:35 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
Нафига вообще ардуина тем, кто может разобраться в wiring_analog.c, arduino.h?
Если не нравится "i + 54", то можно написать "i + А0"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 25 янв 2018, 23:38 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 26 янв 2018, 00:12 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Тиха народ! :)
Щаз сорвется с крючка уйдет в ступор начинающий робостроитель :)
Angel71, к твоему уровню профессионализма нет вопросов, но поверь, это них не легко, читать твои тексты начинающим :) Нужна прокладка в виде более адекватных учитилей (не я)...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 26 янв 2018, 00:24 
Не в сети

Зарегистрирован: 14 янв 2015, 16:18
Сообщения: 235
Откуда: СПб
Angel71 писал(а):
sergey2x, вот этим бы помогло
#define PIN_A4 (58)
static const uint8_t A4 = PIN_A4;

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 26 янв 2018, 00:54 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
И незаметно на нее подсаживаешься, хотя сама IDE довольно примитивная. Редактор - отстой, отладчика нет, сообщения компилятора порой приводят в ступор. Но все таки разработчикам удалось сделать очень важную вещь - внедрить интерес к робототехнике в массы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: номер аналогового порта это какой тип данных?
СообщениеДобавлено: 26 янв 2018, 11:47 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO