Использование кнопок с массивами

Я пытаюсь написать простую программу, которая будет циклически перемещаться по массиву с помощью кнопок. Моя текущая версия программы использует операторы if и печатает строки.

Моя цель-иметь контактную информацию для 4 человек, хранящуюся в массиве. Я могу либо иметь массив строк на человека, либо создавать разные массивы строк для разных типов информации (например, имен, телефонных номеров).

Я хотел бы, чтобы одна кнопка циклически перемещала данные в одном направлении, а другая-в другом. Это мой код до сих пор, использующий операторы if. Я изменил код из учебника светофора, поэтому вы увидите некоторые переменные, названные в честь цветов.

//------------------------------- Declare variables
int ledPinOne = 2;
int ledPinTwo = 3;
int ledPinThree = 4;
int ledPinFour = 5;
int buttonPin = 6;
int state = 0;
char user_name_array[32];
char econ_one_name_array[32];
char econ_two_array[32];
char econ_three_name_array[32];


//------------------------------- Setup
void setup() {
  Serial.begin(9600);
  //------------------------------ Контакты для ввода/вывода
  pinMode(ledPinOne, OUTPUT);
  pinMode(ledPinTwo, OUTPUT);
  pinMode(ledPinThree, OUTPUT);
  pinMode(ledPinFour, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.println("ID");
  Serial.println(user_name_array);
}

//------------------------------- Основная программа
void loop() {
  if (digitalRead(buttonPin)) {
    if (state == 0) {
      Serial.println("Athlete");
      Serial.println("John Smith");
      Serial.println("No allergies, no medications");
      Serial.println("  ");
      setLights(HIGH, LOW, LOW, LOW);
      state = 1;
    } else if (state == 1) {
      Serial.println("Emergency Contact - Sister");
      Serial.println("Eliza Smith");
      Serial.println("Cell - 333.888.777");
      Serial.println("  ");
      setLights(LOW, HIGH, LOW, LOW);
      state = 2;

    } else if (state == 2) {
      Serial.println("Emergency Contact - Hermosita");
      Serial.println("Jackie Smith");
      Serial.println("Cell - 777.888.7777");
      Serial.println("  ");
      setLights(LOW, LOW, HIGH, LOW);
      state = 3;
    } else if (state == 3) {
      Serial.println("Emergency Contact - Father");
      Serial.println("Michael Smith");
      Serial.println("Cell - 888.777.777");
      Serial.println("  ");
      setLights(LOW, LOW, LOW, HIGH);
      state = 0;
    }
    delay(1000);
  }
}

void setLights(int red, int yellow, int green, int blue) {
  digitalWrite(ledPinOne, red);
  digitalWrite(ledPinTwo, yellow);
  digitalWrite(ledPinThree, green);
  digitalWrite(ledPinFour, blue);
}

У меня также есть 4-светодиодная установка. Когда кнопка нажата, один из светодиодов включается, а затем, когда кнопка нажата снова, она выключается и включает второй и так далее.

Заранее благодарю вас за любую помощь.

ПРАВКА:

Этот вопрос был задан еще раз более подробно и имеет больше ответов здесь:

Использование кнопки для циклического перемещения массива

, 👍0

Обсуждение

Вы должны стараться задавать по 1 вопросу за раз. Таким образом, когда другие люди ищут подобный вопрос, они могут найти ваш и его ответы., @st2000


1 ответ


0

Давайте просто разберемся со строками символов.

Правда в том, что программирование на Arduino использует язык C. С очень распространен, и вы можете искать помощь во многих местах.

Существует несколько способов работы со строками в C. В этом примере мы используем массив указателей на строки:

// давайте сделаем наш собственный массив строк
char *states[] = {
    "California", "Oregon",
    "Washington", "Texas"
};
int num_states = 4;

for(i = 0; i < num_states; i++) {
    printf("state %d: %s\n", i, states[i]);
}

Вывод этого кода выглядит следующим образом:

state 0: California
state 1: Oregon
state 2: Washington
state 3: Texas

Я взял этот пример отсюда.

добавлено позже...

Метод "printf" обычно не используется в Arduino land. Так что цикл "для" будет больше похож на:

for(i = 0; i < num_states; i++) 
{
 Serial.println("state ");
 Serial.println(i)
 Serial.println(states[i]);
}
,

Гм... printf ДЕЙСТВИТЕЛЬНО существует в _Arduino land, просто включите `<stdio.h>, @Roberto Lo Giacco