Официальный сайт компании Arduino по адресу arduino.cc
Отслеживание принудительной остановки двигателя(на валу-неодим. магниты, на неподв.части-датчик). Голову ломаю 3 месяц О_о
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Всем доброго!
В данный момент на основе вашего кода(который ниже) пытаюсь сделать такое: при остановке- подождать немного и включить реверс.
В данный момент не особо получается. Почему-не могу пока понять.
Ваш код:
Мой код, на базе вашего:
Причем! Что удалось выяснить на данный момент:
если в вышеприведенном коде(который ваш, изначальный), я изменяю вот этот кусок:
вот на такой(чтобы отсылка шла в Serial и еще выполнялся мой код-сразу начинаются глюки...Можете пояснить, почему?
Вот это глючит (хотя по сути, это одно и то же что наверху):
Потому что эту строчку надо из else вынести lastshaft_state=shaft_state
в if (lastshaft_state!=shaft_state)
Все, спасибо-все получилось и работает! :-)
Но есть вот какой вопрос...дело в том, что я сам специализируюсь по java. И поэтому довольно легко понимаю конструкции C++ - которые в ардуино...Но мне непонятна вот эта строчка:
volatile bool shaft_state = 1; (она в самом начале).
Разберем ее подробно....(т.к. именно некоторых моментов не нашел в сети):
Поправьте меня, если не прав:
bool (в сети не нашел расшифровки) . Если это boolean -то почему пишем bool?
Далее...Почему, если это boolean, как он может быть равен 1? Он ведь логический: TRUE или FALSE? Ну я допускаю, что под "равен 1" подразумевается "TRUE", но сама запись мне не понятна...информацию не смог найти по этой теме...
И еще...вот по этой строчке:
volatile uint32_t lasttime = 0;
Почему мы пишем uint32_t ? Я нашел информацию по теме, что это:
Но почему нам так писать? а не использовать какой то другой тип? (я не придираюсь, - для себя хочу понять...)
Все, спасибо-все получилось и работает! :-)
Но есть вот какой вопрос...дело в том, что я сам специализируюсь по java. И поэтому довольно легко понимаю конструкции C++ - которые в ардуино...Но мне непонятна вот эта строчка:
volatile bool shaft_state = 1; (она в самом начале).
Разберем ее подробно....(т.к. именно некоторых моментов не нашел в сети):
Поправьте меня, если не прав:
bool (в сети не нашел расшифровки) . Если это boolean -то почему пишем bool?
Далее...Почему, если это boolean, как он может быть равен 1? Он ведь логический: TRUE или FALSE? Ну я допускаю, что под "равен 1" подразумевается "TRUE", но сама запись мне не понятна...информацию не смог найти по этой теме...
И еще...вот по этой строчке:
volatile uint32_t lasttime = 0;
Почему мы пишем uint32_t ? Я нашел информацию по теме, что это:
Но почему нам так писать? а не использовать какой то другой тип? (я не придираюсь, - для себя хочу понять...)
многие знания многие печали )))
volatile - компилятор не делает никаких оптимизаций, при использовании таких переменных, так как она может измениться в любой момент, в том числе и из другого места программы, например, в прерывании.
bool логический тип, ненастоящий, выведенный из int. По традиции, false это 0, true - всё, что не 0. bool и int взаимозаменяемы. Например
char ch;
.
if ( ch=='\0x00') - логическое условие
if (!ch) - то же самое, только ch берется как int. Оба условия для Си равнозначны
uint32_t = unsigned long что короче написать? И в этой записи ты сразу видишь размер переменной, не зависящий от компилятора