Использование кнопок с массивами
Я пытаюсь написать простую программу, которая будет циклически перемещаться по массиву с помощью кнопок. Моя текущая версия программы использует операторы 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-светодиодная установка. Когда кнопка нажата, один из светодиодов включается, а затем, когда кнопка нажата снова, она выключается и включает второй и так далее.
Заранее благодарю вас за любую помощь.
ПРАВКА:
Этот вопрос был задан еще раз более подробно и имеет больше ответов здесь:
1 ответ
Давайте просто разберемся со строками символов.
Правда в том, что программирование на 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
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'
Вы должны стараться задавать по 1 вопросу за раз. Таким образом, когда другие люди ищут подобный вопрос, они могут найти ваш и его ответы., @st2000