Технический форум по робототехнике.
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 и т.д.
Спасибо.
sergey2x » 24 янв 2018, 20:59
В arduino.h посмотри прототип функции analogRead и тип входного параметра соответственно.
Angel71 » 24 янв 2018, 21:08
исходнтки/заголовочные файлы штука полезная, но иногда можно и по другому
гугл -> arduino pinout -> поиск по картинкам -> выбрать нужную плату
что-то на подобии такой
http://marcusjenkins.com/wp-content/uploads/2014/06/ARDUINO_V2.png
Последний раз редактировалось
Angel71 24 янв 2018, 21:12, всего редактировалось 1 раз.
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 на ардуино Мега. Заработало.
Всем спасибо!
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}", а размерность или сами должны учитывать (в голове или храня константу/в переменной и быть внимательней, когда кол-во элементов меняете) или при необходимости она вычисляется в коде.
sergey2x » 25 янв 2018, 15:54
Angel71 писал(а): и надо было искать не analogRead, а A4
И чем бы это помогло в выборе типа данных (человеку задающему такой вопрос)?
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));
}
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
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 обьявлен? затея не очень.
Scorpio » 25 янв 2018, 20:35
Нафига вообще ардуина тем, кто может разобраться в wiring_analog.c, arduino.h?
Если не нравится "i + 54", то можно написать "i + А0"
Angel71 » 25 янв 2018, 23:38
для "i + А0" всё-равно нужно знать, последовательны ли значения или нет.
кто сможет в пинах ардуинки самостоятельно разобраться, ещё не факт, что осилит без статей на родном языке с описанием нужного момента, допустим очень популярные сейчас стм32. ардуинки на допотопных авр удобны для быстрой проверки работоспособности или особенностей работы какого модуля/датчика/схемы/... - скачал библиотеку/пример, залил и проверил.
Dmitry__ » 26 янв 2018, 00:12
Тиха народ!
Щаз
сорвется с крючка уйдет в ступор начинающий робостроитель
Angel71, к твоему уровню профессионализма нет вопросов, но поверь, это них не легко, читать твои тексты начинающим
Нужна прокладка в виде более адекватных учитилей (не я)...
sergey2x » 26 янв 2018, 00:24
Angel71 писал(а):sergey2x, вот этим бы помогло
#define PIN_A4 (58)
static const uint8_t A4 = PIN_A4;
А, тогда сорри, не посмотрел, думал там просто дефайн.
Добавлено спустя 6 минут 53 секунды:Angel71 писал(а):кто сможет в пинах ардуинки самостоятельно разобраться, ещё не факт, что осилит без статей на родном языке с описанием нужного момента, допустим очень популярные сейчас стм32.
Из среды ардуино можно и с стм32 работать
Scorpio » 26 янв 2018, 00:54
И незаметно на нее подсаживаешься, хотя сама IDE довольно примитивная. Редактор - отстой, отладчика нет, сообщения компилятора порой приводят в ступор. Но все таки разработчикам удалось сделать очень важную вещь - внедрить интерес к робототехнике в массы.
Angel71 » 26 янв 2018, 11:47
sergey2x, что-то давно пилят, но на сколько это уже годно для использования, утверждать не берусь. а если начинать в том же кейле без ардуиновских упрощений вникать по стшной документации, как работает переферия и как её настраивать... не такая уж и тривиальная задачка. даже если мозги в нужную сторону повёрнуты, всё-равно на некоторое время нужно запастись терпением для изучения документации и примеров.