Получить ввод пин без библиотеки Arduino

голоса
1

Мне не разрешается использовать Arduino библиотеку (или какой-либо библиотеки) для этой программы. Как я могу проверить ввод булавки?

Я нашел две различные функции:

В Arduino.h:

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)

После digitalRead обратно pgmspace.h:

#define __LPM_enhanced__(addr)  \
(__extension__({                \
    uint16_t __addr16 = (uint16_t)(addr); \
    uint8_t __result;           \
    __asm__ __volatile__        \
    (                           \
        lpm %0, Z \n\t      \
        : =r (__result)       \
        : z (__addr16)        \
    );                          \
    __result;                   \
}))

Для первого, я не знаю, где бит и значение пришли и я просто не понимаю, вторую вообще.

Задан 05/10/2016 в 06:24
источник пользователем
На других языках...                            


2 ответов

голоса
1

Там нет необходимости идти в эти реализации. Это довольно просто, как следует.

LED13 включается, когда Pin 0 высок. Я тестировал этот код на Arduino

#include <avr/io.h>                                      // Includes all the definition of register port etc  
#ifndef F_CPU

#define F_CPU 16000000UL      //Need to include it before <util/delay.h>

#endif                                       //Change 16000000 with your crystal freq. In my case its 16 MHz

#include <util/delay.h>    //includes delay functions delay_ms and delay_us

void setup() {
  // put your setup code here, to run once:
  DDRB |= 0xFF; //Configured Port B as OP
  DDRD &= 0x00; //Configured Port D as IP
}

void loop() {
  // put your main code here, to run repeatedly:
  
  if (PIND&(0x01)) //to check pin0 of portD (which is Pin 0 of arduino)
    PORTB |= 0xFF;
  else
    PORTB &= 0x00;

}

Ответил 05/10/2016 в 06:43
источник пользователем

голоса
0

Я предполагаю, что вы используете Arduino Uno, однако, общее правило применяется к любому Arduino.

Во-первых, вам нужно проверить отображение пин Arduino:

Тогда, давайте предположим, что вы хотите использовать цифровой контакт 2, так PD2 на ATmega168 / 328. (PD2 короткие для PORTD контакта 2). Для того, чтобы использовать его в качестве входных данных вам нужно сделать следующее:

DDRD &= ~(1 << PD2); 

DDRD является регистром направления данных для порта D. Вся операция устанавливает бит, соответствующий контакту 2 0. Затем, чтобы прочитать этот вывод:

if (PIND & (1<<PD2)) {
  // do something
}

Также, пожалуйста , проверьте, как манипулировать отдельных битов: Как установить, ясно, и переключить один бит?

Ответил 05/10/2016 в 07:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more