Новичку нужна помощь с фиксированной длиной строки
Я пытаюсь создать тестовое оборудование, которое будет взаимодействовать с некоторым программным обеспечением и должно отправлять строку исправления. когда напряжение меняется, длина струны тоже меняется. мне нужно ограничить результаты до 4 по длине. (извините за незнание правильной терминологии. Это тот результат, который мне нужен - Где
X = Flag CP Value
_ = Space
P = Polarity
C = CP Received value
Y = Flag Field Gradient
F = Field Gradient Received value
Z = Flag Contact CP
T = Contact CP Received value
В конце каждой строки также присутствует перевод строки и возврат каретки. Индикатор полярности будет отображать знак минус «-» только в том случае, если полученное значение отрицательный, в противном случае присвоение не будет передано. Хотя общая строка длина постоянна, значения для каждого измерения выровнены по правому краю и, следовательно, пространство будет присутствовать, если значение измерения не требует использование всех выделенных пространств символов. Примеры результатов
< X -89 Y -1989 Z -1096 >
< X 1039 Y 8 Z 78 >
это мой код на данный момент
#include <Wire.h>
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads1(0x48); // Используйте это для 16-битной версии
Adafruit_ADS1115 ads2(0x49);
void setup(void) {
Serial.begin(9600);
ads1.setGain(GAIN_ONE); // 1x усиление +/- 4,096 В 1 бит = 2 мВ
ads2.setGain(GAIN_ONE); // 1x усиление +/- 4,096 В 1 бит = 2 мВ
ads1.begin();
ads2.begin();
}
void loop(void) {
int16_t results01,results02,results03;
results01 = ads1.readADC_Differential_0_1();
results02 = ads1.readADC_Differential_2_3();
results03 = ads2.readADC_Differential_0_1();
Serial.print("X ");
Serial.print(round(results01 * multiplier));
Serial.print(" Y ");
Serial.print(round(results02 * multiplier));
Serial.print(" Z ");
Serial.print(round(results03 * multiplier));
Serial.println(); // отправляем cr/lf
delay(500);
}
Любая помощь, указывающая мне в правильном направлении, была бы потрясающей. Заранее спасибо
Джо
@Joe Lord, 👍0
Обсуждение1 ответ
Семейство printf() пригодится, когда вам нужно такой контроль над форматированным выводом:
/*
* Формат числа как 5 символов.
* Возвращает строку в статически выделенном буфере.
*/
char * format5(int x)
{
static char buffer[6]; // 5 символов + завершающий NUL
snprintf(buffer, sizeof buffer, "%5d", x);
return buffer;
}
void setup() {
Serial.begin(9600);
Serial.println(format5(15));
Serial.println(format5(-15));
Serial.println(format5(-1500));
Serial.println(format5(1500));
}
void loop(){}
выход:
15
-15
-1500
1500
Спасибо за это. поскольку я был очень новичком в этом, я пробовал и не могу заставить это работать..., @Joe Lord
- Печать string and integer LCD
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Отправьте несколько значений int из Python в Arduino, используя pySerial
- Глобальные переменные занимают много места в динамической памяти.
- (Код ультразвукового датчика: такого файла или каталога нет)
- rfid_default_keys проверить с помощью RC522
- Команда strtok() с Serial связью
Что вы пытаетесь «ограничить длину до 4»? Я предполагаю, что вы не можете контролировать то, как устройство отправляет свою строку, и хотите отформатировать результаты устройства для терминала? Можете ли вы показать пример того, как вы хотите, чтобы выглядел конечный результат?, @JRobert
< X -89 Y -1989 Z -1096 >, @Joe Lord
Каждое чтение, которое я получаю, должно быть 4 по длине. я читаю от -2000 до +2000, но, скажем, когда напряжение равно -89, струна укорачивается., @Joe Lord
Итак, вы хотите напечатать, например, «15» как «0015»? А как насчет «-1500»? Как это может занять менее 5 печатных символов?, @JRobert
извините, я имею в виду 5 символов. «___15» или «__-15» или «-1500» или «_1500», как я уже сказал, я очень новичок в этом, и я поражен, что зашел так далеко, не обращаясь за помощью. :), @Joe Lord