объясните пожалуйста прилагаемый скетч
Извините за новичка. 1. какое значение:
if(Xstr[XstrLength-1] != '|'){
Xstr[XstrLength] = '|';
Xstr[XstrLength+1] = '\0';
- настройка:
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);
}
@laoadam, 👍0
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 байт.
char Xstr[60];
определяет массив символов (строку), который может содержать 60 символов. Однако обратите внимание, что в этой строке также должно быть окончание \0 , поэтому на самом деле вы можете поместить внутрь только 59 символов.itoa(Yint,Ystr,10);
преобразует Yint, который является целочисленным значением, в строку (где каждая цифра имеет собственный байт), а 10 — это длина.
- Есть ли какой-нибудь способ загрузить скетч с ардуино?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Асинхронные вызовы функций в скетче ардуино
- Проблема с загрузкой моего скетча на Ардуино
- Что произойдет, если возникнет ошибка времени выполнения?
- Проблема: "stray '#' in program"
- Двигатель постоянного тока шумит, но не вращается
- Цикл While не прерывается
Спасибо Мишель Кейзерс. Я перепутал char Xstr[60] и itoa(Yint,Ystr,10), на самом деле это не одно и то же., @laoadam
С радостью готово. Если ответ вам поможет, пожалуйста, проголосуйте за него и примите мой ответ., @Michel Keijzers
Привет, при использовании MCP4261 есть функция «digitalPotWrite», могу ли я использовать «digitalWrite» вместо нее? Спасибо., @laoadam
Поскольку «digitalPotWrite» должно быть недействительным определением, его нельзя использовать внутри установки., @laoadam
digitalPotWrite — это функция для связи с MCP4261 через SPI. digitalWrite — это функция установки высокого или низкого уровня вывода ввода-вывода. Эти двое не имеют вообще ничего общего друг с другом., @Majenko