Join Accept loop

no idea why you are getting FAILURE! message when the TTN server indicates you are receiving uplinks every 30 seconds

my TX_INTERVAL is set to 1 minute

// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 60;

the serial monitor output is

Starting
CFG_eu868
Packet queued
315074: EV_JOINING
612857: EV_TXSTART
935750: EV_JOINED
netid: 19
devaddr: ttttttt
AppSKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
NwkSKey: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
937194: EV_TXSTART
1319584: EV_TXCOMPLETE (includes waiting for RX windows)
5070781: EV_TXSTART
Packet queued
5453173: EV_TXCOMPLETE (includes waiting for RX windows)
9204204: EV_TXSTART
Packet queued
9525758: EV_TXCOMPLETE (includes waiting for RX windows)
Received 8 bytes of payload
 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

you can see a three uplink transmissions and one downlink
the TTN server looks like