Без пузыря не разобраться…
Так а зачем так много пинов? К каждому сегменту, лампочке и стрелочкам свой вывод??? Так а сколько проводов? Тоже под полтиник?)
Ну ладно бы на одной плате устройство, там можно и нужно задействовать выводы. Но когда устройство из нескольких блоков, то стремяться уменьшить количество лапши.
И транзисторов для согласования …
Хорошо он не собирает управление жк-панелью 2000×1000 разрешением. Был бы пучок в 3000 проводов😆 Вру! 9000 тысяч. Или 7000? Неважно…
Мне повезло 35 шт достаточно
Тебе уже сказали использовать регистры. Я бы применил вообще это
Тут вся проьлема что прога работать с данной платой не будет, я еще редактировал файл для проги там прописываются пины, поэтому пошел по легкому пути как я думал, не хочется лезть в каншину, можно подцепить mcp2515 и все работать будет, но это еще тот гемор, конечно проводов минимум, но переделок очень много, пожтому хочу заставить скетч работать со всеми входами, так как у меня работает основное ур топлива, темп охл жтдкости, спидометр, тах.Осталось задействовать индикаторы и управление панелью, но не хватает пинов, на нано работает,на меге такое же количество пинов каа на нано, остольные молчат.
Откровенно говоря, некоторые вещи сделать невозможно в принципе без необходимой квалификации… Может туды её в качель?
Ведь “Ардуино для всех” это максимум лампочками помигать и сервами(и не у всех получается). А в этом проекте уже подход “взрослый” должен быть, со всеми расчётами, продумыванием алгоритмов…
Согласен, на данный момент только проблема в скетче, тоесть задействовать все контакты, все остольное, уже сделано и работает, скин готов, потратив неделю, расчеты по топливу и т.д сделано
скин - это что?
Так я не понял, код скетча будет или нет?
Что за воду вы тут в ступе толчете без кода?
- уберите комментарий с #define READWRITE_PINS
// if READWRITE_PINS is defined, the values are read from and written to Arduino
// digital and analog pins.
//#define READWRITE_PINS
//Вот так:
#define READWRITE_PINS
- измените числа “7” и “14” на “14” и “40” соответственно в след. процедурах.
void setup()
{
#if defined (READWRITE_PINS)
// set digital pins as outputs
for (int i=1; i<14; i++)
{
pinMode(i, OUTPUT);
}
#endif
// init serial
Serial.begin(115200);
delay(100);
}
void ReadDigitalStatuses()
{
#if defined (READWRITE_PINS)
// read status of digital pins (1-40)
digitalPins = 0;
int bitposition = 0;
for (int i=1; i<14; i++)
{
if (digitalRead(i) == HIGH) digitalPins |= (1 << bitposition);
bitposition++;
}
#endif
}
void ReadAnalogStatuses()
{
#if defined (READWRITE_PINS)
// read analog pins (0-15)
for (int i=0; i<7; i++)
{
analogPins[i] = analogRead(i);
}
#endif
}
// И ещё вот здесь "13" заменить на "39"
void HandleIncomingSetValueFrame(unsigned long canFrameId, const byte* frameData)
{
if (canFrameId == 3201)
{
memcpy(&digitalPins, frameData, 2);
memcpy(&analogPins[0], frameData + 2, 2);
memcpy(&analogPins[1], frameData + 4, 2);
memcpy(&analogPins[2], frameData + 6, 2);
#if defined (READWRITE_PINS)
// write digital pins
for (int i=0; i<13; i++)
{
digitalWrite(i + 1, (digitalPins & (1 << i)) ? HIGH : LOW);
}
Навскидку, вроде всё.
Есть ещё непонятки в плане сетапа и чтения/записи пина D1 в скетче.
В ардуине это TXD Serial.
Да вот тут “исходник” его скетча.
Только неизвестно, что ТС там “направил”.
P.S. Rostov, вы бы всё-таки выложили сюда весь скетч.
Со своими правками. Так проку было бы больше.
P.P.S. Кстати… Если не ошибаюсь, вот это
// Arduino digital and analog pins
// digital pin statuses are stored as bits in one variable
unsigned int digitalPins = 0;
не позволит использовать более 32 пинов.
Можно, конечно, попробовать так - uint64_t digitalPins = 0; Но не знаю, умеет ли ардуино корректно работать с 64 бит.
Так-что наверное, лучше не замахиваться на 40 пинов 2560 ардуины.
использование “магических чисел” в коде - плохая практика. Лучше задать число пинов в начале кода в виде константы или макроса, и использовать их в коде вместо явно заданных чисел.
ТС было несколько раз сказано, что на внешние ресурсы код не выкладывают…
Код где-то “там” - это все равно что его нет.
Это не ко мне. Все претензии к автору, пожалуйста!
- Author : Jani Immonen
Ну или к его “соавтору” - Rostov
Это, наверное, xml-шаблон для вывода данных на экран в “человеческом” формате.
человеческий формат - человеская терминология, спасибо
Unsigned int у AVR - 16 бит
Ага, ошибся…
Тогда тем более. Только uint32_t, если 32 пин ТС будет достаточно, или uint64_t, если нет.
Ну или переписывать скетч, с уходом от битовых операций.
Будет вечером скину!
А причём тип переменных к кол-ву пинов?