Вложенный цикл не повторяется
loop
can-bus
Я пытаюсь взломать CANBUS с помощью идентификаторов и значений, но мой цикл, похоже, не меняет идентификатор.
Я ожидаю следующего при смене идентификаторов
0x100 FF FF FF FF FF FF FF FF
0x101 00 00 00 00 00 00 00 00
Но я получаю
0x100 FF FF FF FF FF FF FF FF
0x100 00 00 00 00 00 00 00 00
Я не уверен, где я ошибаюсь
#include <SPI.h>
#include "mcp_can.h"
// Определить вывод выбора микросхемы для MCP2515
#define CAN_CS 5
MCP_CAN CAN(CAN_CS); // Инициализируем MCP2515 с помощью контакта CS
void setup() {
Serial.begin(115200);
// Инициализируем MCP2515
if (CAN.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
Serial.println("MCP2515 Initialized Successfully!");
} else {
Serial.println("Error Initializing MCP2515...");
while (1);
}
CAN.setMode(MCP_NORMAL);
}
void loop() {
for (uint16_t id = 0x100; id <= 0x500; id++) { // Увеличить ID
for (uint8_t byteValue = 0x00; byteValue <= 0xFF; byteValue++) { // Увеличиваем байты данных от 0x00 до 0xFF
uint8_t data[8] = {byteValue, byteValue, byteValue, byteValue, byteValue, byteValue, byteValue, byteValue}; // Установить все байты в текущее значение
// Отправить CAN-сообщение
byte sendStatus = CAN.sendMsgBuf(id, 0, 8, data);
// Оставить условие if без изменений
if (sendStatus == CAN_OK) {
Serial.print("Sent message with ID: 0x");
Serial.print(id, HEX);
Serial.print(" Data: ");
for (int k = 0; k < 8; k++) {
Serial.print(data[k], HEX);
Serial.print(" ");
}
Serial.println();
} else {
Serial.print("Error sending message with ID: 0x");
Serial.println(id, HEX);
}
delay(10); // Небольшая задержка между сообщениями
}
// Вывести разделитель после завершения всех байтов данных для текущего идентификатора
Serial.println("----------------------------------------");
}
Serial.println("Finished all IDs from 0x100 to 0x500 with data bytes from 0x00 to 0xFF.");
while (1); // Остановиться после завершения
}
@maxum, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 2
То, что ваш внешний цикл «не увеличивается», может означать, что ваш внутренний цикл никогда не заканчивается:
for (uint8_t byteValue = 0x00; byteValue <= 0xFF; byteValue++) {
Итак, что мы имеем в коде вашего цикла for:
uint8_t byteValue-> byteValue может хранить значения от 0 до 255 (0xFF)byteValue <= 0xFF-> максимальное значение равно 255, а условие в основном меньше 256 -> ; всегда истинно.uint8_tПереполнение хорошо определено 255+1 == 0 (в отличие от знаковых значений)
Редактировать:
Я попытался скомпилировать этот цикл, и даже без подробной компиляции в Arduino IDE он показывает:
sketch_jan25a.ino: In function 'void loop()':
sketch_jan25a.ino:8:46: warning: comparison is always true due to limited range of data type [-Wtype-limits]
Так что не игнорируйте предупреждения в своем коде (в ядре Arduino тоже есть предупреждения :D)
,
@KIIV
Смотрите также:
- Мигните светодиодом 5 раз с помощью цикла for
- Какие правильные контакты для TWAI (CAN) на ESP32?
- Чтение нескольких аналоговых входных контактов
- Как остановить цикл в последовательном мониторе?
- Простой ESP32 MCP2515 МОЖЕТ кодировать VP230
- Arduino - Кнопка для запуска/остановки цикла
- Одновременное чтение кнопки?
- Объектно-ориентированное программирование Arduino
это не похоже на распечатку, сгенерированную программой... пожалуйста, предоставьте полную распечатку, @jsotola