Вопрос по коду.
- Войдите на сайт для отправки комментариев
Чт, 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
Уже читал,писал про это выше. Сейчас ещё раз перечитал,уже стало понятней,спасибо.