2015-10-14 3 views
0

На данный момент я создаю приложение iOS, которое визуализирует статус порта arduino. Поэтому iPad получает информацию через Serial Cable от Arduino. Arduino отправляет каждые 100 мс пакет с текущим статусом порта. Этот статус отображается на iPad. Порты ввода портов. Я узнал, что устройство, которое я читаю, пульсирует порты, поэтому Arduino читает высокий низкий уровень чередования. Это создает мерцание в визуализации. Теперь я задаю вопрос, как определить уровень вверх или вход мерцает. Порт высок в течение x секунд, который становится низким в течение секунд, и после этого он повторяется. Если порт за два секунды меньше, мне нужно установить порт как низкий в визуализации. В противном случае он высок.определить импульсный объектив c

- (void) readBytesAvailable:(UInt32)numBytes { 
int bytesRead = [manager read:rxBuffer Length:numBytes]; 

if(rxBuffer[i]==48){ 
     [self setButtonRed]; 
    }else if(rxBuffer[i]==49){ 
     [self setButtonWhite] 
     } 
    } 

https://www.dropbox.com/s/bhy5lbm8lkdhnoy/3wire.png?dl=0

+0

Так у вас есть «мерцание», потому что у вас есть плавающие входы? Ну, ИМХО лучшее решение .. Не оставляйте их плавающими. Используйте либо большой (например, 100 кОм) pullup, либо pulldown. Затем реализуйте своеобразное дебютирование непосредственно в коде arduino, поэтому показания будут более «стабильными». – frarugi87

+0

мерцание связано с тем, что устройство, которое я читаю, меняет выходной порт на входной порт для чтения в состоянии кнопки, которое подключено к тому же порту. Существует светодиод и кнопка, связанная с технологией, называется трехпроводной. https://www.dropbox.com/s/bhy5lbm8lkdhnoy/3wire.png?dl=0 –

+0

Я использую оптрон для считывания состояния строк от десяти до одного. Оптопара подключена параллельно –

ответ

0

Если я правильно понял сценарий: вы хотите, чтобы определить, есть ли выход переменного его состояние или он застрял на земле. Вы не указали период/нерабочее время или количество контактов, поэтому я предполагаю, что у вас есть четыре кнопки, подключенные к штырям arduino 1,2,3,5, и я буду использовать литералы.

Вам необходимо установить CHECK_PERIOD в соответствующий период выборки, чтобы вы могли пробовать ввод 4/5 раз для каждого состояния и CHECK_ITERATIONS, чтобы вы могли также пропустить некоторые моменты.

Например, если нормальная волна 100мс высокого и низкого 100мс, я бы установить CHECK_PERIOD до 20 и CHECK_ITERATIONS до, скажем, 3 или 4.

long previousInputCheck; 
#define NUM_INPUTS 4 
const int inputPins[] = { 1, 2, 3, 5} 
unsigned char inputCounter[NUM_INPUTS]; 
unsigned char inputStates[NUM_INPUTS]; 

... THEN, INTO THE MAIN ... 
if ((millis() - previousInputCheck) >= CHECK_PERIOD) 
{ 
    previousInputCheck += CHECK_PERIOD; 
    unsigned char i; 
    for (i = 0; i < NUM_INPUTS; i++) 
    { 
     if (digitalRead(inputPins[i]) == LOW) 
     { 
      if (inputCounter[i] <= CHECK_ITERATIONS) 
       inputCounter[i]++; 
      if (inputCounter[i] == CHECK_ITERATIONS) 
      { 
       inputStates[i] = LOW; 
      } 
     } 
     else 
     { // HIGH 
      inputCounter[i] = 0; 
      inputStates[i] = HIGH; 
     } 
    } 
} 
Смежные вопросы