Как я могу записать последовательность кнопок и сохранить ее в массиве

У меня есть 3 кнопки, и я хочу записать последовательность, в которой они нажаты в массиве размером 10, т. е. я хочу записать 10 значений, например {1,1,2,2,3,3,1 , 1,1,3}. Я хочу, чтобы мигать массив из 3 светодиодов в том же шаблоне, в котором были нажаты кнопки. У меня есть две дополнительные кнопки для размещения arduino в режимах записи и воспроизведения соответственно. Если кто-то может предложить, как я могу хранить значения в массиве, я действительно буду очень благодарен. Я также сталкиваюсь с проблемой, потому что очень сложно управлять подпрыгиванием кнопок одновременно.

2 голоса | спросил Sudhanshu Shivam 26 Jpm1000000pmFri, 26 Jan 2018 14:29:46 +030018 2018, 14:29:46

2 ответа


3

Вы можете создать такой массив, сделать его глобальным для легкого доступа к нему:

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.

Надеюсь, это поможет вам уйти.

Обратите внимание, что это называется кольцевым буфером.

ответил Michel Keijzers 26 Jpm1000000pmFri, 26 Jan 2018 14:40:18 +030018 2018, 14:40:18
0

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

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);


  }
ответил Sudhanshu Shivam 26 Jpm1000000pmFri, 26 Jan 2018 21:32:06 +030018 2018, 21:32:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132