为什么当我将值(linux中的文件属于gpio引脚)从1更改为0时,没有任何改变?

时间:2017-10-25 06:34:22

标签: c++ qt gpio

我有一个matrix relay的纳米火(像rasperry pi)。我将此继电器连接到我的设备并想要更改gpio值。(我的设备有多个gpio引脚。首先我应该创建gpio(echo 95> / sys / class / gpio / export)然后更改方向文件夹" out"(echo" out"> / sys / class / gpio / gpio95 / direction)并且通过更改值,继电器应该打开和关闭。) 这是我的代码:

bool GPIOClass::ChangeValue(QString IO, QString port)
{
    QString gpio;
    QString comand;
//    comand=" echo ";
//    comand.append(QIO);
//    comand.append(" > ");
//    gpio=config->GpioFromPort(port);

//    if(gpio.length()==0)
//        return false;
//    //IO should be 1 or 0

    QString src=IdenGPIOSrc(gpio);//src is /sys/class/gpio/gpio95
    src.append("/value");

//    comand.append(src);
//    qDebug()<<port<<gpio<<"with src:"
//           <<src <<"with command:"<<comand;
//    system(comand.toStdString().c_str());

    ///===========================================================
    QFile file(src);
    if ( file.open(QIODevice::WriteOnly) )
    {
        //clear the content
//        file.resize(0);
        file.seek(0);
        file.write(QByteArray::number(IO.toInt()),1);

    }

    if(GetValue(port)==IO.toInt())
    {
        return true;
    }
    else
        return false;
}  

中继未更改,但是当我运行可执行文件sample时,中继是turn on and off

int main(int argc, char ** argv) 
{
    int pin = GPIO_PIN(7); 
    int i, value, board;
    int ret = -1;

    if ((board = boardInit()) < 0) {
        printf("Fail to init board\n");
        return -1;
    }
    if (board == BOARD_NANOPI_T2)
        pin = GPIO_PIN(15);

    if (argc == 2)
        pin = GPIO_PIN(atoi(argv[1]));
    if ((ret = exportGPIOPin(pin)) == -1) {   
        printf("exportGPIOPin(%d) failed\n", pin);
    }
    if ((ret = setGPIODirection(pin, GPIO_OUT)) == -1) {
        printf("setGPIODirection(%d) failed\n", pin);
    }
    for (i = 0; i < STATUS_CHANGE_TIMES; i++) {
        if (i % 2) {
            value = GPIO_HIGH;
        } else {
            value = GPIO_LOW;
        }
        if ((ret = setGPIOValue(pin, value)) > 0) {
            printf("%d: GPIO_PIN(%d) value is %d\n", i+1, pin, value);
        } else {
            printf("setGPIOValue(%d) failed\n", pin);
        }
        sleep(1);
    }
    unexportGPIOPin(pin);
    return 0;
}

在该代码中,该地址中的值也像我的代码一样改变了(将值文件更改为1和0)并且继电器正在工作。我的代码和代码之间的差异在哪里?它们都改变了价值内容。 我的代码问题在哪里?

0 个答案:

没有答案