Я написал приложение, которое может преобразовывать обычный текст, например: «Привет, меня зовут XY».
на точки и штрихи ( ..-. ; --.- ; . ; - ; и т.д. и т.п.)
Теперь я хочу преобразовать эти точки и штрихи в световые вспышки продолжительностью 0,3 секунды для точек и 0,6 секунды для штрихов. также есть пауза длиной в точку после каждой точки или штриха, двойная пауза после каждого слова и тройная пауза/перерыв после каждого предложения.
Разрывы также подразумеваются в моем коде.
Проблема в том, что легкие штрихи недостаточно отличаются друг от друга.
Потому что идея заключается в том, чтобы преобразовать световые вспышки через Arduino Duo и фототранзистор обратно в текст.
Вот фрагмент кода для процесса преобразования света:
- (IBAction)send:(id)sender{
// Преобразование текста в код Морзе и т.д.
float needTime;
NSString *string = plotter;
for (int d = 0;d < [string length]; d++) {
NSString *punktoderstrich = [string substringWithRange:NSMakeRange(d, 1)];
if ([punktoderstrich isEqualToString:@"."]) {
needTime = needTime + 0.4f;
[self performSelector:@selector(playpunkt) withObject:nil afterDelay:needTime];
}
if ([punktoderstrich isEqualToString:@"-"]) {
needTime = needTime + 1.0f;
[self performSelector:@selector(playstrich) withObject:nil afterDelay:needTime];
}
if ([punktoderstrich isEqualToString:@" "]) {
needTime = needTime + 0.4f;
[self performSelector:@selector(playpause) withObject:nil afterDelay:needTime];
}
if ([punktoderstrich isEqualToString:@"/"]) {
needTime = needTime + 0.3f;
[self performSelector:@selector(playpause) withObject:nil afterDelay:needTime];
}
}
- (void)torchAn {
[captureDevice lockForConfiguration:nil];
[captureDevice setTorchMode:AVCaptureTorchModeOn];
[captureDevice setFlashMode:AVCaptureFlashModeOn];
[captureDevice unlockForConfiguration];
}
- (void)torchAus {
[captureDevice lockForConfiguration:nil];
[captureDevice setTorchMode:AVCaptureTorchModeOff];
[captureDevice setFlashMode:AVCaptureFlashModeOff];
[captureDevice unlockForConfiguration];
}
-(void)playstrich{
// AudioServicesPlaySystemSound (outSystemSoundID2);
[self torchAn];
//[self performSelector:@selector(torchAus) withObject:nil afterDelay:0.8f];
}
-(void)playpunkt{
//AudioServicesPlaySystemSound (outSystemSoundID1);
[self torchAn];
//[self performSelector:@selector(torchAus) withObject:nil afterDelay:0.4f];
}
- (void)playpause{
// AudioServicesPlaySystemSound (outSystemSoundID3);
[self performSelector:@selector(torchAus) /*withObject:nil afterDelay:0.4f*/];
}
Как видите, я также импортировал звуковые файлы (короткие и длинные), но основная цель - дать правильный световой сигнал.
Мои проблемы:
Короткие огни в основном в порядке, за исключением первого, когда светодиод впервые мигает. Длинные световые сигналы на самом деле не длиннее. Иногда я получаю одинаковые результаты, когда записываю их.
И после того, как Долгий свет должен загореться, следующие короткие не короткие, как обычно.. хм..
После того, как я прокомментировал партию без звука, весь процесс стал более стабильным. Я также переместил часть (отключение светодиода) с самого знака на разрывы.
Я надеюсь, что кто-то может дать мне несколько советов или около того :)
Привет из Германии!
P.S.: У меня iPhone 4s (с фонариком ^^)