mega2560 - Прерывает чтение цифрового входа
Привет, я очень новичок в Arduino, у меня очень мало опыта программирования.
Я использую mega 2560 и пытаюсь понять, как работает прерывание.
У меня есть написанный код, он очень похож на пример кода Memsic2125, поэтому я буду использовать его здесь.
В моем случае я считываю данные со своего оборудования, массива датчиков 5x5.
Что я хотел бы сделать, так это -- распечатать x и y с помощью прерываний , я хочу распечатать выходные данные x и y каждые 10 мс. Вместо того, чтобы печатать его непрерывно прямо сейчас.
Я буду отправлять его в 16-битном формате. Я попробовал другой пример и прочитал много материала. но все еще не мог заставить его работать.
Любая идея, предложение, помощь, комментарий приветствуются.
const int xPin = 2;
const int yPin = 3;
void setup() {
Serial.begin(9600);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
}
void loop() {
int pulseX, pulseY;
int x, y;
// считываем импульс с осей x и y:
pulseX = pulseIn(xPin, HIGH);
pulseY = pulseIn(yPin, HIGH);
x= ((pulseX / 10) - 500) * 8;
y= ((pulseY / 10) - 500) * 8;
// напечатать х, у
Serial.print("x,y= ( ");
Serial.print(x); Serial.print(,);
Serial.print(y); Serial.println(")");
delay(100);
}
@, 👍1
Обсуждение2 ответа
В том, что вы опубликовали, нет кода прерывания. в чем именно проблема?: Одно важное замечание заключается в том, что вы не должны пытаться печатать в строку Serial в обработчике прерываний, поскольку последовательный порт сам управляется прерываниями, которые отключаются во время кода вашего обработчика. Если все, что вы действительно хотите сделать, это печатать что-то каждые 10 мс, тогда вам не нужно прерывание. Просто используйте стиль синхронизации «Мигание без задержки» и не допускайте блокировки другим кодом.
Проще всего было бы прочитать данные и зациклиться на желаемое время.
В качестве альтернативы отметьте время событий и сохраните данные, если требуемое время истекло.
Или использовать для этого прерывание по таймеру.
Что означает «onkybread the data»?, @James Waldby - jwpat7
- Какова работа pulseIn?
- Arduino с 12-битным ЦАП (MCP4725) не работает
- Как использовать две функции pulseIn() одновременно в Arduino?
- Странное явление с avrdude: stk500v2_ReceiveMessage(): таймаут только с ATmega250 на windows 7x64
- Проанализировать большой ответ json с помощью ESP8266
- Сбой Arduino во время последовательной печати без очевидной причины
- Будет ли адаптер питания 12В постоянного тока, 1А подавать слишком большую мощность и повредит Arduino Mega 2560?
- Как запрограммировать Robotdyn Mega 2560 PRO MINI?
Вы уже печатаете каждые ~100 мс., @gre_gor
У вас не может быть прерывания в коде (это аппаратная вещь), но вы можете смоделировать прерывание через ISR, которого у вас нет., @Aaron