Я хочу создать 10 уровней с помощью одной кнопки, но этот код показывает только уровень 1?
#include <Adafruit_NeoPixel.h>
const int PIN = 4;
const int NUMPIXELS = 10;
const int BUTTONPIN = 6;
int buttonState = 0;
int PINState = 0;
int level = 1;
int dt = 100;
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pinMode(BUTTONPIN, INPUT);
Serial.begin(9600);
}
void loop(void) {
Serial.println(buttonState);
buttonState = digitalRead(BUTTONPIN);
if (digitalRead(BUTTONPIN) == HIGH) {
if (buttonState == 0) {
buttonState = 1;
} else {
buttonState = 0;
}
}
if (buttonState == 1) {
opdracht(level);
}
else {
if (level >= 10) {
level++;
} else {
level = 1;
}
pixels.clear();
}
}
//level 1
//void opdracht1() {
// pixels.setPixelColor(0, pixels.Color(150, 0, 0));
// pixels.setPixelColor(5, pixels.Color(0, 0, 150));
// pixels.show();
//}
void opdracht(int x) {
if (x == 1) { //level 1
pixels.setPixelColor(0, pixels.Color(150, 0, 0));
pixels.setPixelColor(5, pixels.Color(0, 0, 150));
pixels.show();
}
if (x == 2) { //level 2
pixels.setPixelColor(8, pixels.Color(150, 0, 0));
pixels.setPixelColor(6, pixels.Color(150, 0, 0));
pixels.setPixelColor(1, pixels.Color(0, 0, 150));
pixels.show();
}
@louise moons, 👍1
Обсуждение1 ответ
Вы забыли задать вопрос. Поэтому я предполагаю, что предполагаемый вопрос звучит так: “Почему этот код всегда показывает уровень 1?”, И я попытаюсь ответить на этот вопрос.
Переменный уровень
определяется здесь:
int level = 1;
Его начальное значение равно 1. Затем он обновляется здесь:
if (level >= 10) {
level++;
} else {
level = 1;
}
При первом запуске этого раздела кода level
имеет свое начальное значение,
а именно 1. Условие в if
принимает значение false, тогда уровень
оператора
level = 1;
выполняется, который присваивает значение 1 уровню
(что не имеет никакого эффекта,
так как это уже было его значением в любом случае).
При следующем запуске этого раздела кода уровень по-прежнему будет иметь значение 1, и эффект будет таким же, как и в предыдущий раз.
оу я понял спасибо!! что мне нужно изменить, чтобы изменить значение?, @louise moons
@louisemoons: При каком условии вы хотите, чтобы «уровень» увеличивался? Можете ли вы закончить предложение «уровень
должен быть увеличен, если…”?, @Edgar Bonet
Еще один, более сильный намек. Ваш текущий код говорит: «Если уровень больше или равен 10, увеличьте его». Он начинается с 1, и никакой другой код не меняет его, так что выражение if никогда не будет истинным. Разве вы не хотите увеличивать его, если оно меньше 10?, @Duncan C
Уровень @EdgarBonet должен увеличиваться при нажатии кнопки, @louise moons
- Использование аккумуляторов 18650 с повышающим преобразователем 3,7 В в 5 В.
- Передача цвета функции без использования определенного Adafruit_NeoPixel
- Самый простой способ подсчитать, сколько глобальных переменных содержится в коде скетча?
- Как я могу загрузить скетч удаленно из удаленного места на arduino, который питается от батареи
- Запуск фрагмента кода на основе функции
- Почему мои двигатели, подключенные к Arduino MEGA, не работают?
- Есть ли какой-нибудь способ загрузить скетч с ардуино?
- Как объявить массив переменного размера (глобально)
Я думаю, что
if (level >= 10) {
должно бытьif (level < 10) {
?, @GerbenВаш код чтения кнопки не работает. Он регистрирует нажатие кнопки только в том случае, если кнопка нажата, когда код находится точно между двумя строками digitalRead. Что очень маловероятно. Попробуйте добавить еще несколько переменных вместо того, чтобы пытаться использовать
buttonState
для трех разных целей. Подсказка: используйтеbuttonState
для текущего состояния кнопки; используйте что-то вродеoldButtonState
для состояния кнопки в последнем цикле; и используйте что-то вродеbuttonPressed
, чтобы указать, когда кнопка впервые нажата (что вы затем используете для увеличенияlevel
), @Gerbenспасибо! Я попытаюсь использовать oldButtonState и buttonPressed., @louise moons