Задержка чтения Arduino Rfid при мигании светодиода

У меня есть считыватель RFID, который подключен к Arduino... и успешно получает номер тега на последовательный монитор. Но когда я помещаю мигание светодиода внутрь шлейфа, то чтение rfid задерживается: он получает номера тегов один за другим после каждого мигания.

Код ниже. Я думаю, что мне следует использовать многопоточность или прерывания, но я не знаю, как это сделать.

void setup() {

   Serial.begin(9600);
   Serial1.begin(9600);
   pinMode(2, OUTPUT);

}

void loop() {

    // blink led in pin 2
    digitalWrite(2, HIGH);
    delay(1000);
    digitalWrite(2, LOW);
    delay(1000);

//Below Serial1.available() checks my rfid reader input signal and print on serial monitor of Arduino.. and Serial1 is on pin RX1 19 (RX1 19 is the default pin for serial1 defined by Arduino developers "http://arduino.cc/en/reference/serial#.Uyvbq6iSzIg") to which my rfid reader is connected

   if (Serial1.available()) {

      int i = Serial1.read();
      Serial.print(i);

     }
}

person sham999    schedule 21.03.2014    source источник
comment
Учитывая комментарии автора, этот старый вопрос, очевидно, слишком широк. Голосование за закрытие на данный момент.   -  person halfer    schedule 05.07.2018
comment
В delay(...) нет многопоточности.   -  person zx485    schedule 05.07.2018


Ответы (2)


Существует файл Arduino с именем "Blink Without Delay". Он включен в примеры Arduino, и у меня есть связаны с ним. Сделайте себе одолжение и потратьте десять минут на прочтение руководства и кода, чтобы понять, что он делает.

person spring    schedule 21.03.2014
comment
В моем случае мне нужно мигать светодиодом с задержкой, а не без задержки при считывании метки rfid. Как мне это сделать ? пожалуйста посоветуй - person sham999; 21.03.2014
comment
@sham999 sham999 - Если вы можете оставить этот комментарий, вы либо не читали, либо не поняли руководство по мерцанию без задержки. Если ты этого не понял, то что ты не понял? Если вы не читали, моя внештатная ставка составляет 100 долларов в час. Я с радостью напишу ваш код для вас. - person spring; 21.03.2014
comment
Я читаю это. Я хочу включить светодиод на 1 секунду и выключить его.. всего на 1 секунду он должен гореть.. Как я могу сделать это с мерцанием без задержки? - person sham999; 21.03.2014

Вы можете использовать таймер Arduino и соответствующие прерывания. Итак, что-то вроде этого здесь:

void setup() {
    Serial.begin(9600);
    Serial1.begin(9600);
    pinMode(2, OUTPUT);
    /* Initialize timer, e.g. timer1 */
    noInterrupts();    //disable interrupts
    TCCR1A = 0;        //Timer1 control register A
    TCCR1B = 0;        //Timer1 control register B
    TCNT1 = 0;         //Counter of timer1
    OCR1A = 15625;     //Timer1 compare match register

    TCCR1B |= (1<<WGM12);            //Set timer1 in CTC mode
    /* Define prescaler with 1024. If the clock is 16 MHz, then timer1 will run
     * with 16 MHz / 1024 = 15625 Hz --> 64 us, to get one second, we
     * need 15625 cycles, which is the OCR1A register */
    TCCR1B |= (1<<CS10) | (1<<CS12); // clock prescaler = 1024

    TIMSK1 |= (1<<OCIE1A);    //enable timer compare interrupt
    interrupts();             //enable interrupts
}

//This routine is called every time, timer1 counter reaches the compare register
ISR(Timer1_COMPA_vect) {
    digitalWrite(2, digitalRead(2) ^ 1);    //toggle LED
}

//the loop
void loop() {
    if (Serial1.available()) {
        int i = Serial1.read();
        Serial.print(i);
    }
}
person pizzaani    schedule 21.03.2014
comment
Сэр, этот код не работает. Он просто считывает метки RFID. но светодиод не моргает. Можете вы помочь мне - person sham999; 21.03.2014
comment
Если мигание не работает, не могли бы вы проверить настройки таймера? Какая у вас скорость по умолчанию? Что произойдет, если вы измените значение OCR1A на низкие значения? - person pizzaani; 22.03.2014
comment
до сих пор я добился многих вещей с помощью Pizzaani, которые я не мог сделать. Но, сэр, теперь моя проблема: как я могу получить два значения, отправленные из java в arduino, и обработать их отдельно внутри arduino? пожалуйста, помогите мне. Я описал isse в этой ссылке stackoverflow.com/questions/22644644/ Пожалуйста, помогите мне Pizzaani - person sham999; 26.03.2014
comment
Вы тоже можете помочь мне, проголосовав за мои ответы. - person pizzaani; 26.03.2014
comment
Я с радостью сделаю это... Проект Myu выполнен на 99% успешно, только в разделе GSM есть некоторые ошибки. Я очень хорошо запрограммировал Arduino. Я использую GSM-модуль sim900. Я объяснил проблему по следующей ссылке. Посетите ее и помогите мне. /arduino-sending-sms-in-gsm-sim900-error-please-help-me-gyus" title="arduino отправляет смс в GSM ошибка sim900, пожалуйста, помогите мне, gyus"> stackoverflow.com/questions/22877262/ - person sham999; 06.04.2014