2015-02-23 94 views
0

我正在構建一個機器人手臂並使用iOS應用程序控制手臂。我無法將位置發送到arduino藍牙4.0屏蔽。無法使用類型爲'(UInt64)'的參數列表調用

我使用滑塊來控制手臂的位置。

有兩個錯誤。

  1. 「不能調用 'writePosition' 類型的 '(UINT8)' 參數列表」
  2. 「不能調用 'sendPosition' 類型的 '(UINT64)' 參數列表」

    func sendPosition(position: UInt8)   
    if !self.allowTX { 
        return 
    } 
    
    // Validate value 
    if UInt64(position) == lastPosition { 
        return 
    } 
    else if ((position < 0) || (position > 180)) { 
        return 
    } 
    
    // Send position to BLE Shield (if service exists and is connected) 
    if let bleService = btDiscoverySharedInstance.bleService { 
        bleService.writePosition(position) ***1)ERROR OCCURS ON THIS LINE*** 
        lastPosition = position 
    
        // Start delay timer 
        self.allowTX = false 
        if timerTXDelay == nil { 
         timerTXDelay = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("timerTXDelayElapsed"), userInfo: nil, repeats: false) 
        } 
        } 
    } 
    
    func timerTXDelayElapsed() { 
    self.allowTX = true 
    self.stopTimerTXDelay() 
    
    // Send current slider position 
    self.sendPosition(UInt64(self.currentClawValue.value)) **2)ERROR OCCURS ON THIS LINE** 
    

    }

這裏是我的 「writePosition」 功能。

func writePosition(position: Int8) { 
    // See if characteristic has been discovered before writing to it 
    if self.positionCharacteristic == nil { 
     return 
    } 

    // Need a mutable var to pass to writeValue function 
    var positionValue = position 
    let data = NSData(bytes: &positionValue, length: sizeof(UInt8)) 
    self.peripheral?.writeValue(data, forCharacteristic: self.positionCharacteristic, type: CBCharacteristicWriteType.WithResponse) 
} 

我不知道我是否要留下一些東西或完全失去一些東西。 我已經嘗試過UInt8和UInt64之間的簡單轉換,但這些都沒有奏效。

回答

2

你的問題是你正在使用的不同的int類型。

首先讓我們來檢查writePosition方法。您使用Int8作爲參數。因此,您需要確保您還以Int8作爲參數調用該方法。爲了確保您使用的是Int8你可以將它轉換:

bleService.writePosition(Int8(position)) 

正如你看到這裏,你需要轉換positionInt8

現在檢查你的sendPosition方法。你有類似的問題。你想要一個UInt8作爲參數,但你用UInt64參數來調用它。這是你不能做的事情。您需要使用相同的整數類型:

self.sendPosition(UInt8(self.currentClawValue.value)) 

這裏是一樣的。使用UInt8而不是UInt64來使鑄件工作。

2

也許我失去了一些東西,但錯誤表明你打電話「writePosition」類型的參數列表「(UINT8)」

然而,writePosition的參數列表指定的INT8。將writePosition的參數類型更改爲UInt8,或將調用參數更改(或強制轉換)爲Int8。

同樣,與sendPosition,它想要一個UInt8,但你發送一個UInt64。

Swift更加煩惱,因爲它抱怨隱式類型轉換。

您應該使用最適合您的數據的整數大小,或者API要求您使用。

相關問題