i saw the post about using the iPhone 4/4s flash led as a torch. I found it very useful, i tried to use it for quickly turn on/off the led so to use it as a morse transmitter, but it doesn't work. It is too slow for this use, following the code i use:
-(void)toggleTorch
{
AVCaptureDevice *_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// check if the device has the torch
if([_device hasTorch] && [_device hasFlash])
{
if (_device.torchMode == AVCaptureTorchModeOff)
{
// we want to turn the torch on
AVCaptureDeviceInput *_flashInput = [AVCaptureDeviceInput deviceInputWithDevice:_device error:nil];
AVCaptureVideoDataOutput *_output = [[AVCaptureVideoDataOutput alloc] init];
AVCaptureSession *_session = [[AVCaptureSession alloc] init];
[_session beginConfiguration];
[_device lockForConfiguration:nil];
[_session addInput:_flashInput];
[_session addOutput:_output];
[_device unlockForConfiguration];
//[_output release];
[_session commitConfiguration];
[_session startRunning];
[self setTorchSession:_session];
}
else
{
[self.torchSession stopRunning];
}
}
}
// turn the torch on/off
-(IBAction)toggleTorch:(id)sender
{
AVCaptureDevice *_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// check if the device has the torch
if([_device hasTorch] && [_device hasFlash])
{
if (_device.torchMode == AVCaptureTorchModeOff)
{
[self switchTorchON];
}
else
{
[self switchTorchOFF];
}
}
}
-(void)switchTorchON
{
[NSThread detachNewThreadSelector:@selector(changeSwitchImage)
toTarget:self
withObject:nil];
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[device lockForConfiguration:nil];
[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];
[device unlockForConfiguration];
}
}
-(void)switchTorchOFF
{
[NSThread detachNewThreadSelector:@selector(changeSwitchImage)
toTarget:self
withObject:nil];
// test if this class even exists to ensure flashlight is turned on ONLY for iOS 4 and above
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[device lockForConfiguration:nil];
[device setTorchMode:AVCaptureTorchModeOff];
[device setFlashMode:AVCaptureFlashModeOff];
[device unlockForConfiguration];
}
}
-(IBAction)toggleSOS:(id)sender
{
// morse SOS: ...---...
[self switchTorchON];
[self switchTorchOFF];
[self switchTorchON];
[self switchTorchOFF];
[self switchTorchON];
[self switchTorchOFF];
}
when i push on the sos button i see just a flash. Anyone may help me?