Temperature and Humidity Sensor Node Design


I escalated it internally with the stuck job ID and project link.
Practical workaround: fork/duplicate the project and try routing in the copy. The stuck autoroute job is likely attached to this project instance, so a duplicate may clear the blockage without waiting on support.
Recommended steps:
  1. Open the project menu.
  2. Choose Duplicate, Fork, or Save a copy.
  3. Open the copied project.
  4. Ask me to run DRC/autoroute there.
If the copy still inherits the stuck job, the fallback is to keep the current schematic/layout and manually route the remaining critical nets, but that will be slower than autoroute.
there is a clone project option
Yes — use Clone Project. That is the best workaround here.
What to do:
  1. Open the current project.
  2. Choose Clone Project from the project/menu options.
  3. Give the clone a clear name, for example:

    Text


    Open Hornet 16-Channel 28V Magnetic Hold Driver - Routing Retry
  4. Open the cloned project.
  5. Confirm the schematic/layout copied over.
  6. Tell me: “I cloned it, continue routing in the clone.”
Why this should help: the stuck job appears tied to this project’s autoroute job queue. A clone may create a fresh routing/job state while preserving the schematic and PCB layout work.
After cloning, I’ll first run a clean DRC/airwire check in the clone, then retry autorouting there.
Clone and reroute
Review before clone
Manual routing fallback
Explain clone process
Check manufacturing readiness

Firmware Starter — Pro Micro DCS-BIOS Coil Driver
Platform & Toolchain
  • MCU/module: SparkFun Pro Micro / ATmega32U4, U1
  • Framework: Arduino AVR
  • Interface to PC: native USB CDC serial used by DCS-BIOS
  • Important: Exact DCS-BIOS control identifiers/addresses must be filled in for the specific Open Hornet panel configuration. The pin mapping below is grounded in the schematic.
Pin Mapping

Table


ChannelArduino pinSchematic netOutput path
CH12IN1U1:D2 -> R10 220R -> R42 1k -> Q2 gate
CH23IN2U1:D3 -> R11 -> R43 -> Q3 gate
CH34IN3U1:D4 -> R12 -> R44 -> Q4 gate
CH45IN4U1:D5 -> R13 -> R45 -> Q5 gate
CH56IN5U1:D6 -> R14 -> R46 -> Q6 gate
CH67IN6U1:D7 -> R15 -> R47 -> Q7 gate
CH78IN7U1:D8 -> R16 -> R48 -> Q8 gate
CH89IN8U1:D9 -> R17 -> R49 -> Q9 gate
CH910IN9U1:D10 -> R18 -> R50 -> Q10 gate
CH1016IN10U1:D16 -> R19 -> R51 -> Q11 gate
CH1114IN11U1:D14 -> R20 -> R52 -> Q12 gate
CH1215IN12U1:D15 -> R21 -> R53 -> Q13 gate
CH13A0IN13U1:A0 -> R22 -> R54 -> Q14 gate
CH14A1IN14U1:A1 -> R23 -> R55 -> Q15 gate
CH15TXO / D1IN15U1:TXO/D1 -> R24 -> R56 -> Q16 gate
CH16RXI / D0IN16U1:RXI/D0 -> R25 -> R57 -> Q17 gate
All outputs must default LOW during setup. The hardware also has 100k pulldowns on the conditioned gate-command nodes.
Dependencies & Project Setup
Example platformio.ini:

Ini


[env:promicro] platform = atmelavr board = sparkfun_promicro16 framework = arduino monitor_speed = 250000 lib_deps = dcs-bios/dcs-bios-arduino-library
If using Arduino IDE, install the SparkFun AVR board package and the DCS-BIOS Arduino library.
Complete Firmware Source
This is a safe bring-up starter. It initializes all coil outputs LOW and provides helper functions for DCS-BIOS callbacks. Replace the placeholder DCS-BIOS control declarations with the actual Open Hornet control names/addresses for the panel.

Cpp


#define DCSBIOS_IRQ_SERIAL #include <Arduino.h> #include <DcsBios.h> // Channel output pins from the schematic. constexpr uint8_t COIL_CH1_PIN = 2; constexpr uint8_t COIL_CH2_PIN = 3; constexpr uint8_t COIL_CH3_PIN = 4; constexpr uint8_t COIL_CH4_PIN = 5; constexpr uint8_t COIL_CH5_PIN = 6; constexpr uint8_t COIL_CH6_PIN = 7; constexpr uint8_t COIL_CH7_PIN = 8; constexpr uint8_t COIL_CH8_PIN = 9; constexpr uint8_t COIL_CH9_PIN = 10; constexpr uint8_t COIL_CH10_PIN = 16; constexpr uint8_t COIL_CH11_PIN = 14; constexpr uint8_t COIL_CH12_PIN = 15; constexpr uint8_t COIL_CH13_PIN = A0; constexpr uint8_t COIL_CH14_PIN = A1; constexpr uint8_t COIL_CH15_PIN = 1; // TXO used as GPIO; DCS-BIOS uses native USB CDC constexpr uint8_t COIL_CH16_PIN = 0; // RXI used as GPIO; DCS-BIOS uses native USB CDC constexpr uint8_t COIL_PINS[16] = { COIL_CH1_PIN, COIL_CH2_PIN, COIL_CH3_PIN, COIL_CH4_PIN, COIL_CH5_PIN, COIL_CH6_PIN, COIL_CH7_PIN, COIL_CH8_PIN, COIL_CH9_PIN, COIL_CH10_PIN, COIL_CH11_PIN, COIL_CH12_PIN, COIL_CH13_PIN, COIL_CH14_PIN, COIL_CH15_PIN, COIL_CH16_PIN }; void setCoil(uint8_t channelIndex, bool enabled) { if (channelIndex >= 16) return; digitalWrite(COIL_PINS[channelIndex], enabled ? HIGH : LOW); } void allCoilsOff() { for (uint8_t i = 0; i < 16; i++) { digitalWrite(COIL_PINS[i], LOW); } } // Replace these callbacks with the actual DCS-BIOS export/control mapping. // Example pattern: when DCS-BIOS says a magnetic hold should energize, call setCoil(channel, true). void onMagHoldCh1Change(unsigned int newValue) { setCoil(0, newValue != 0); } void onMagHoldCh2Change(unsigned int newValue) { setCoil(1, newValue != 0); } void onMagHoldCh3Change(unsigned int newValue) { setCoil(2, newValue != 0); } void onMagHoldCh4Change(unsigned int newValue) { setCoil(3, newValue != 0); } void onMagHoldCh5Change(unsigned int newValue) { setCoil(4, newValue != 0); } void onMagHoldCh6Change(unsigned int newValue) { setCoil(5, newValue != 0); } void onMagHoldCh7Change(unsigned int newValue) { setCoil(6, newValue != 0); } void onMagHoldCh8Change(unsigned int newValue) { setCoil(7, newValue != 0); } void onMagHoldCh9Change(unsigned int newValue) { setCoil(8, newValue != 0); } void onMagHoldCh10Change(unsigned int newValue) { setCoil(9, newValue != 0); } void onMagHoldCh11Change(unsigned int newValue) { setCoil(10, newValue != 0); } void onMagHoldCh12Change(unsigned int newValue) { setCoil(11, newValue != 0); } void onMagHoldCh13Change(unsigned int newValue) { setCoil(12, newValue != 0); } void onMagHoldCh14Change(unsigned int newValue) { setCoil(13, newValue != 0); } void onMagHoldCh15Change(unsigned int newValue) { setCoil(14, newValue != 0); } void onMagHoldCh16Change(unsigned int newValue) { setCoil(15, newValue != 0); } // TODO: Replace these placeholders with actual DCS-BIOS IntegerBuffer declarations for the selected aircraft/panel. // Example form only; addresses/masks/shift values must come from DCS-BIOS control-reference data: // DcsBios::IntegerBuffer magHoldCh1Buffer(0x0000, 0x0001, 0, onMagHoldCh1Change); void setup() { for (uint8_t i = 0; i < 16; i++) { pinMode(COIL_PINS[i], OUTPUT); digitalWrite(COIL_PINS[i], LOW); } DcsBios::setup(); } void loop() { DcsBios::loop(); }
Bring-up / Safety Checklist
  1. Upload firmware with the 28 V coil supply disconnected.
  2. Confirm all outputs stay LOW after reset.
  3. Test each output with a meter or LED before connecting ET coils.
  4. Connect 28 V supply through a current-limited bench supply for first power-up.
  5. Verify each channel energizes only when commanded by DCS-BIOS.
Build & Flash
  • Build: pio run -e promicro
  • Flash: pio run -e promicro -t upload
  • Monitor: pio device monitor -b 250000
Use the Pro Micro reset procedure if upload fails: double-tap reset to enter bootloader, then upload immediately.
  • Platform & Toolchain

  • Pin Mapping

  • Dependencies & Project Setup

  • Complete Firmware Source

  • Bring-up / Safety Checklist

  • Build & Flash