Вопрос по коду.
- Войдите на сайт для отправки комментариев
Чт, 11/08/2016 - 17:58
Приветствую всех! На просторах интернета,я нашёл простенький скетч для шагового двигателя. Моей задачей было - изучить как оно работает.По сути всё просто,почти всё понял,но в коде есть объявления массива вот :
int lookup[8] = { B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
А далее есть вот такой код:
void setOutput(int out) { digitalWrite(motorPin1, bitRead(lookup[out], 0)); digitalWrite(motorPin2, bitRead(lookup[out], 1)); digitalWrite(motorPin3, bitRead(lookup[out], 2)); digitalWrite(motorPin4, bitRead(lookup[out], 3)); }
Собственно сам вопрос. Что означают эти биты (B01000, B01100 и тд)? И как это работает? Документацию к bitRead я прочитал,но всё же,суть я не совсем уловил.
P.S в программирование пока нуб.
Скетч к ШД:
int motorPin1 = 8; int motorPin2 = 9; int motorPin3 = 10; int motorPin4 = 11; int motorSpeed = 1200; int count = 0; int countsperrev = 512; int lookup[8] = { B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; ////////////////////////////////////////////////////////////////////////////// void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); //Serial.begin(9600); } void loop(){ if(count < countsperrev ) clockwise(); else if (count == countsperrev * 2) count = 0; else anticlockwise(); count++; } void anticlockwise() { for(int i = 0; i < 8; i++) { setOutput(i); delayMicroseconds(motorSpeed); } } void clockwise() { for(int i = 7; i >= 0; i--) { setOutput(i); delayMicroseconds(motorSpeed); } } void setOutput(int out) { digitalWrite(motorPin1, bitRead(lookup[out], 0)); digitalWrite(motorPin2, bitRead(lookup[out], 1)); digitalWrite(motorPin3, bitRead(lookup[out], 2)); digitalWrite(motorPin4, bitRead(lookup[out], 3)); }
Если тему создал не там,прошу прощения,буду благодарен если перенесут.
В переменных массива lookup видно, что единички смещаются как бы волной от байта к байту. Если подключить светодиоды к пинам вместо обмоток мотора, тогда можно увидеть бегущую волну (если уменьшить скорость).
А в функции setOutput подается HIGH или LOW на пины (обмотки) в зависимости от того 1 или 0 в указанном бите текущего байта.
В переменных массива lookup видно, что единички смещаются как бы волной от байта к байту. Если подключить светодиоды к пинам вместо обмоток мотора, тогда можно увидеть бегущую волну (если уменьшить скорость).
А в функции setOutput подается HIGH или LOW на пины (обмотки) в зависимости от того 1 или 0 в указанном бите текущего байта.
Спасибо! Вроде начал понимать. Но вот что обозначают 0,1,2,3 и т.д цифры на концах этого кода?
bitRead(lookup[
out
], 0)).
Я так понимаю,что это последовательность выполнения или же нет? И могу ли я щаписать вместо них что либо другое? И ещё. Получается в этом когде берется допустим первые данные из массива B01000 c bitRead с 0 на конце и он их обрабатывает а дальше что? Он берет следующий и так до конца и потом выполняется второй bitRead,но со знаком 1 на конце? Может не понятно задал вопрос,но всё же :)Но вот что обозначают 0,1,2,3 и т.д цифры на концах этого кода?
bitRead(lookup[
out
], 0)).
Найти и прочитать описание функции bitRead() затрудняет ?
Пожалуйста : http://arduino.ua/ru/prog/BitRead
Но вот что обозначают 0,1,2,3 и т.д цифры на концах этого кода?
bitRead(lookup[
out
], 0)).
Найти и прочитать описание функции bitRead() затрудняет ?
Пожалуйста : http://arduino.ua/ru/prog/BitRead
Уже читал,писал про это выше. Сейчас ещё раз перечитал,уже стало понятней,спасибо.