Arduino Nano - Почему мои булавки ведут себя так, как они? - PullRequest
2 голосов
/ 11 июля 2019

У меня есть устройство, которое измеряет радиацию, используя Elegoo Uno (торговая марка Arduino) и радиационный монитор RM-60 от Aware Electronics.У меня это работало почти полтора года как часть высокогорного аэростата в моем университете.Я в настоящее время пересматриваю это, поскольку теперь я хочу понять и очистить мой код.

Установка идет следующим образом: RM-60 имеет четыре провода.Желтый и черный выходят на землю, красный - на мои 5 В, а зеленый - на мой выход (дополнительную документацию можно найти в Интернете).

У меня есть пин-код, подключенный к цифре 2. Я прочитал онлайн-штырьки 2& 3 может использовать attachInterrputs для Uno.Но по любой причине установка моего pinMode () в 2 не будет работать.Я обнаружил, что когда я установил свой вывод на 8, с моим фактическим проводом, подключенным к цифровому 2, я могу прочитать его хорошо.

Это то, что я запутался.Я почувствовал, что, узнав, как работают эти материалы, я все делаю правильно.Но это не работает.Так почему же, когда мой вывод установлен на 8, устройство работает правильно?Если я делаю это неправильно (или неэффективно), какие советы или советы вы можете дать мне о том, как оптимизировать / исправить это?

У меня есть мой предыдущий код, скомпилированный и протестированный почти два года назад.Это работает как есть, но я просто не понимаю, почему.Я искал в Интернете подобные проекты, так как несколько аэростатов по всему миру использовали RM-60 для измерения радиации.После их расположения контактов и программы у меня не получилось.

//this is taking just the necessary lines to run the geigercounter.
//using geigerPin 8, it works. But why not when I change this to 2, where my 
//wire actually is?

int count;
int geigerPin = 8; 
int testVar = 0;

void setup() {
  Serial.begin(9600);
  pinMode(geigerPin, OUTPUT);
  attachInterrupt(0, test, RISING);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(count * 6);
  count = 0;
  delay(10000);
}

void test() {
  count++;
}

Данные считываются обратно на последовательный монитор каждые 10 секунд.Возвращаемый результат должен быть счетом в течение десяти секунд, умноженным на 6, чтобы получить отсчет в минуту.

1 Ответ

0 голосов
/ 11 июля 2019

Пожалуйста, обратитесь к руководству перед использованием любых функций. В руководстве четко указано, что ваш подход не сработает.

Из справочного руководства Arduino:

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) (рекомендуется)

attachInterrupt(interrupt, ISR, mode) (не рекомендуется)

attachInterrupt(pin, ISR, mode) (Не рекомендуется. Кроме того, это синтаксис работает только на платах Arduino SAMD, Uno WiFi Rev2, Due и 101).

Пример кода

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}
...