Новичок в Arduino, и у меня есть WIP-код для класса. ОШИБКА с работающими светодиодами?

error

(EDIT) Моя цель с этим кодом - использовать два потенциометра, pot0 и pot1 соответственно, для управления 8 светодиодами. Pot0 управляет последовательностью включения светодиодов (1, 2 или 3), а pot1 управляет тем, какие светодиоды в каждой последовательности активны. В настоящее время у меня проблема, потому что я запускаю последовательность 1 (первый оператор if) на моем arduino, но я не могу заставить светодиоды загораться при вызове потенциометром. Единственный работающий светодиод — это светодиод 0, и это только в том случае, если оба потенциометра были в правильном положении, когда код начинает работать.

int pot0 = 0;
int pot1 = 1;
int led[] = {7, 6, 5, 4, 3, 2, 1, 0};



void setup() {

for (int i = 0; i < led; i++){
  pinMode(led, OUTPUT)
;}
}
void loop() {
  int potread = analogRead(pot0);
  int val = analogRead(pot1);
  int potR = map(val, 0, 1023, 0, 7);

if (potread <= 341) {
  for (int i; i == potR;)
  digitalWrite(led[i], HIGH);

}

else if (potread <= 682) {

}
else {

}
}

, 👍0

Обсуждение

На самом деле я понял, что вызывало ошибку, но теперь у меня проблема с тем, что делает фактический код, поэтому я обновлю свой пост., @Jaiden Clark

разделите показания горшка и светодиодное освещение... вместо if (potread <= 341) { digitalWrite(led, HIGH);} используйте переменную flag... сделайте что-то вроде этого if (potread < = 341) level1 = true; ... дальше в программе if ( level1 ) digitalWrite(led, HIGH); ... таким образом ваш код будет менее запутанным, @jsotola

Я обновил свой пост. Я был бы признателен, если бы вы взглянули на него еще раз и дали мне несколько советов., @Jaiden Clark

у вас неправильный цикл for, @jsotola


2 ответа


Лучший ответ:

1

Для этого следует использовать map(). Вместо int potR = val % 8; попробуйте int potR = map(val, [минимальное значение банка], [максимальное значение банка], 0, 7). Кроме того, я почти уверен, что вам не нужен цикл for, если все, что вы делаете, это led[i]. В этом случае вы можете использовать led[potR].

,

Я обновил свой пост, спасибо за вашу помощь. Я исправил проблему с циклом For, и теперь он будет компилироваться на моей плате. Пожалуйста, прочитайте пост для новых выпусков, @Jaiden Clark

Скорее всего, это сработает, но сейчас я не могу понять, сработает ли это, потому что я не могу заставить свою Arduino останавливать зажигание только светодиодов 6 и 7, и я не уверен, в чем проблема. Когда я запускаю код, он начинает с обоих из них с высокой яркостью, и, возможно, через секунду яркость светодиода 6 уменьшается. Есть ли что-то в моем коде, что может вызвать это?, @Jaiden Clark

Попробуйте выполнить некоторые простые действия по устранению неполадок, например выполнить цикл for через светодиодную матрицу., @KTibow

Мне удалось это выяснить (по какой-то причине на моей ардуино работал старый скетч). Кажется, все в порядке, за исключением того, что мой pot1, похоже, не влияет на то, какие светодиоды горят, он загорается только LED 0, даже если я поворачиваю pot1 до максимума., @Jaiden Clark


1

Прошлой ночью, работая над этим, я разговаривал с кем-то, кто смог мне помочь, и с тех пор решил все мои проблемы. Спасибо всем, кто помог мне решить проблемы, с которыми я столкнулся!

Для тех, кому интересно, как получился мой окончательный код ->

int pot0 = 0;
int pot1 = 1;
int led[] = {7, 6, 5, 4, 3, 2, 8, 9};
const int DelayPeriod = 100;


void setup() {
pinMode(pot0, INPUT);
pinMode(pot1, INPUT);
for (int i = 0; i < led; i++){
  pinMode(led, OUTPUT)
;}
}
void loop() {
  int potread = analogRead(pot0);
  int val = analogRead(pot1);
  int potR = map(val, 0, 1023, 0, 7);
if (potread <= 341) {
  for (int i = 0; i <= led; i++){
    if (i == potR){
      digitalWrite(led[i], HIGH);
    }
    else {
      digitalWrite(led[i], LOW);
    }
  }


}
else if (potread <= 682) {
  for (int i = 0; i <= led; i++){
    if (i <= potR){
      digitalWrite(led[i], HIGH);
    }
    else {
      digitalWrite(led[i], LOW);
    }
  }

}
else {
  for (int i = 0; i <= led; i++){
    if ((i <= (potR + 1)) && (i >= (potR - 1))){
      digitalWrite(led[i], HIGH);
    }
    else {
      digitalWrite(led[i], LOW);
    }
  }
}
}
,