digital write в готовый рабочий код. Куда? готов зарядить сто рублеблей на телефон кто поможет
- Войдите на сайт для отправки комментариев
есть диджей вертолет с мертвыми кишками, все убно хочу сделать из него контроллер, тк есть пока одна диджейская виниловая вертушка и неплохая, ардуино уно 168. в интернете нашолся подходщий код на мониторе нормально бес сбоев читает и влево и в право. мне нужно слать 0xB0 по сериал дате движении вправо, и 0x00 при движении влево или наоборот это не важна , в край нем случае самостоятельно поправлю. сенсор в ней оптический, два питание два выхода срабатываюшие одновременно но не прозваниваюшиеся между собой мультиметром. нужно сделать что бы этот энкодер заработал как надо ребята помогите кину соткум на телефон
рабочий код на мониторе, ардуино правильно влево и правильно вправо
собственно код
enum PinAssignments {
encoderPinA = 2,
encoderPinB = 3,
clearButton = 8
};
volatile unsigned int encoderPos = 0;
unsigned int lastReportedPos = 1;
boolean A_set = false;
boolean B_set = false;
void setup() {
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
pinMode(clearButton, INPUT);
digitalWrite(clearButton, HIGH);
// encoder pin on interrupt 0 (pin 2)
attachInterrupt(0, doEncoderA, CHANGE);
// encoder pin on interrupt 1 (pin 3)
attachInterrupt(1, doEncoderB, CHANGE);
Serial.begin(9600);
}
void loop(){
if (lastReportedPos != encoderPos) {
Serial.print("Index:");
Serial.print(encoderPos, DEC);
Serial.println();
lastReportedPos = encoderPos;
}
if (digitalRead(clearButton) == LOW) {
encoderPos = 0;
}
}
// Interrupt on A changing state
void doEncoderA(){
// Test transition
A_set = digitalRead(encoderPinA) == HIGH;
// and adjust counter + if A leads B
encoderPos += (A_set != B_set) ? +1 : -1;
}
// Interrupt on B changing state
void doEncoderB(){
// Test transition
B_set = digitalRead(encoderPinB) == HIGH;
// and adjust counter + if B follows A
encoderPos += (A_set == B_set) ? +1 : -1;
}
думаю нужно использовать if\else для doencoder ноне силен в синтаксисе
третий день мучаюсь помогите крыша едет
Я пытался понять, что такое диджей вертолет, какое отношение он имеет к диджей вертушке с ардуиной, откуда потом взялся энкодер и что вообще этот энкодер должен делать. Но мне это не удалось (
оптический датчик читающий колесо
становится энкодером уже в коде
похож на те что в принтерах на вывод два контакта на питание плюс 5м и земля
сек ща проверю
два раза послал данные по монитору midi-ox и ошибка ? f[ lf bcgjkmpet. serial2midi converter ghbkj;tybt
Так убрать надо было остальной вывод по последовательному порту:
так же хотел сказать что использую serial2midi converter и виртуальные миди порты c по проблем нет. сфоткать железо подробно или не имеет смысла?
пробуем
теперь независимо от поворота шлет бесконечно 0xB0 с ошибками порта
можно мне вашу версию кода целиком с заменой в моем
Может слишком часто прерывания идут? Попробуйте так.
ну же ребята кому сотку на телефон?))))
да очень часто
пробую
все ок но шлет с задерками в 5 7 10 секунд а мне нужен поток
и кстати в обе стороны шлет 0xBO а мне же нужно право (или лево неважно) 0x00где в коде регулировать скорость посыла
РЕБЯТА ПОМОГИТЕ!!!!
Если у код, который изначально был опубликован, честно выдавал уменьшение при движении в одном направлении и увеличение - в другом, то мой код должен работать.
Если же мой код выдает в порт только 0xB0, то значит, что encoderPos всегда возрастает и никогда не убывает, а значит проблема в обработчиках прерываний.
честно только за один оборот были тысячи по ардуино монитору
и разубеется ни 0xB0 ни 0x00 он не слал
честно только за один оборот были тысячи по ардуино монитору
Чего тысячи? Значение при каких-то условиях убывало?
в одну сторону больше в другую меньше (ардуино монитор)
Index:65479
Index:65494
Index:65511
Index:65530
Index:15
Index:32
Index:50
Index:68
Index:87
в одну и другую
ну это середина
блин даже 200 р готов кинуть за рабочий код. может гдето добавить
Serial.write(0xB0)
и
Serial.write(0x00)
или так не делается?
хотя судя по всему там переписывать надо это же index
Index:65479
Index:65494
Index:65511
Index:65530
Index:15
Index:32
Index:50
Index:68
Index:87
в одну и другую
Вижу только возрастание. Просто при прибавлении единицы к unsigned int со значением 65535 получится 0. Оно больше не бывает, чем 65535
4000 по индекс за оборот , мне впринципе такая и нужна скорость
но и так же уменьшается на 4000 в обратку
Index:65530 доходишь крутиш в обратку и оноуменьшается
могу на видео заснять блин
нельзя с doEncoderA и doEncoderB снять данные?
http://www.pjrc.com/teensy/td_libs_Encoder.html
совсем не то
помогите ребята!! я знаю вы можете!
оптический сенсор, два контакта на вывод один дожен слать Serial.write(0xB0) второй Serial.write(0x00) только не одновременнот помоему это очень просто
оптический сенсор, два контакта на вывод один дожен слать Serial.write(0xB0) второй Serial.write(0x00) только не одновременнот помоему это очень просто
когда ты овладеешь русским языком - нам будет просто понять тебя.
а, пока - плети лапти, удмурт.
это форум взаимопомощи или чего простите
На этом форуме принято писать по-русски.