Моя визуализация покажет статус бронирования мест в автобусе. Вы можете увидеть весь автобус с местами, которые должны изменить цвет, а также количество свободных / занятых мест под основной картинкой. Например: сначала есть 42 свободных зеленых места, поэтому мы можем видеть текст: «42 свободных»; «0 занят». Допустим, 2 человека будут сидеть на двух местах. Основная картинка изменится: будет 40 зеленых мест и 2 красных. То же самое с текстом ниже: «40 свободных» и «2 занятых».
Мне удалось синхронизировать сигналы от модуля (линия шины CAN) к BananaPi с помощью трансивера TI SN65HVD230D. Я получил информацию от каждой секции идентификаторов сидений за один кадр (места 1-32, 33-64 и статус каждого места — свободна, занята, ошибка и недоступна). Я прикрепляю файл receive.c (http://svn.code.sf.net/p/can4linux/code/trunk/can4linux-examples/receive.c), который я использую для проверки кадров (в Терминале набирая ./receive -t3 -H).
Сначала я подумал о написании таймера, который будет собирать данные из receive.c. каждые 1 с — мне интересно, как именно мне следует объявлять данные, которые будут отображаться в Qt, в моих QTimer и QProcess. Может ли кто-нибудь предоставить пример кода, как он должен работать?
После того, как я это сделал, я подумал о том, чтобы визуализировать состояние сидений — я думаю, что я должен использовать слоты и сигналы каждого сиденья в зависимости от его состояния (для свободного места — рисунок с зеленым сиденьем, а для занятого / занятого — место с красным рисунком). Это хорошая идея?
Заранее благодарю за каждый совет.
Пример фреймов:
0.167986 938 / 0x000003aa: bD (8): 00 fc ff ff ff ff ff ff 3f — никто не сидит
0.167963 938 / 0x000003aa: bD (8): 01 fc ff ff ff ff ff ff 3f — место № 1 занято / занято
0,167972 938 / 0x000003aa: bD (8): 04 фк фф фф фф фф фф 3ф — место № 2 занято / занято
0.167973 938 / 0x000003aa: bD (8): 10 00 fc ff ff ff ff ff 3f — место № 3 занято / занято
0.167973 938 / 0x000003aa: bD (8): 40 00 fc ff ff ff ff ff 3f — место № 4 занято / занято
0.167981 938 / 0x000003aa: bD (8): 00 01 fc ff ff ff ff ff 3f — место № 5 занято / занято
0.168021 938 / 0x000003aa: bD (8): 00 04 fc ff ff ff ff ff 3f — место № 6 занято / занято
0.167986 938 / 0x000003aa: bD (8): 00 10 fc ff ff ff ff ff 3f — место № 7 занято / занято
0.167988 938 / 0x000003aa: bD (8): 00 40 fc ff ff ff ff ff 3f — место № 8 занято / занято
0.168017 938 / 0x000003aa: bD (8): 00 00 fd ff ff ff ff ff 3f — место № 9 занято / занято
0.168023 938 / 0x000003aa: bD (8): 00 00 fc ff ff ff ff ff 7f — место № 32 занято / занято
0.167001 939 / 0x000003ab: bD (8): ff ff ff ff ff ff ff ff ff — место № 53 свободно
0.167023 939 / 0x000003ab: bD (8): ff ff ff ff ff ff ff ff ff — место № 53 занято / занято
0,167992 938 / 0x000003aa: bD (8): 00 01 fc ff ff ff ff ff 7f — место № 5 & 32 заняты / заняты
0,167986 938 / 0x000003aa: bD (8): 05 00 fc ff ff ff ff ff 3f — место № 1 & 2 заняты / заняты
0,167965 938 / 0x000003aa: bD (8): 40 01 фк ф ф ф ф ф ф 3 ф — место № 4 & 5 заняты / заняты
0,167971 938 / 0x000003aa: bD (8): 50 01 fc ff ff ff ff ff 3f — места № 3, 4 и 5 заняты / заняты
Прежде всего я хотел бы видеть выходные сигналы (кадры) в Qty. Когда я нажимаю кнопку после отладки, я вижу только в выходных данных приложения:
и так далее после нажатия кнопки каждый раз.
Мой код:
mywindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QProcess>
#include <QDebug>
#include <QByteArray>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QProcess process(this);
QByteArray byteArray = process.readAllStandardOutput();
process.setProcessChannelMode(QProcess::MergedChannels);
process.start("test.sh");
process.waitForReadyRead();
qDebug() << process.readAll();
qDebug("Gotowe!");
process.waitForBytesWritten();
process.waitForFinished();
qDebug() << process.exitCode();
test.sh — это простой bash-скрипт для загрузки ./receive с помощью команд «-t3 -H)
#!/bin/bash
./receive -t3 -H
Задача ещё не решена.