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);
  }

}

, 👍2

Обсуждение

вы записываете в 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


1 ответ


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