Arduino вкл/выкл ШИМ
Когда я включаю двигатель постоянного тока с помощью кнопки, я получаю фиксированное значение ШИМ, которое переходит в цикл до тех пор, пока состояние кнопки не изменится.
Что я должен изменить, чтобы я мог изменить значение X с помощью потенциометра в цикле?
int X = A0;
int SW = 2;
int Xval=5;
int SWval;
int buttonNew;
int buttonOld = 1;
int buttonState= 1;
int engine = 6;
void setup() { // This executes once
Serial.begin(9600);
pinMode(X, INPUT);
pinMode(SW, INPUT_PULLUP);
}
void loop() { // This loops continuously
Xval = analogRead(X);
buttonNew = digitalRead(SW);
if (buttonOld == 0 && buttonNew == 1) {
if (buttonState == 0) {
analogWrite(engine, Xval);
buttonState = 1;
}
else {
digitalWrite(engine, LOW);
buttonState = 0;
}
}
buttonOld = buttonNew;
delay(1);
Serial.print("button");
Serial.print(SWval);
Serial.print(" X=");
Serial.println(Xval);
}
@Jimmy, 👍1
1 ответ
Лучший ответ:
▲ 1
Переместите аналоговую запись из кода изменения состояния кнопки, и она будет обновлять ШИМ постоянно, а не только при нажатии кнопки.
См. Код ниже.
Я также меняю имя переменной buttonState
на motorState
, так как оно указывает на состояние двигателя (Вкл/Выкл). И я перевернул его, так что 1
означает, что двигатель ВКЛЮЧЕН.
Еще одна вещь, которую я сделал,-это увеличил задержку до 10 мс, так что у вас не возникнет никаких проблем с переключением-отскоком.
int X = A0;
int SW = 2;
int Xval=5;
int SWval;
int buttonNew;
int buttonOld = 1;
int motorState= 0;//указывает, включен ли двигатель / выключен
int engine = 6;
void setup() { // Выполняется один раз
Serial.begin(9600);
pinMode(X, INPUT);
pinMode(SW, INPUT_PULLUP);
}
void loop() { // Выполняется постоянно
buttonNew = digitalRead(SW);
if (buttonOld == 0 && buttonNew == 1) {
if (motorState == 0) {
motorState = 1;
}
else {
motorState = 0;
}
}
buttonOld = buttonNew;
if (motorState == 1) {
Xval = analogRead(X);
analogWrite(engine, Xval);
}
else {
digitalWrite(engine, LOW);
}
delay(10);
Serial.print("button");
Serial.print(SWval);
Serial.print(" X=");
Serial.println(Xval);
}
,
@Gerben
Смотрите также:
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- PWM-вывод Arduino Nano не функционирует