2015-04-08 1 views
0

J'utilise le CC2541 comme périphérique et iPad mini comme le central. Je transfère les données chaque seconde via le port série (le débit en bauds est 19200) à partir de CC2541 comme avis. (Aussi j'ai essayé de transférer des données dans tous les 100 ms.It semblait être la même précision)BLE notifier parfois eu tort transférer des données dans iOS App

Voici mon code:

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ 
if (error) 
{ 
    NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error); 
    return; 
} 

//NSLog(@"Received data on a characteristic."); 

if (characteristic == self.rxCharacteristic) 
{ 
    NSData *data = [characteristic value]; 
    //NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    [self.delegate didReceiveData:string]; 
} 
else if ([characteristic.UUID isEqual:self.class.hardwareRevisionStringUUID]) 
{ 
    NSString *hwRevision = @""; 
    const uint8_t *bytes = characteristic.value.bytes; 
    for (int i = 0; i < characteristic.value.length; i++) 
    { 
     NSLog(@"%x", bytes[i]); 
     hwRevision = [hwRevision stringByAppendingFormat:@"0x%02x, ", bytes[i]]; 
    } 

    //[self.delegate didReadHardwareRevisionString:[hwRevision substringToIndex:hwRevision.length-2]]; 
} 
} 

J'ai essayé débogage pas à pas, mais il semble que ce code avait raison . Et c'est faux dans la transmission du périphérique (parce que la "chaîne" était erronée quand j'ai débogué ceci). J'ai environ 85% des bonnes données. Et 15% de données étaient erronées.

la bonne donnée (chaîne) est "12399921" et elle notifiera comme 0x3132333939393231. Souvent, la mauvaise données se produit en permanence la volonté, comme 0x31323339393932 et 0x3132E739393231, 0x31323339393231 et 0x249ACACACA928AFE ...

Peut-être qu'il a une façon de les corriger, car il semble qu'il a une ... Ou il normal est-il un moyen d'éviter la mauvaise transmission de données du périphérique. De toute façon sera OK.

Merci d'avance.

Répondre

0

Désolé ...

Je pense avoir trouvé ce qui ne va pas par moi-même.

La précision sera beaucoup mieux quand la vitesse de transmission est réglé sur pas 19200.

Mais il semblait la même chose pour l'application Android (il fonctionne encore bien, même peu importe la vitesse de transmission est 19200 ou 57600).