Запись чисел в массив
- Войдите на сайт для отправки комментариев
Сб, 01/12/2012 - 14:40
Здравствуйте!
В программе нужно записывать значения принимемые с кнопочной клавиатуры в массив, для передачи на LCD и после обработки - на другое устройство. Не представляю как это сделать.
Просьба сильно не пинать - в программировании не силён, больше занимаюсь железом.
#include <Wire.h> //подключаем библиотеки #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2);// параметры дисплея long freqAj; int i;//Счётчик циклов //int j;//Счетчик циклов 2 int freqA[6]; //массив цифр для частоты А int n=0; word dataInput; #define DATA 9 #define LATCH 8 #define CLOCK 7 #define CLKUS 1 void setup() { pinMode(DATA,INPUT); pinMode(LATCH,OUTPUT); pinMode(CLOCK,OUTPUT); freqA[0] = 1; //начальное значение частоты freqA[1] = 4; // в этот массив нужно записать значения с клавиатуры freqA[2] = 1; freqA[3] = 2; freqA[4] = 0; freqA[5] = 0; freqA[6] = 0; lcd.init(); } void loop() { dataInput = 0; // функция ввода с клавиатуры digitalWrite(LATCH,HIGH); // Parallel mode for (int i=15; i>=0; i--) { digitalWrite(CLOCK,HIGH); delayMicroseconds(CLKUS); dataInput |= (digitalRead(DATA) ? (1<<i) : 0); digitalWrite(CLOCK,LOW); delayMicroseconds(CLKUS); if (i==15) digitalWrite(LATCH,LOW); // Serial Mode } //Конец функции ввода с клавиатуры //delay(300); if (dataInput==0b1111111111111101) { n=1; } else if (dataInput==0b1111111111111011) { n=2; } else if (dataInput==0b1111111111110111) { n=3; } else if (dataInput==0b1111111111101111) { n=4; } else if (dataInput==0b1111111111011111) { n=5; } else if (dataInput==0b1111111110111111) { n=6; } else if (dataInput==0b1111111101111111) { n=7; } else if (dataInput==0b1111111011111111) { n=8; } else if (dataInput==0b1111110111111111) { n=9; } else if (dataInput==0b1111111111111110) { n=0; } for(int j=0; j<7; j=j+1) // Начало функции вывода массива на LCD { lcd.backlight(); lcd.setCursor(j,0); lcd.print(freqA[j]); } // Конец функции вывода массива на LCD }
если я прявильно понял из вашего сообщения и комменатариев в коде чеговы хотите- что бы значиение переменной n было записано в первую ячейку массива?
тогда вам просто нужно добавить в строчке 87 вашего кода :
Это понятно, с записью одного числа проблем нет. Нужно, что бы при нажатии второй кнопки, третьей и т.д. Числа записывались соответственно во 2-ю, 3-ю и т.д. до седьмой ячейки.
Состояние клавиатуры проверяется постоянно и если ни одна кнопка не нажата то на вывод 9 ардуины приходит 16 единиц.
Добавляете переменную, для хранения позиции для записи цифры.
Например, после строки 9:
В строке 45:
В строке 87:
Спасибо большое, по Вашему примеру всё получается.
Появилась проблема - при выводе на LCD на последней позиции почему-то постоянно стоит -1
У Вас цикл до 6, а массив можно индексировать только до 5. Т.е.для массива индексы от 0 до 5, поскольку его размер 6. Либо увеличивайте размер массива, либо при выводе ограничьте цикл размером массива, т.е.6
Вот какой вид имеет код сейчас:
Изменение размера массива и цикла ничего не изменяет - на конце числа на LCD по прежнему -1.
В строке 7 исправьте размер массива с 6 на 7, Вы записываете за пределы массива операцией freqA[6]=0;