C/C++

Подскажите почему не работает элементарнейший код на ардуино

Нужно чтобы ШИМ сигнал считанный с потенциометра входа А0 подавался на светодиод ledPin только если нажата кнопка, а если не нажата то светодиод гореть не должен.
Если загрузить код как на картинке - то шим всегда подается на светодиод вне зависимости от того нажата кнопка или нет. Памагити умственно отсталому
Tudor Diordiev
Tudor Diordiev
225
 void loop() 
{ analogWrite(ledPin, digitalRead(D4)*analogRead(A0)); }
  1. функцию loop можно упросить, а под ledPin не нужно устанавливать режим pinMode
  2. когда функция такая простая - то не проще ли управление кнопкой сделать хардварным? (т.е. А0 через резистор закоротить на Ground, а между А0 и выходом с потенциометра поставить кнопку? Тогда будет вообще просто.
 void setup(){} 
void loop(){ analogWrite(5,analogRead(A0)); }
ЮБ
Юра Бубнов
51 417
Лучший ответ
В коде на ардуино, который вы предоставили, есть несколько ошибок. Во-первых, переменная buttonStatus должна быть объявлена как boolean, а не как int. Во-вторых, в функции setup() необходимо добавить строку pinMode(ledPin, OUTPUT);, чтобы установить светодиод на выход.

Исправленный код выглядит так:

const int ledPin = 13; // пин для светодиода
const int buttonPin = A0; // пин потенциометра
int buttonStatus = 0; // состояние кнопки

void setup() {
pinMode(ledPin, OUTPUT); // устанавливаем светодиод на выход
}

void loop() {
int potValue = analogRead(buttonPin); // считываем значение потенциометра
buttonStatus = map(potValue, 0, 1023, 0, 1); // преобразуем значение в диапазон 0-1
if (buttonStatus == 1) { // если кнопка нажата
digitalWrite(ledPin, HIGH); // включаем светодиод
} else {
digitalWrite(ledPin, LOW); // выключаем светодиод
}
}
Обратите внимание, что в этом коде мы используем функцию map() для преобразования значения потенциометра в диапазон 0-1. Это необходимо для того, чтобы кнопка могла находиться в любом положении, а не только в крайних точках.
Ярик Баратов
Ярик Баратов
40 871
Tudor Diordiev чушь какую то нейросеть выдала как всегда
Ваш код содержит ошибку в условном операторе if. Вместо if (D4, HIGH), вы должны использовать if (digitalRead(D4) == HIGH). Вот исправленный код:
 int pwm; 
const int ledPin = 5;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(D4, INPUT);
}

void loop() {
pwm = analogRead(0);
if (digitalRead(D4) == HIGH) {
analogWrite(ledPin, pwm);
} else {
analogWrite(ledPin, 1);
}
delay(30);
}
Владик Ахатов
Владик Ахатов
25 860
Tudor Diordiev спасибо учител!)