Привет всем! Есть вопросик кто сможет помогите пожалуйста, не знаю как решить задачу: При чтении с x = analogRead(PIN_SPEED_X); Получаем if(x < 510) Мне надо подать на ШИМ значения такие (510 это 0) а( 0 это 1024 ) тоесть 510-520 это получается середина потенциометра. Так же вторая половина потенциометра должна работать так if(x > 520) то на ШИМ идет (520 это 0) а (1024 остается 1024) Вот скетч моих экспериментов который работает не полностью ка я только не пробовал, и пытался инвертировать и чего только не делал, ничего не выходит та часть которая отвечает за переключение направления рабочая. А вот с регулировкой скорости неполучается, Помогите пожалуйста!
Код (Text): x = analogRead(PIN); if(x <= 511) a = (511 - x) * 2; else a = (x - 511) * 2; Вы хотите, чтобы в среднем положении потенциометра на ШИМ выдавался 0, а ближе к крайним положениям значение ШИМ увеличивалось до 1023? Я правильно понял?
Я нарисовал картинку и все сразу стало понятно. Вот такую: Хороший способ, очень рекомендую. У меня на работе всегда перед клавиатурой лежит лист бумаги и карандаш - не знаю, что бы я без них делал
Спасибо! А мне даже в голову не пришло чтоб просто значения умножить Как я только над переменой не изгалялся... А не приходилось иметь дело с фотоинтераптором? Я тут с принтера интересный наковырял у него два выхода на одном с 0 преключается в 1 а на втором наоборот, я вот тут думаю как бы его примастить что б он подсчитывал импульсы и следил за положением каретки?
Дел иметь не приходилось, но примерно понимаю, что к чему. Мне кажется, лучше обсудить это в отдельной теме - это уже немного схемотехника пошла, а не программирование
Подключить я разобрался как у меня найдена принципиальная схема этого принтера я уже подключал и выводил показания на монитор получается так: щель открыта = 0 проведешь заслонку измениться на 1 еще раз проведешь меняется на 0 Второй выход инверсный наоборот работает, Мне не понятно как в программе организовать подсчет нулей и единиц и останавливать мотор при достижении значения х.
Читаем состояние фотоинтерраптора с цифрового пина 5, останавливаем мотор после 10 изменений пина. Код (Text): #define PIN 5 #define MAX_COUNT 10 bool prevState = LOW; int counter = 0; void loop() { bool currentState = digitalRead(PIN); if(currentState != prevState) { prevState = currentState; counter++; if(counter == MAX_COUNT) { counter = 0; // остановить мотор } } } Годится?
Спасибо! Испробую... Не знаю даже чем вас отблагодарить... Если только заинтересует у меня от принтера остался интересный мониторчик, если есть желание то дайте адрес в Л.С я вам его вышлю.
Не за что Я Вам помог, Вы поможете другому, рано или поздно круг замкнется. А мониторчик оставьте себе, пригодится еще для будущих проектов ))
На всякий случай выложу может кому пригодиться Код (Text): const byte PIN_POS_X = A0; //Пин потенциомера Х int rewX; int a; int b; int x; // переменные для состояния направления двигателя int PinLOWx; int PinHIGHx; // Пины подключения драйвера const byte PIN_IN4 = 10; const byte PIN_IN3 = 9; const byte PIN_ENB = 3; //Пин управления скоростью ШИМ (PWM~) void setup () { pinMode(PIN_IN3, OUTPUT); pinMode(PIN_IN4, OUTPUT); pinMode(PIN_ENB, OUTPUT); } void loop() { x = analogRead(PIN_POS_X); if(x <= 511) { a = (511 - x) * 2; } else { a = (x - 511) * 2; } rewX = analogRead(PIN_POS_X); if (rewX > 510) { PinLOWx = HIGH; PinHIGHx = LOW; } if (rewX < 520 ) { PinLOWx = LOW; PinHIGHx = HIGH; } digitalWrite(PIN_IN3, PinLOWx); digitalWrite(PIN_IN4, PinHIGHx); analogWrite(PIN_ENB, a/4);