объясните пожалуйста прилагаемый скетч

Извините за новичка. 1. какое значение:

    if(Xstr[XstrLength-1] != '|'){
      Xstr[XstrLength] = '|';
      Xstr[XstrLength+1] = '\0';
  1. настройка: char Xstr[60]; что означает? а затем: itoa(Yint,Ystr,10);

Код:

#include <VirtualWire.h>

//настройка геймпада
int up_button = 2;
int down_button = 4;
int left_button = 5;
int right_button = 3;
int start_button = 6;
int select_button = 7;
int joystick_button = 8;
int joystick_axis_x = A0;
int joystick_axis_y = A1;
int buttons[] = {up_button, down_button, left_button, right_button, start_button, select_button, joystick_button};

void setup()
{

    //настройка геймпада
    for (int i; i < 7; i++)
    {
        pinMode(buttons[i], INPUT);
        digitalWrite(buttons[i], HIGH);
    }

    Serial.begin( 9600 );

    //настройка передатчика
    vw_set_tx_pin(12);          // Устанавливаем контакт D12 в качестве контакта TX
    vw_set_ptt_inverted(true);  // Требуется для DR3100
    vw_setup(2000);             // Битов в секунду
}

int counter = 0;

int Xint;
int Yint;

char Xstr[60];
char Ystr[60];

void loop()
{
    // Чтение и сохранение данных датчика
    Xint = analogRead(joystick_axis_x);
    Yint = analogRead(joystick_axis_y);

    // Преобразуем целочисленные данные напрямую в массив Char
    itoa(Yint,Ystr,10);
    itoa(Xint,Xstr,10);

    int XstrLength = String(Xstr).length();

    if(Xstr[XstrLength-1] != '|'){
        Xstr[XstrLength] = '|';
        Xstr[XstrLength+1] = '\0';
    }

    char combinedArray[String(Xstr).length() + String(Ystr).length() + 1];
    sprintf(combinedArray, "%s%s", Xstr, Ystr);

    vw_send((uint8_t *)combinedArray, strlen(combinedArray));
    vw_wait_tx(); // Подождем, пока все сообщение не исчезнет

    Serial.println(combinedArray);

}

, 👍0


1 ответ


Лучший ответ:

2
  1. Это добавляет символы конца строки.

    if(Xstr[XstrLength-1] != '|'){ Xstr[XstrLength] = '|'; Xstr[XstrLength+1] = '\0'

Сначала он проверяет, является ли последний символ Xstr символом «|», если нет: Поместите | сразу после последнего символа И добавьте '\0', который является символом завершения строки

Строка в C/C++ обычно строится следующим образом, например, «Hello» состоит из байтов:

'H', 'e', 'l', 'l', 'o', \0

Где каждый из приведенных выше символов/значений ASCII, а последний \0 — 0 байт.

  1. char Xstr[60]; определяет массив символов (строку), который может содержать 60 символов. Однако обратите внимание, что в этой строке также должно быть окончание \0 , поэтому на самом деле вы можете поместить внутрь только 59 символов.

  2. itoa(Yint,Ystr,10); преобразует Yint, который является целочисленным значением, в строку (где каждая цифра имеет собственный байт), а 10 — это длина.

,

Спасибо Мишель Кейзерс. Я перепутал char Xstr[60] и itoa(Yint,Ystr,10), на самом деле это не одно и то же., @laoadam

С радостью готово. Если ответ вам поможет, пожалуйста, проголосуйте за него и примите мой ответ., @Michel Keijzers

Привет, при использовании MCP4261 есть функция «digitalPotWrite», могу ли я использовать «digitalWrite» вместо нее? Спасибо., @laoadam

Поскольку «digitalPotWrite» должно быть недействительным определением, его нельзя использовать внутри установки., @laoadam

digitalPotWrite — это функция для связи с MCP4261 через SPI. digitalWrite — это функция установки высокого или низкого уровня вывода ввода-вывода. Эти двое не имеют вообще ничего общего друг с другом., @Majenko