Азбука Морзе через светодиод iPhone

Я написал приложение, которое может преобразовывать обычный текст, например: «Привет, меня зовут 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 (с фонариком ^^)


person mrlowalowa    schedule 25.01.2013    source источник
comment
Фонарик на самом деле не предназначен для быстрого включения и выключения таким образом, поэтому он может никогда не иметь той точности, которую вы хотите для этих коротких очередей. Вы думали о том, чтобы вместо этого использовать экран iPhone и мигать между полностью белым и полностью черным? Это все еще может дать достаточно освещения, чтобы ваш датчик мог его обнаружить.   -  person Brad Larson    schedule 25.01.2013
comment
обнаружение от датчика имеет значение от 0 до 1024. Когда я держу фонарик прямо, я получаю что-то между 180-280. Когда я использую только дисплей с возможностью полного освещения, я получаю только 13-17, что слишком мало. Потому что, если вы находитесь в комнате, где уже есть рассеянный свет, значение уже выше этого. Так что я бы получил довольно много неправильных расшифровок.. Но спасибо за ваше мнение! :)   -  person mrlowalowa    schedule 26.01.2013


Ответы (1)


Как сказал Брэд, для включения вспышки iPhone требуется несколько мс. Если вы все еще хотите его использовать, единственной возможностью будет (на мой взгляд) изменить ваш протокол и дать одиночным сигналам больше времени.

Это замедляет вашу передачу, но на стороне получателя вы можете определить некоторые доверительные интервалы (например, плюс-минус 2 секунды). Возможно, человек не поймет вашу азбуку Морзе, потому что она может быть слишком медленной (но, возможно, они поймут), такая машина, как iPhone, в качестве приемника вполне сможет ее понять.

Вы должны поиграть с временными интервалами, чтобы найти самые короткие, которые работают.

Привет из ГЕР.

person DAS    schedule 26.01.2013
comment
спасибо вам обоим. Я немного поиграл с интервалами и понял две вещи. Первый знак здесь только наполовину, потому что мне нужно включить фонарик. Может быть, я добавлю туда длинный знак (длиннее, чем черта), чтобы сказать противоположное, что я начинаю сейчас, и инициализирую факел. После этого короткие знаки отлично работают также после пауз или длинных сильных знаков. Настоящая проблема заключается в переходе от точки к штриху ... потому что одни только штрихи, такие как - - - работают только идеально. - создает проблемы.. Перерыв перед - стартами слишком долгий и затягивающий время с удара! - person mrlowalowa; 26.01.2013
comment
Снова увеличьте интервалы, чтобы начать отладку! ( › 5 сек) - person DAS; 26.01.2013
comment
как я думал проблема все еще там. Я установил точку на 1 секунду, ход на 2 секунды и перерыв на 1 секунду. у хода осталась описанная проблема и я не знаю как ее решить.. - person mrlowalowa; 26.01.2013
comment
Попробуйте установить перерыв намного дольше остальных (например, 5 секунд)! - person DAS; 26.01.2013