Как записать последовательность кнопок и сохранить ее в массиве
У меня есть 3 кнопки, и я хочу записать последовательность их нажатия в массив размером 10, т. е. я хочу записать 10 значений, например {1,1,2,2,3,3,1 ,1,1,3}. Я хочу мигать массивом из 3 светодиодов по той же схеме, по которой были нажаты кнопки. У меня есть две дополнительные кнопки для перевода Arduino в режимы записи и воспроизведения соответственно. Если кто-нибудь может предложить, как я могу хранить значения в массиве, я буду очень благодарен. Я также столкнулся с проблемой, потому что очень сложно управлять одновременным подпрыгиванием кнопок.
2 ответа
Лучший ответ:
Вы можете создать такой массив, сделать его глобальным для быстрого доступа к нему:
int states[10];
И текущий индекс:
int index_state = 0;
И инициализируйте массив (в настройках):
for (int n = 0; n < 10; n++)
{
states[n] = 0; // Не нажато
}
Когда следует сохранять новое нажатие кнопки:
states[index_state] = state;
И добавьте единицу в состояние индекса, если достигнуто 10, начните сначала (это означает, что последние 10 сохранены).
index_state = (index_state + 1) % 10;
И чтобы проверить состояния, которые вы просто перебираете из index_state.
Надеюсь, это поможет вам начать работу.
Обратите внимание, что это называется кольцевым буфером.
большое спасибо. Это помогло мне сохранить последовательность кнопок. Если вы можете предложить мне, как я могу мигать светодиодами в той же последовательности, что и в массиве, с задержкой 500 миллисекунд. Я публикую свой код в разделе ответов, пожалуйста, посмотрите., @Sudhanshu Shivam
Задержка в 500 мс может быть сложной. Это означает, что для каждой кнопки, которую вы нажимаете, вы также должны сохранять время. Таким образом, вы можете проверить, прошло ли 500 мс с момента нажатия и мигания соответствующего светодиода. Возможно, это поможет сначала создать программу для одной кнопки и одного светодиода (с задержкой 500 мс), а затем добавить больше кнопок/светодиодов. В большинстве случаев лучше постепенно расширять программу, чем идти прямо к конечной цели., @Michel Keijzers
это мой код, который хранит последовательность кнопок, но было бы здорово, если бы кто-нибудь помог мне мигать последовательностью светодиодов и переводить микроконтроллер в режим воспроизведения или записи, когда это необходимо. Также этот код сталкивается с некоторыми проблемами, так как иногда он не может принимать входные данные или принимает два входных данных одновременно:
int arr[10];
boolean previous = LOW;
unsigned long time1 = 0;
int debounce = 200;
unsigned long time2 = 0;
int index_state = 0;
void setup()
{
for(int i = 3;i<6 ;i++)
pinMode(i,INPUT);
for(int n=0;n<10;n++) arr[n] = 0;//инициализация
Serial.begin(9600);
}
void loop(){
boolean mode = digitalRead(3) || digitalRead(4) || digitalRead(5);
while(mode == LOW) mode = digitalRead(3) || digitalRead(4) || digitalRead(5);//ждем здесь, пока одна из кнопок не перейдет в высокий уровень;
//Serial.println("значение");
if( mode == HIGH && previous == LOW && millis() - time1 > debounce){
// узнать, какой из них выше, и сохранить это значение в массиве;
if(digitalRead(3)) arr[index_state] = 3;
else if(digitalRead(4)) arr[index_state] = 4;
else if(digitalRead(5)) arr[index_state] = 5;
else ;
//выводим значение и индекс;
Serial.print(arr[index_state]);
Serial.print(" Stored in index: ");
Serial.println(index_state);
index_state = (index_state + 1) % 10;
//обновляем значение time1 для устранения дребезга кнопок
time1 = millis();
}
//обновляем значение предыдущего состояния кнопки
previous = digitalRead(3) || digitalRead(4) || digitalRead(5);
}
- Как вернуть значение массива символов в функции Arduino IDE?
- Почему я не могу изменить значения массива, даже если оператор успешно вызван? TFT-сенсорный экран
- Использование массивов, двоичных данных и битового чтения
- Хранение значений широты и долготы в виде символов с заданной точностью
- Как преобразовать строку в шестнадцатеричный массив
- Матричный дисплей с Arduino UNO (ПРОБЛЕМА)
- Почему я не могу получить размер массива указателей
- Замена большой таблицы поиска оператором switch
можно ли показать вашу схему подключения?, @Michel Bouchard