Как я могу записать последовательность кнопок и сохранить ее в массиве
У меня есть 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; // Unpressed
}
Когда необходимо сохранить новое нажатие кнопки:
states[index_state] = state;
И добавьте его в состояние индекса, если 10 достигнуто, начните сначала (это означает, что последние 10 сохранены).
index_state = (index_state + 1) % 10;
И чтобы проверить состояния, которые вы просто перебираете из index_state.
Надеюсь, это поможет вам уйти.
Обратите внимание, что это называется кольцевым буфером.
это мой код, в котором хранится последовательность кнопок, но это будет здорово, если кто-то может помочь мне мигать светодиодной последовательностью, по возможности поставив микроконтроллер в режим воспроизведения или записи. Также этот код сталкивается с какой-то проблемой, поскольку несколько раз он не в состоянии принимать входы или принимает по два входа за раз:
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;//initialisition
Serial.begin(9600);
}
void loop(){
boolean mode = digitalRead(3) || digitalRead(4) || digitalRead(5);
while(mode == LOW) mode = digitalRead(3) || digitalRead(4) || digitalRead(5);//wait here till one of the pushbutton goes high;
//Serial.println("value");
if( mode == HIGH && previous == LOW && millis() - time1 > debounce){
//find out which one is high and store that value in array;
if(digitalRead(3)) arr[index_state] = 3;
else if(digitalRead(4)) arr[index_state] = 4;
else if(digitalRead(5)) arr[index_state] = 5;
else ;
//print the value and the index;
Serial.print(arr[index_state]);
Serial.print(" Stored in index: ");
Serial.println(index_state);
index_state = (index_state + 1) % 10;
//update value of time1 for button debouncing
time1 = millis();
}
//update the value of previous button state
previous = digitalRead(3) || digitalRead(4) || digitalRead(5);
}