Привет форумчанам. Я навичек в этом деле --- могли-бы Вы подсказать правелен ли код Есть вентилятор и две кнопки управлением скоростью вращения --- код который внизу глючит обороты то сами увеличятся то не реагирует на нажатие кнопки -- либо нажимаешь уменьшение а он прибовляет обороты Код (C++): int switchPin1 = 8; int switchPin2 = 7; int PWMpin = 9; boolean lastButton = LOW; boolean currentButton = LOW; boolean lastButton1 = LOW; boolean currentButton1 = LOW; int PWMlevel = 165; void setup() { pinMode(switchPin1, INPUT); pinMode(switchPin2, INPUT); pinMode(PWMpin, OUTPUT); Serial.begin(9600); // ШИМ 8 разрядов, 62,5 кГц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x09; analogWrite(9, 25); // на выводе 9 ШИМ=10% } boolean debounce(boolean last) { boolean current = digitalRead(switchPin1); if (last != current) { delay(5); current = digitalRead(switchPin1); } return current; } boolean debounce1(boolean last1) { boolean current1 = digitalRead(switchPin2); if (last1 != current1) { delay(5); current1 = digitalRead(switchPin2); } return current1; } void loop() { currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) { PWMlevel = PWMlevel + 15; } lastButton = currentButton; if (PWMlevel > 255) PWMlevel = 255; analogWrite(PWMpin, PWMlevel); currentButton1 = debounce1(lastButton1); if (lastButton1 == LOW && currentButton1 == HIGH) { PWMlevel = PWMlevel - 15; } lastButton1 = currentButton1; if (PWMlevel < 75) PWMlevel = 75; analogWrite(PWMpin, PWMlevel); Serial.print("POWER - ");Serial.println(PWMlevel); }
Скетч хоть и кривоватый, но на первый взгляд рабочий. Кнопки как подключены? Подтяжка есть? Приведите схему.
подключены к 7 и 8 пину через подтягивающий резистор транзистор тоже с подтяжкой на землю проблема мне кажется в коде при установке оборотов при запуске --- когда ардуино запускается (int PWMlevel =165; ) я поставил примерно 60% скорости вентилятор с такой скоростью и крутится --- но может сам резко набрать обороты на максимум в чем проблема не могу понять
при стандартных настройках (без управления кнопками) шим работает нормально в сериале отображает значения шим при первом запуске вентилятор включается со значениями 165 и в сериале так и отображается - 165 но через пару секунд набирает максимальные обороты -- в сериале отображает 255
Про стандартный настройки я имел ввиду убрать повышение частоты ШИМ. Закомментировать строки Код (C++): TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x09; Ну и попробуйте для проверки следующее: Как я понял за увеличение скорости оборотов отвечает кнопка на 8 порту. Попробуйте перед стартом ардуино отключить эту кнопку, а 8 порт замкнуть на GND. Будут ли при этом увеличиваться обороты?