     
     public var state: NuimoConnectionState { get{ return self.peripheral.state.nuimoConnectionState } }
     public var batteryLevel: Int = -1 { didSet { if self.batteryLevel != oldValue { delegate?.nuimoController?(self, didUpdateBatteryLevel: self.batteryLevel) } } }
+    public var matrixDisplayTimeout: NSTimeInterval = 1.0
+    public var matrixBrightness: UInt8 = 0xff
     public var firmwareVersion = 0.0
     
     private let peripheral: CBPeripheral
     private let centralManager: CBCentralManager
     private var ledMatrixCharacteristic: CBCharacteristic?
     private var currentMatrix: String?
+    private var lastWriteMatrixDate: NSDate?
     private var isWaitingForLedMatrixWriteResponse: Bool = false
     private var writeMatrixOnWriteResponseReceived: Bool = false
     private var writeMatrixResponseTimeoutTimer: NSTimer?

    
    private func writeMatrixNow(matrix: String?) {
        assert(!isWaitingForLedMatrixWriteResponse, "Cannot write matrix now, response from previous write request not yet received")
        guard let ledMatrixCharacteristic = ledMatrixCharacteristic else {
            return
        }
        
        // Convert matrix string representation into byte representation
        let matrixBytes = NuimoLEDMatrix.matrixBytesForString(matrix ?? "")

    
    //TODO: Allow for writing custom matrices
    public func writeMatrix(matrix: String?) {
        // Do not write same matrix again that is already shown unless the display interval has timed out
        guard matrix != currentMatrix || NSDate().timeIntervalSinceDate(lastWriteMatrixDate ?? NSDate()) >= matrixDisplayTimeout else {return}
        
        currentMatrix = matrix
        
        // Send matrix later when the write response from previous write request is not yet received
