2016-05-17 3 views
0

В настоящее время я работаю над проектом, где мне нужно считывать импульсы из Arduino и проверять, является ли результат высоким или низким.Генерация и считывание импульсов на arduino

Я должен был написать свой собственный код для генерации высокого/низкого выхода из Arduino:

//Pulse Generator Arduino Code 
int potPin = 2; // select the input pin for the knob 
int outputPin = 13; // select the pin for the output 
float val = 0;  // variable to store the value coming from the sensor 

void setup() { 
    pinMode(outputPin, OUTPUT); // declare the outputPin as an OUTPUT 
    Serial.begin(9600); 
} 

void loop() { 
    val = analogRead(potPin); // read the value from the k 
    val = val/1024; 
    digitalWrite(outputPin, HIGH); // sets the output HIGH 
    delay(val*1000); 
    digitalWrite(outputPin, LOW); // sets the output LOW 
    delay(val*1000); 
} 

Он использует регулятор для изменения задержки между импульсами.

Im в настоящее время пытается прочитать высокие/низкие данные с другим Arduino (Назовём этот «граф Arduino»), просто подключив 2 с кабелем от „outputPin“ к порту на счет Arduino.

Я использую digitalRead для чтения порта без каких-либо задержек.

//Count Arduino Code 
int sensorPin = 22; 
int sensorState = 0; 

void setup() {     
    pinMode(sensorPin, INPUT); 
    Serial.begin(9600); 
} 

void loop(){ 
    sensorState = digitalRead(sensorPin); 
    Serial.println(sensorState); 
} 

Сначала он пытался импульсом каждые 1 секунду, но результатом стал спам тонны минимумов и максимумов. Всегда 3 минимума и 3 максимума и повторение. Это не было даже близко к одному каждые 1 секунду, но больше, чем 1 раз в 1 миллисекунду.

Я не могу понять, что я делаю неправильно. Это вопрос времени или есть лучший способ обнаружить эти изменения?

+1

Вопрос в вашем последнем предложении: «есть ли лучший способ обнаружить эти изменения?» Да, обнаруживая изменения, не сообщая уровень, как вы, кажется, делаете, хотя вы не даете много подсказок. Ваш непрерывный последовательный выход состояния датчика будет разрушать предполагаемую синхронизацию входного состояния. –

+1

Если вы передаете «0», когда входной сигнал становится низким, а «1», когда он высок, при 9600 бодах вы должны отслеживать входной импульс до примерно 1 кГц. –

+0

Я должен отслеживать около 10 импульсов каждую секунду. Так что 10 Герц уже будет здорово. Является ли решение на основе прерываний вариантом для Arduino. Могу ли я получить прерывание, если контакт изменится с высокого на низкий? –

ответ

1

спам тонны минимумов и максимумов

... бывает, если GND два Arduinos не подключен.

Кроме того, ваш считывающий arduino печатает в каждом цикле цикла, который был всего на несколько микросекунд, если бы последовательный буфер не переполнился.

Лучшая распечатка изменится или используйте светодиод, чтобы показать, что происходит.

void loop(){ 
    static bool oldState; 
    bool sensorState = digitalRead(sensorPin); 
    if (sensorState != oldState) { 
     Serial.println(sensorState); 
     oldState = sensorState; 
    } 
} 
+0

Это была определенно проблема ... так глупо мой GND-штырь не был в правильном порту! –

+0

Я рад помочь решить простые проблемы. ;) – datafiddler

 Смежные вопросы

  • Нет связанных вопросов^_^