Serial.println не будет форматировать DEC
Это меня просто пугает. Поэтому я записал его в EEPROM и хотел бы прочитать с этого адреса и отформатировать в базе 10, э-э-э... Десятичный. Обычная числовая штука, которая не является ASCII. Но он продолжает возвращать значения ASCII, когда я пишу:
Serial.println(EEPROM.read(address), DEC)
.
Подождите странной части, когда я форматирую в других базах, таких как, скажем, BIN или OCT, он выводит правильную базу. Пожалуйста, помогите. Вот полный фрагмент этой крошечной программы.
#include <EEPROM.h>
int addr = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available() > 0){
int rc = Serial.read();
EEPROM.write(addr, rc);
Serial.println(EEPROM.read(addr), DEC);
}
}
@Joshua Olalekan, 👍2
Обсуждение1 ответ
Наконец-то я все понял. По-видимому, когда я вызываю Serial.read() и присваиваю ему значение "int rc", он как бы преобразует фактические значения ASCII в целое число. Таким образом, считывание числа 3 с последовательного монитора и назначение его rc хранит 51 в rc. Так что трюк, который я нашел для этого, состоял в том, чтобы использовать
int rc = Serial.read()-'0'
Таким образом, я сохраняю 51-48, то есть 3 (поскольку 48-это значение ASCII для 0).
- Спасибо.
Serial.read() возвращает символ, который всегда представлен в виде номера кода ASCII. возвращаемый тип чтения-int, чтобы иметь возможность возвращать -1, если ничего не читается., @Juraj
@Джошуа: этот ответ не имеет смысла; прочитайте и попытайтесь понять комментарии., @PimV
- Не получается читать из / писать в EEPROM
- о том, как разделить один внешний последовательный EEprom с помощью двух микроконтроллеров?
- использование EEPROM Arduino
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
вы записываете в EEPROM полученный символ, а не число. вы печатаете номер., @Juraj
Я не понимаю, чего вы ждете от своей программы. Компьютеры (обычно) взаимодействуют с помощью ASCII. Вы читаете значение 1 с другого компьютера. Это, вероятно, ASCII. Вы храните это в EEPROM. Затем вы печатаете это из EEPROM обратно на другой компьютер. И вы видите, что вы изначально набрали. Звучит нормально. Подождите, а ваше задание состояло в том, чтобы прочитать ASCII, преобразовать его в число, сохранить в EEPROM, а затем прочитать это число и распечатать? Если это так, вы упускаете шаги. Похоже, вам нужно вернуться назад и понять, чему проблема пытается научить вас., @st2000
Проблема в том, что я записываю целое число в EEPROM, но оно выводит ASCII даже с аргументом "DEC". Однако когда я переключаю "DEC" на BIN или OCT, он выводит двоичные и восьмеричные значения соответственно. Но когда я использую "DEC", он дает мне только ASCII, а не точное значение DEC целого числа, которое я вставляю. Я что-то упустил?, @Joshua Olalekan
Что значит "целое число, которое я вложил"? Как вы вводите целое число поверх последовательного, которое работает с символами ASCII?, @Majenko
перепишите свой код так, чтобы он выводил целые числа от 0 до 20 ... что ты видишь?, @jsotola
Пожалуйста, [отредактируйте] свой вопрос и покажите нам, что вы получаете и чего ожидаете. Это означает некоторый пример ввода и вывода. И почему вы думаете, что это работает на других базах., @the busybee