Итак, переназначил аналог в цифру и все стало ок(правда браться за край макетки и нажимать кнопки, вчера не стоило)) Вообщем минус ещё одна нано)) Кинул "костыль"
int en_s = 2;
pinMode(en_s,INPUT);
и назначил его условием прерывания
ISR(PCINT2_vect){
if (!(PIND & B00000100)){
То есть подключил к en_mot. Однако показания все равно не изменяются для оси Z. Правильно ли я понимаю, что проблема кроется вот здесь ?
//Enable interruptions on pins D8 to D12 for the Step and Direction read
PCICR |= (1 << PCIE0); //enable PCMSK0 scan
PCMSK0 |= (1 << PCINT0); //Set pin D8 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT1); //Set pin D9 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT2); //Set pin D10 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT3); //Set pin D11 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT4); //Set pin D12 trigger an interrupt on state change.
PCMSK2 |= (1 << PCINT18); //Set pin D2 trigger an interrupt on state change.
PCMSK2 |= (1 << PCINT19); //Set pin D3 trigger an interrupt on state change.
PCMSK2 |= (1 << PCINT20); //Set pin D4 trigger an interrupt on state change.
Так как у меня получилось 2 прерывания порта, нужно добавить PCICR |= (1 << PCIE1); //enable PCMSK1 scan ? Или я не правильно понимаю?
//Enable interruptions on pins D8 to D12 for the Step and Direction read
PCICR |= (1 << PCIE0); //enable PCMSK0 scan
PCMSK0 |= (1 << PCINT0); //Set pin D8 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT1); //Set pin D9 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT2); //Set pin D10 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT3); //Set pin D11 trigger an interrupt on state change.
PCMSK0 |= (1 << PCINT4); //Set pin D12 trigger an interrupt on state change.
PCICR |= (1 << PCIE2); //enable PCMSK2 scan
PCMSK2 |= (1 << PCINT18); //Set pin D2 trigger an interrupt on state change.
PCMSK2 |= (1 << PCINT19); //Set pin D3 trigger an interrupt on state change.
PCMSK2 |= (1 << PCINT20); //Set pin D4 trigger an interrupt on state change.
ISR(PCINT18_vect){ не правильно) правильно как говорил ua6em ISR(PCINT2_vect){ . Ура все заработало) Большое спасибо тебе ua6em за помощь! А то я мучаюсь с этим проектом месяц уже))
ISR(PCINT18_vect){ не правильно) правильно как говорил ua6em ISR(PCINT2_vect){ . Ура все заработало) Большое спасибо тебе ua6em за помощь! А то я мучаюсь с этим проектом месяц уже))
так изучать материальную часть надо сначала, ты же на сайте даже больше чем я, а я с ардуиной в день регистрации познакомился, да, тут есть у кого...всех перечислять долго...
Матчасть без интересной практики, не сильно завлекает и сложнее в запоминании) А тут интересный и практичный проект (для меня во всяком случае) Вот и решил стряхнуть пыль с ардуино ide и плат нано). А тогда(2016), смотрел я на всяких роботов, не завлекало) Из-за малой практичности. Параллельно этому проекту, ещё подумываю об автономном климате в гараже...)
ребят, вы бы код переписали, ну просто глаза ломит от считывания дигиталРидом "Х вверх", "У вниз" на каждом шаге. Считайте их один раз в начале ЛУП, сформируйте матрицу по Х У и Z - и работайте с ней. Потом обратите внимание, что блок, например, "Х вниз" отличается от "Х вверх" буквально парой символов. Вынесетите эти символы в условие, а все остальное напишите только один раз...
Ну и так далее. Код станет короче, но не это главное - он станет в разы читабельнее, ошибки будет искать проще.
ноутов должно быть много )))
По одному-два для каждой оси.
не мало?
Итак, переназначил аналог в цифру и все стало ок(правда браться за край макетки и нажимать кнопки, вчера не стоило)) Вообщем минус ещё одна нано)) Кинул "костыль"
и назначил его условием прерывания
То есть подключил к en_mot. Однако показания все равно не изменяются для оси Z. Правильно ли я понимаю, что проблема кроется вот здесь ?
Так как у меня получилось 2 прерывания порта, нужно добавить PCICR |= (1 << PCIE1); //enable PCMSK1 scan ? Или я не правильно понимаю?
Или вместо ISR(PCINT2_vect){ надо указать ISR(PCINT18_vect){ ?
Попробовал сделать вот так
ISR(PCINT18_vect){ не правильно) правильно как говорил ua6em ISR(PCINT2_vect){ . Ура все заработало) Большое спасибо тебе ua6em за помощь! А то я мучаюсь с этим проектом месяц уже))
ISR(PCINT18_vect){ не правильно) правильно как говорил ua6em ISR(PCINT2_vect){ . Ура все заработало) Большое спасибо тебе ua6em за помощь! А то я мучаюсь с этим проектом месяц уже))
так изучать материальную часть надо сначала, ты же на сайте даже больше чем я, а я с ардуиной в день регистрации познакомился, да, тут есть у кого...всех перечислять долго...
Матчасть без интересной практики, не сильно завлекает и сложнее в запоминании) А тут интересный и практичный проект (для меня во всяком случае) Вот и решил стряхнуть пыль с ардуино ide и плат нано). А тогда(2016), смотрел я на всяких роботов, не завлекало) Из-за малой практичности. Параллельно этому проекту, ещё подумываю об автономном климате в гараже...)
ребят, вы бы код переписали, ну просто глаза ломит от считывания дигиталРидом "Х вверх", "У вниз" на каждом шаге. Считайте их один раз в начале ЛУП, сформируйте матрицу по Х У и Z - и работайте с ней. Потом обратите внимание, что блок, например, "Х вниз" отличается от "Х вверх" буквально парой символов. Вынесетите эти символы в условие, а все остальное напишите только один раз...
Ну и так далее. Код станет короче, но не это главное - он станет в разы читабельнее, ошибки будет искать проще.