Скетч с нано на мегу

Без пузыря не разобраться…
Так а зачем так много пинов? К каждому сегменту, лампочке и стрелочкам свой вывод??? Так а сколько проводов? Тоже под полтиник?)
Ну ладно бы на одной плате устройство, там можно и нужно задействовать выводы. Но когда устройство из нескольких блоков, то стремяться уменьшить количество лапши.

И транзисторов для согласования …

Хорошо он не собирает управление жк-панелью 2000×1000 разрешением. Был бы пучок в 3000 проводов😆 Вру! 9000 тысяч. Или 7000? Неважно…

1 лайк

:rofl: Мне повезло 35 шт достаточно

Тебе уже сказали использовать регистры. Я бы применил вообще это

1 лайк

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

Откровенно говоря, некоторые вещи сделать невозможно в принципе без необходимой квалификации… Может туды её в качель?
Ведь “Ардуино для всех” это максимум лампочками помигать и сервами(и не у всех получается). А в этом проекте уже подход “взрослый” должен быть, со всеми расчётами, продумыванием алгоритмов…

Согласен, на данный момент только проблема в скетче, тоесть задействовать все контакты, все остольное, уже сделано и работает, скин готов, потратив неделю, расчеты по топливу и т.д сделано

скин - это что?

Так я не понял, код скетча будет или нет?
Что за воду вы тут в ступе толчете без кода?

  1. уберите комментарий с #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


  1. измените числа “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.

Да вот тут “исходник” его скетча.
Только неизвестно, что ТС там “направил”. :slight_smile:

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 ардуины.

использование “магических чисел” в коде - плохая практика. Лучше задать число пинов в начале кода в виде константы или макроса, и использовать их в коде вместо явно заданных чисел.

ТС было несколько раз сказано, что на внешние ресурсы код не выкладывают…
Код где-то “там” - это все равно что его нет.

Это не ко мне. Все претензии к автору, пожалуйста! :wink:

  • Author : Jani Immonen
    Ну или к его “соавтору” - Rostov :slight_smile:

Это, наверное, xml-шаблон для вывода данных на экран в “человеческом” формате.

человеческий формат - человеская терминология, спасибо

Unsigned int у AVR - 16 бит

Ага, ошибся…
Тогда тем более. Только uint32_t, если 32 пин ТС будет достаточно, или uint64_t, если нет.
Ну или переписывать скетч, с уходом от битовых операций.

Будет вечером скину!

А причём тип переменных к кол-ву пинов?