         matrixBytes[10] = matrixBytes[10] +
             (currentWithFadeTransition              ? UInt8(1 << 4) : 0) +
             (currentMatrix is NuimoBuiltInLEDMatrix ? UInt8(1 << 5) : 0)
-        matrixBytes += [UInt8(min(max(brightness, 0.0), 1.0) * 255), UInt8(currentDisplayInterval * 10.0)]
+        matrixBytes += [UInt8(min(max(controller.matrixBrightness, 0.0), 1.0) * 255), UInt8(currentDisplayInterval * 10.0)]
         peripheral.writeValue(Data(bytes: UnsafePointer<UInt8>(matrixBytes), count: matrixBytes.count), for: matrixCharacteristic, type: withWriteResponse ? .withResponse : .withoutResponse)
 
         isWaitingForWriteResponse        = withWriteResponse

            // When the matrix write response is not retrieved within 500ms we assume the response to have timed out
            writeResponseTimeoutDispatchWorkItem?.cancel()
            writeResponseTimeoutDispatchWorkItem = DispatchWorkItem() { [weak self] in self?.didRetrieveMatrixWriteResponse() }
            queue.asyncAfter(deadline: .now() + 0.5, execute: writeResponseTimeoutDispatchWorkItem!)
        }
    }


    }

    private func writeMatrixNow(withWriteResponse: Bool) {
        guard
            let peripheral = controller.peripheral,
            peripheral.state == .connected,
            let matrixCharacteristic = matrixCharacteristic
        else {
            return
        }
        guard let currentMatrix = currentMatrix else { fatalError("Invalid matrix write request") }
        var matrixBytes = currentMatrix.matrixBytes
        guard currentMatrix.matrixBytes.count == 11 && !(withWriteResponse && isWaitingForWriteResponse) else { fatalError("Invalid matrix write request") }
