Leave aside the business of sending the data for a moment.
Just create and populate the struct and see if it contains the correct data BEFORE you try to send it.
I believe you had a working solution in your other Thread. What is the advantage of making it more complex?
I don't understand what this code is trying to do
packet.leds = 0;
packet.leds = digitalRead(upbut) ? 0x00 : 0x01;
packet.leds = digitalRead(rightbut) ? 0x00 : 0x02;
packet.leds = digitalRead(downbut) ? 0x00 : 0x04;
packet.leds = digitalRead(leftbut) ? 0x00 : 0x08;
packet.leds = digitalRead(nuetral) ? 0x00 : 0x10;
packet.leds = digitalRead(starte) ? 0x00 : 0x20;
packet.leds = digitalRead(stope) ? 0x00 : 0x16;
It looks like you only want to store the value of the latest item in the list that is LOW
And I don't understand your coding system - you go up in powers of 2 until the last one.
Using powers of 2 you could save the state of all the buttons at the same time by adding with
packet.leds = 0;
packet.leds += digitalRead(upbut) ? 0x00 : 0x01;
// etc
provided ALL the steps are powers of 2
But make sure the data is valid BEFORE you send anything.
If this was my project I would do it like in your other Thread.
...R