Считыватель Matrix II + Arduino uno

Не 3, а 6 - у вас каждый байт кодирован двумя символами.
Чтобы выделить из строки только байты 1-6 - скопируйте их в другой буфер:

const char *hexstring = "150bd41069037";
char buff[7] = {0};
memcpy(buf, hexstring +1, 6);

А то что байты в обратном порядке - еще не факт что помешает. Попробуйте сначала.

Примерно так

uint32_t result = 0;
result = (addr[3]<<16) | (addr[2]<<8) | addr[1];

Serial не выводит первый нуль, т.е. 0x01 он выведет как 1, не стоит на него ориентироваться

Это как написать

byte addr[] = {01, 80, 189, 65, 06, 90, 37, 00}; // буфер приема,  HEX числа 4308304 равен 41 BD 50
uint32_t sn = 0;

void setup() {
  Serial.begin(115200);
  for (int i = 3; i >= 1; i--) {
    sn = sn + addr[i];
    if (i > 1) sn = sn << 8;
  }
  Serial.print("Номер - ");
  Serial.println(sn);
  Serial.print("Номер HEX - ");
  Serial.println(sn, HEX);
}

void loop() {
}

опоздал на целый час, выше в две строчки сделали, не то что мы - крестьяне )))

по крестьянски вышло надёжней, старый конь )))

byte addr[] = {01, 80, 189, 65, 06, 90, 37, 00}; // буфер приема,  HEX числа 4308304 равен 41 BD 50
uint32_t sn = 0;

void setup() {
  Serial.begin(115200);

  for (int i = 3; i >= 1; i--) {
    sn = sn + addr[i];
    if (i > 1) sn = sn << 8;
  }
  Serial.print("Номер - ");
  Serial.println(sn);
  Serial.print("Номер HEX - ");
  Serial.println(sn, HEX);
  
  sn=0;
  sn = (addr[3] << 16) | (addr[2] << 8) | addr[1];

  Serial.print("Номер - ");
  Serial.println(sn);
  Serial.print("Номер HEX - ");
  Serial.println(sn, HEX);
}

void loop() {
}
Номер - 4308304
Номер HEX - 41BD50
Номер - 4294950224
Номер HEX - FFFFBD50

пятница не задалась?

Практически закончилась.

так и не разберёмся почему конструкция @v258 не работает?

Чё там разбираться, переполнение

Ну тогда так

sn = ((sn | addr[3]) << 8 | addr[2]) << 8 | addr[1];

самое главное, что предыдущая конструкция прекрасно отработает на ESP32 к примеру )))
Тут проявилась восточная мудрость, что большого слона надо есть по частям

byte addr[] = {01, 80, 189, 65, 06, 90, 37, 00}; // буфер приема,  HEX числа 4308304 равен 41 BD 50
uint32_t sn = 0;

void setup() {
  Serial.begin(115200);
  delay(3000);
  Serial.println("Serial is ON");
  
  for (int i = 3; i >= 1; i--) {
    sn = sn + addr[i];
    if (i > 1) sn = sn << 8;
  }
  Serial.print("Номер - ");
  Serial.println(sn);
  Serial.print("Номер HEX - ");
  Serial.println(sn, HEX);

  sn = 0;

#if ( defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_RASPBERRY_PI_PICO) || defined(ARDUINO_ADAFRUIT_FEATHER_RP2040) || \
      defined(ARDUINO_GENERIC_RP2040)  ||  defined(ESP32) || defined(ESP8266))
  sn = (addr[3] << 16) | (addr[2] << 8) | addr[1];
#else
  sn = ((sn | addr[3]) << 8 | addr[2]) << 8 | addr[1];
#endif

  Serial.print("Номер - ");
  Serial.println(sn);
  Serial.print("Номер HEX - ");
  Serial.println(sn, HEX);
}

void loop() {
}

Это я поленился в железе проверить. Посчитал на калькуляторе, калькулятор сказал ОК. А что у него регистры не 8-битные, я и не подумал ))

Я то в принципе речь вёл …если взяли слона, со слоном и работаем, на RP2040 не проверял, а на esp32 и esp8266 всё прекрасно работает

Всем огромное спасибо за такое глубокое вникание в мою задачу. Все вопросы решены, всё работает как надо!

А вот возник ещё вопрос, у самого считывателя есть команды которые он принимает, такие как 0х33 для получения адреса карты. А вот какие ещё есть? Где бы поискать. Как только не спрашивал гугл и ничего. Наверняка есть какая то команда о том что ключ валидный и надо как то особо по пикать спикером и по моргать диодом.

в первую очередь в мануале, наверное?

С этого начинал конечно же. Нет, там нету. Надо какую то техническую документацию.

А не подскажите как в целом такой механизм строиться, просто появилась необходимость не 3 а 4 байта собрать и очень хочется понять как это работает.

Зачем вам 4 байта? На обычных скуд-картах формата Em-Marine написан ее код в десятичном формате или 000,00000 (1 байт, 2 + 3 байты), т.е. 3 байта. Это интерфейс Wiegand 26 (Интерфейсы Wiegand 26…42. Отличия. Достоинства и недостатки)