Привет! Лишь несколько недель назад погрузился в мир программирования микроконтроллеров. Первым проектом стала защита на самодельный ТПА станок, которая следит за работой и в случаи если изделие застрянет в прессформе, останавливает цикл станка, чтобы не повредить недешёвую прессформу. Ещё недавно считал, что это просто что-то нереальное и этому нужно обучатся долгие годы, а тут раз и идею реализовал. В общем я был воодушевлён результатом и для дальнейшего изучения и сравнения выбрал 2 платформы и соответственно 2 платы: Arduino UNO и Iskra JS (Espruino). В Arduino привлекает большое сообщество и возможность кодить и прошивать не только в родном IDE (привык к Visual Studio Code). В Espruino язык JS, консоль работающую в реальном времени с платкой. В общем сейчас специально делаю один проект параллельно на двух платах, пытаясь понять плюсы той и другой. Есть платы, если матричная клавиатура 4x4. Цель: вводить через матричную клавиатуру числа (включая с точкой), сохранять эти числа в массив. В видео ниже, видно, что с Espruino у меня это получилось, причём довольно легко: https://youtube.com/video/dWHICAEOLeU (видео). По нажатию клавиатуры получаем символы '1', '2', '5' и т.д. Собираем в строку '125'. Отправляет строку в массив. На JS код дался легко. Так как получаем символы, а не цифры, нам это даже на руку, через += мы их просто соединяем. По готовности числа скидываем в массив и переходим с написанию нового. Это не совсем числа, но их в настоящие перевести не составит труда, используя всего один символ + перед переменной. Код (Javascript): var x = ""; // переменная для временного хранения числа var programs = []; // массив для сохранения чисел function pressKey(key) { // выполняем по нажатию цифр, точки. key – символ соответствующий кнопке x += key; } function saveNumber() { // выполняем по готовности числа programs.push(x); x = ""; // очищает x для построения следующего числа. } А вот на Arduino я пока не нашёл такого же простого и элегантного способа, я так понимаю из-за чёткого разделения переменных на типы. Если бы мне не нужна была запятая, я бы просто сделал Код (C++): x = x*10 + key-48 Подскажите пожалуйста лёгкие пути)
Нет лёгких путей. Ну так делайте, но мыслите шире: как только поймали запятую, то складываем числа в другую переменную. По окончанию ввода - из двух целых чисел получаем число с плавающей точкой, задача более чем тривиальная.
Я последнее время плохо понимаю вопросы. Вам нужно собрать строку? Тогда нужно объявить массив и с каждым нажатием заполнять его Код (C++): char x[10]; //длину строки с числом нужно знать заранее char indx=0; ... Если нажата цифра то { x[indx]=код цифры indx++; } если нажата зпт { x[indx]=код зпт indx++; } если нажат enter { обработать число, в indx хранится номер последней цифры indx=0;//готовность принимать следующее число } или вам флоат собирать? Код (C++): float x=0; float mul=10; ... Если нажато число то x=x+число*mul Если нажата зпт { x=x/10 //т.к. в предыдущем ифе мы всегда заранее на 10 домножали, то последнее домножение лишнее. mul=0.1; } если нажат enter { обработать число //подготовка к заполнению следующего числа x=0; mul=10; }
Есть такой волшебный тип данных String, Там можно почти как в JS. В общем, полный сервис для чайников
Спасибо, подходит! Делал вчера подобное, но не знал что нужно сразу задавать длину строки. Спасибо! C тоже String нужно будет посмотреть
Со String легко оказалось. Спасибо! Код (C++): String x = ""; void inputNumeral(char c) { x = String(x + c); }
int x1, x2, x3, y; x1=1; x2=2; x3=3; //y=x1*10^0+x2*10^1+x3*10^2=x1*1+x2*10+x3*100=1*1+2*10+3*100=321 y=x1*1e0+x2*1e1+x3*1e2; //321