📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の2版が非表示)
167行目: 167行目:
<br>
<br>
適切なI2Cデバイス名 (例: /dev/i2c-1) とスレーブアドレスを指定する必要があることに注意する。<br>
適切なI2Cデバイス名 (例: /dev/i2c-1) とスレーブアドレスを指定する必要があることに注意する。<br>
<br>
<u>※注意</u><br>
<u>以下の例で使用しているlinux/i2c-dev.hファイルのライセンスは、GPL 2.0以降に準拠していることに注意する。</u><br>
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
172行目: 175行目:
   
   
  #include <QObject>
  #include <QObject>
  #include <QI2CDevice>
  #include <QFile>
  #include <QFuture>
  #include <QFuture>
  #include <QtConcurrent>
  #include <QtConcurrent>
  #include <QDebug>
  #include <QDebug>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <unistd.h>
   
   
  class I2CWriter : public QObject
  class I2CWriter : public QObject
182行目: 189行目:
   
   
  private:
  private:
     QI2CDevice *m_device;
     QFile *m_device;
    bool  m_streamingActive = false;
   
   
  public:
  public:
     explicit I2CWriter(const QString &deviceName, QObject *parent = nullptr) : QObject(parent), m_device(new QI2CDevice(this))
     explicit I2CWriter(const QString &deviceName, QObject *parent = nullptr) : QObject(parent), m_device(new QFile(deviceName, this))
     {
     {
       if (!m_device->open(deviceName)) {
       if (!m_device->open(QIODevice::ReadWrite)) {
           emit errorOccurred("デバイスのオープンに失敗: " + m_device->errorString());
           emit errorOccurred("デバイスのオープンに失敗: " + m_device->errorString());
       }
       }
207行目: 215行目:
           }
           }
   
   
           m_device->setSlaveAddress(address);
           // スレーブアドレスの設定
          if (ioctl(m_device->handle(), I2C_SLAVE, address) < 0) {
            emit errorOccurred("スレーブアドレスの設定に失敗");
            return false;
          }
   
   
           if (m_device->write(data.constData(), data.size()) != data.size()) {
           if (m_device->write(data) != data.size()) {
             emit errorOccurred("データの書き込みに失敗: " + m_device->errorString());
             emit errorOccurred("データの書き込みに失敗: " + m_device->errorString());
             return false;
             return false;
           }
           }
   
   
           emit writeCompleted(true);
           emit dataWritten(data);
   
   
           return true;
           return true;
220行目: 232行目:
     }
     }
   
   
signals:
     void startStreamingWrite(int address, const QByteArray &data, int interval)
     void writeCompleted(bool success);
    void errorOccurred(const QString &error);
};
 
// エラーハンドリングと使用例
class I2CWriterManager : public QObject
{
    Q_OBJECT
private:
    I2CWriter *m_writer;
public:
    explicit I2CWriterManager(QObject *parent = nullptr) : QObject(parent)
     {
     {
       m_writer = new I2CWriter("/dev/i2c-1", this);
       m_streamingActive = true;
       connect(m_writer, &I2CWriter::errorOccurred, this, &I2CWriterManager::handleError);
       QtConcurrent::run([this, address, data, interval]() {
      connect(m_writer, &I2CWriter::writeCompleted, this, &I2CWriterManager::handleWriteCompleted);
          while (m_streamingActive) {
    }
            bool success = writeDataAsync(address, data).result();
            if (success) {
    void writeData(int address, const QByteArray &data)
                emit dataStreamWritten(data);
    {
            }
      QFuture<bool> future = m_writer->writeDataAsync(address, data);
             QThread::msleep(interval);
      future.then([this](bool success) {
          if (success) {
            qDebug() << "書き込み成功";
          }
          else {
             qDebug() << "書き込みに失敗";
           }
           }
       });
       });
     }
     }
   
   
private slots:
     void stopStreamingWrite()
     void handleError(const QString &error)
     {
     {
       qDebug() << "エラーが発生: " << error;
       m_streamingActive = false;
      // エラーに応じて適切な処理を行う
     }
     }
   
   
     void handleWriteCompleted(bool success)
signals:
     {
     void dataWritten(const QByteArray &data);
      qDebug() << "書き込み完了: " << (success ? "成功" : "失敗");
     void dataStreamWritten(const QByteArray &data);
    void errorOccurred(const QString &error);
      // 書き込み完了後の処理を行う
    }
  };
  };
  </syntaxhighlight>
  </syntaxhighlight>
274行目: 261行目:
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
#include <QCoreApplication>
  #include "I2CWriter.h"
  #include "I2CWriter.h"
   
   
280行目: 268行目:
     QCoreApplication a(argc, argv);
     QCoreApplication a(argc, argv);
   
   
     I2CWriterManager writerManager;
     I2CWriter writer("/dev/i2c-1");
   
   
     // 書き込み操作
     // 非同期処理で書き込みする場合
     QByteArray dataToWrite = QByteArray::fromHex("0102030405");
     QByteArray dataToWrite = QByteArray::fromHex("0102030405");
     writerManager.writeData(0x50, dataToWrite);
     QFuture<bool> writeFuture = writer.writeDataAsync(0x50, dataToWrite);
    writeFuture.then([](bool success) {
      qDebug() << "書き込み成功:" << success;
    });
    // ストリーミング書き込みする場合
    writer.startStreamingWrite(0x50, dataToWrite, 2000);  // 2秒間隔で書き込み
    // エラーハンドリング
    QObject::connect(&writer, &I2CWriter::errorOccurred, [](const QString &error) {
      qDebug() << "書き込みエラー: " << error;
    });
    // 10秒後にストリーミングを停止
    QTimer::singleShot(10000, &writer, &I2CWriter::stopStreamingWrite);
   
   
     return a.exec();
     return a.exec();
291行目: 293行目:
<br><br>
<br><br>


{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]