Типы данных и волшебные

Тема в разделе "Arduino & Shields", создана пользователем Paromond, 22 мар 2022.

  1. Paromond

    Paromond Нуб

    Здравствуйте ! Cтолкнулся не сколько с проблемой сколько с интересом . На сколько я зна тип переменных char нужен для хранения символов "аски" . Но при попытке вывода текста в монитор порта через переменную, я получа . Хотя через массив string вывод работает должным образом. "стринги " использовать не хочу , ибо простая замена char на string в коде, занимает 3% памяти
    [​IMG]
    а воть мой код
    Код (C++):
    uint32_t funTimer;//точкa отсчёта таймера
    int flfun;//флаг функции задержек
    int switchFun;// флаг процента выполнения
    int pinBuffer;// буфер предыдущего пина функции задержек

    void setup() {
      Serial.begin(9600);    // открыть порт на скорости
      //выходы
      pinMode(4 , OUTPUT);/*компрессор*/pinMode(5 , OUTPUT);/*подушка*/pinMode(7, OUTPUT);/*нож*/pinMode(6 , OUTPUT);/*сброс*/
      //входы
      pinMode(10, INPUT_PULLUP);/*концевик*//*pinMode(11, INPUT_PULLUP);*//*стоп*/pinMode(A7, INPUT);/*вакуум*/pinMode(A6, INPUT);/*нагрев*/
      pinMode(LED_BUILTIN, OUTPUT);
      delay(1000);
     

    }

    void loop() {
      funDelay (LED_BUILTIN , 10, "ligh");

    }

    int funDelay (int pin , int Delay, char Text) { //порт, задержка, текст в порт
      float crutch;
      if (flfun == 0 && pinBuffer != pin) {                            //проверка на первый запуск
       digitalWrite(pin, HIGH);
        Serial.print(Text); Serial.print(" на порту № "); Serial.print(pin); Serial.print(" запущен на "); Serial.print(Delay); Serial.println(" секунд");  
        funTimer = millis();  //сброс таймера
        float crutch = Delay / 4;
        flfun = 1;
      }
      if (millis() - funTimer >= Delay * 1000 && flfun > 0) {  // ищем разницу (Delay)
        digitalWrite(pin, LOW);
        Serial.print(Text); Serial.print(" на порту № "); Serial.print(pin); Serial.println(" отклчён ");
        pinBuffer = pin;      //запомним пин
        flfun = 0; switchFun = 0; //сброс
      }

      if (millis() - funTimer >= crutch * 1000 && flfun == 1 && switchFun < 1) {
        Serial.println("25% ");
        switchFun = 1;
      }

      if (millis() - funTimer >= crutch * 1000 * 2 && flfun == 1 && switchFun < 2) {
        Serial.println("  50% ");
        switchFun = 2;
      }

      if (millis() - funTimer >= crutch * 1000 * 3 && flfun == 1 && switchFun < 3) {
        Serial.println("    75% ");
        switchFun = 3;
      }

    }
     
     

    Вложения:

  2. SergeiL

    SergeiL Оракул Модератор

    Потамушта не нужно путать отдельный символ
    Код (C++):
    char Text;
    и указатель на строку
    Код (C++):
    char * Text;
     
    Paromond, Andrey12 и arkadyf нравится это.
  3. Paromond

    Paromond Нуб

    спасибо , до вас я вообще не знал об указателях
     
  4. parovoZZ

    parovoZZ Гуру

    Это условности. По факту в этом типе данных можно хранить любое целочисленное число без знака размерностью 1 байт.
     
  5. SergeiL

    SergeiL Оракул Модератор

    А кто со знаком запрещает?
     
  6. b707

    b707 Гуру

    в char ?
     
  7. SergeiL

    SergeiL Оракул Модератор

    А почему нет?
    upload_2022-3-24_16-0-41.png

    А это с Microsoft по VS 2022:
    upload_2022-3-24_16-6-39.png
     
  8. parovoZZ

    parovoZZ Гуру

    как-то это странно, т.к. не латинские символы в ascii таблице занимают вторую половину таблицы.
     
  9. SergeiL

    SergeiL Оракул Модератор

    Так а какая разница?
    Есть таблица, есть код, коду соответствует символ.