transfering 32 bits across several 74HC595s

A while ago Tom Carpenter posted this below. I'm getting and error when I run it. Any ideas why? Error file attached.

 #include <SPI.h>

union FourByte{
    unsigned long bit32;
    unsigned int bit16[2];
    unsigned char bit8[4];
};

void setup(){
  SPI.begin();
 
  //save a 32bit value
  unsigned long someValue = 0xFFFFFFFEUL;
  //transmit 32bit value:
  transfer(someValue);
 
  //read 32bit value
  someValue = transfer(0);
 
  //read and write at the same time.
  someValue = transfer(someValue);

  //concatinate ints:
  FourByte bob;
  bob.bit16[0] = 10;
  bob.bit16[1] = 20;
 
  transfer(bob.bit32); //sends 1310730 = 20*65536+10

  //concatinate bytes:
  bob.bit8[0] = 0x1; //1
  bob.bit8[1] = 2; //2
  bob.bit8[2] = 0b11; //3
  bob.bit8[3] = B100; //4
 
  transfer(bob.bit32); //transfers 0x04030201
}

unsigned long transfer(unsigned long value){
  FourByte data = {value};
  for(byte i = 0; i < 4; i++){
    data.bit8[i] = SPI.transfer(data.bit8[i]);
  }
  return data.bit32;
}

Thank you,

Tony

Untitled.txt (8.3 KB)

After 20 posts, you should know to post errors in the post itself:

Arduino: 1.8.10 (Mac OS X), Board: "Arduino Uno"

/Applications/Arduino 3.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino 3.app/Contents/Java/hardware -hardware /Users/tonyperry/Library/Arduino15/packages -tools /Applications/Arduino 3.app/Contents/Java/tools-builder -tools /Applications/Arduino 3.app/Contents/Java/hardware/tools/avr -tools /Users/tonyperry/Library/Arduino15/packages -built-in-libraries /Applications/Arduino 3.app/Contents/Java/libraries -libraries /Users/tonyperry/Documents/Arduino/libraries -fqbn=arduino:avr:uno -ide-version=10810 -build-path /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556 -warnings=none -build-cache /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_cache_258936 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -verbose /Users/tonyperry/Documents/Arduino/sketch_apr18f/sketch_apr18f.ino
/Applications/Arduino 3.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino 3.app/Contents/Java/hardware -hardware /Users/tonyperry/Library/Arduino15/packages -tools /Applications/Arduino 3.app/Contents/Java/tools-builder -tools /Applications/Arduino 3.app/Contents/Java/hardware/tools/avr -tools /Users/tonyperry/Library/Arduino15/packages -built-in-libraries /Applications/Arduino 3.app/Contents/Java/libraries -libraries /Users/tonyperry/Documents/Arduino/libraries -fqbn=arduino:avr:uno -ide-version=10810 -build-path /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556 -warnings=none -build-cache /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_cache_258936 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/Users/tonyperry/Library/Arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -verbose /Users/tonyperry/Documents/Arduino/sketch_apr18f/sketch_apr18f.ino
Using board 'uno' from platform in folder: /Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2
Using core 'arduino' from platform in folder: /Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2
Detecting libraries used...
/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/cores/arduino -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/variants/standard /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch/sketch_apr18f.ino.cpp -o /dev/null
/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/cores/arduino -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/variants/standard -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/libraries/SPI/src /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch/sketch_apr18f.ino.cpp -o /dev/null
Using cached library dependencies for file: /Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/libraries/SPI/src/SPI.cpp
Generating function prototypes...
/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/cores/arduino -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/variants/standard -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/libraries/SPI/src /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch/sketch_apr18f.ino.cpp -o /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/preproc/ctags_target_for_gcc_minus_e.cpp
"/Applications/Arduino 3.app/Contents/Java/tools-builder/ctags/5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/preproc/ctags_target_for_gcc_minus_e.cpp
Compiling sketch...
/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/cores/arduino -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/variants/standard -I/Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/libraries/SPI/src /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch/sketch_apr18f.ino.cpp -o /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch/sketch_apr18f.ino.cpp.o
Compiling libraries...
Compiling library "SPI"
Using previously compiled file: /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/libraries/SPI/SPI.cpp.o
Compiling core...
Using precompiled core: /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_cache_258936/core/core_arduino_avr_uno_eb6f31025f55c4d79d3a9b3e92608a3a.a
Linking everything together...
/Users/tonyperry/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch_apr18f.ino.elf /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/sketch/sketch_apr18f.ino.cpp.o /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/libraries/SPI/SPI.cpp.o /var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556/../arduino_cache_258936/core/core_arduino_avr_uno_eb6f31025f55c4d79d3a9b3e92608a3a.a -L/var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T/arduino_build_14556 -lm
/var/folders/lr/wp0_4qm92dd27nqnnkggryy00000gn/T//cc35W4AL.ltrans0.ltrans.o: In function main': /Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/cores/arduino/main.cpp:46: undefined reference to loop'
collect2: error: ld returned 1 exit status
Using library SPI at version 1.0 in folder: /Users/tonyperry/Library/Arduino15/packages/arduino/hardware/avr/1.8.2/libraries/SPI
exit status 1
Error compiling for board Arduino Uno.

Ha! My wife has a list of those!

Next time....in the gosh-dern post.

Ha! My wife has a list of those!

Next time....in the gosh-dern post.