嵌入式应用开发之基础设备控制

这里写图片描述

上位机(Qt开发)
weiget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>
namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

public slots:
    void LED_function(int);
    void slide_function(int);

private:
    Ui::Widget *ui;
     QUdpSocket* udpSocket;

};

#endif // WIDGET_H

weget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QCheckBox>
#include <QUdpSocket>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->udpSocket=new QUdpSocket;

    ui->PORT->setText("9413");//设定默认端口号
    ui->SLIDE->setRange(0,1500);

                      //对象间传参     //发送参数                   //接收参数
    connect(ui->LED1,SIGNAL(stateChanged(int)),this,SLOT(LED_function(int)));
    connect(ui->LED2,SIGNAL(stateChanged(int)),this,SLOT(LED_function(int)));
    connect(ui->LED3,SIGNAL(stateChanged(int)),this,SLOT(LED_function(int)));
    connect(ui->LED4,SIGNAL(stateChanged(int)),this,SLOT(LED_function(int)));

    connect(ui->SLIDE,SIGNAL(valueChanged(int)),this,SLOT(slide_function(int)));


}

Widget::~Widget()
{
    delete ui;
}

void Widget::LED_function(int state)//信号传状态信息
{
    QString ip=ui->IP->text();
    QString port=ui->PORT->text();

    char buf[100];
    QCheckBox* b=(QCheckBox*)sender();//区分发送对象,用sender函数
    if(b==ui->LED1)
    {               //设备//亮灭//第几个灯
        sprintf(buf,"LED#%d#0",(state==Qt::Checked)? 1:0);
        udpSocket->writeDatagram (buf,strlen(buf),QHostAddress(ip),port.toInt());
    }                                           //利用构造函数进行类型转换//利用函数类型转换
    if(b==ui->LED2)
    {
        sprintf(buf,"LED#%d#1",(state==Qt::Checked)? 1:0);
        udpSocket->writeDatagram (buf,strlen(buf),QHostAddress(ip),port.toInt());
    }
    if(b==ui->LED3)
    {
         sprintf(buf,"LED#%d#2",(state==Qt::Checked)? 1:0);
        udpSocket->writeDatagram (buf,strlen(buf),QHostAddress(ip),port.toInt());
    }
    if(b==ui->LED4)
    {
         sprintf(buf,"LED#%d#3",(state==Qt::Checked)? 1:0);
        udpSocket->writeDatagram (buf,strlen(buf),QHostAddress(ip),port.toInt());
    }
}
void Widget::slide_function(int value)
{
    QString ip=ui->IP->text();
    QString port=ui->PORT->text();
    char buf[100];


    sprintf(buf,"BUZZER#%d#%d",(value > 0)?1:0,value);
    udpSocket->writeDatagram(buf,strlen(buf), QHostAddress(ip),port.toInt());

}

下位机(linux C开发,arm-linux-gcc编译)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>         
#include <sys/socket.h>
#include <unistd.h>

int main()
{
    int fd_leds=open("/dev/leds",0);
    int fd_buzzer=open("/dev/pwm",0);

    int sock_connect=socket(AF_INET,SOCK_DGRAM,0);

    struct sockaddr_in myaddr,youraddr;
    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=INADDR_ANY;
    myaddr.sin_port=htons(8888);

    if(-1==bind(sock_connect,(struct sockaddr*)&myaddr,sizeof(myaddr)))
    {
        perror("bind");
        return -1;
    }


    char msg[1025];
    int ret;
    //name#instruct#arg
    char* dev_name=NULL,*cmd=NULL,*arg=NULL;//!!!

    while(1)
    {
        ret=recv(sock_connect,msg,sizeof(msg),0);
        msg[ret]='\0';

        dev_name=strtok(msg,"#");
        cmd=strtok(msg,"#");
        arg=strtok(msg,"#");

        if(strcmp(dev_name,"LED")==0)
        {
            ioctl(fd_leds,atoi(cmd),atoi(arg));
        }
        else if(strcmp(dev_name,"BUZZER")==0)
        {
            ioctl(fd_buzzer,atoi(cmd),atoi(arg));
        }
    }


    close(sock_connect);

    close(fd_leds);
    close(fd_buzzer);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
imx6ul应用开发资料。卷序列号为 A899-5E01 H:. │ FCU1101嵌入式控制单元支持功能项列表-2018.10.18.xlsx │ 文件夹目录.txt │ 文件夹目录名批列出.bat │ ├─Linux │ ├─应用 │ │ │ 系统常用命令.pdf │ │ │ │ │ ├─485 │ │ │ 485-test │ │ │ 485-test.c │ │ │ │ │ ├─lora-EC32-TTL-100 │ │ │ │ E32_Demo.zip │ │ │ │ E32_Usermanual_CN_1.40.pdf │ │ │ │ lora.pdf │ │ │ │ RF_Setting.Form1.resources │ │ │ │ RF_Setting.Properties.Resources.resources │ │ │ │ RF_Setting3.47.exe │ │ │ │ RF_Setting3.47.zip │ │ │ │ SX1278无线模块LoRa扩频技术文档(433M亿佰特E32-TTL-100) (1).pdf │ │ │ │ │ │ │ └─Sscom32 │ │ │ sscom.ini │ │ │ sscom32.exe │ │ │ 注意事项.txt │ │ │ │ │ ├─modbus │ │ │ │ libmodbus-3.1.2.tar.gz │ │ │ │ ul-modbus测试.txt │ │ │ │ │ │ │ ├─库文件 │ │ │ │ m3.tar.bz2 │ │ │ │ │ │ │ └─测试程序 │ │ │ unit-test-client │ │ │ unit-test-server │ │ │ │ │ ├─mosquitto │ │ │ │ mosquitto-1.5.tar.gz │ │ │ │ mqtt协议移植总结.pdf │ │ │ │ openssl-1.0.2h.tar.gz │ │ │ │ │ │ │ └─移植到开发板上 │ │ │ install_mosquitto.tar.bz2 │ │ │ install_openssl.tar.bz2 │ │ │ │ │ ├─socket │ │ │ │ build.sh │ │ │ │ eth0_server.c │ │ │ │ eth1_server.c │ │ │ │ Makefile │ │ │ │ Makefile.arm │ │ │ │ socket_client.c │ │ │ │ socket测试.pdf │ │ │ │ │ │ │ ├─bin │ │ │ │ └─arm │ │ │ │ client │ │ │ │ client.sh │ │ │ │ server.sh │ │ │ │ server1 │ │ │ │ server2 │ │ │ │ │ │ │ └─源码 │ │ │ build.sh │ │ │ eth0_server.c │ │ │ eth1_server.c │ │ │ Makefile │ │ │ Makefile.arm │ │ │ socket_client.c │ │ │ │ │ ├─tcpdump │ │ │ │ libpcap-1.8.1.tar.gz │ │ │ │ tcpdump-4.9.2.tar.gz │ │ │ │ │ │ │ └─移植到开发板 │ │ │ tcpdump.tar.bz2 │ │ │ │ │ ├─TFTP与NFS服务器搭建 │ │ │ TFTP与NFS服务器搭
以太网MSP430开发板硬件特点: 1.使用 MSP430F149主MCU, 2K RAM, 60kflash, 48个I/O pin, 双uart 口, 8路12位A/D转换 2.TCP/IP接口采用 工业级CS8900芯片 全面支持uIP协议栈 3.带有USB通信接口,适合使用笔记本的同学进行调试。 4.主电路板带: uart 口DB9输出座; I2C EEPROM存储器AT24C256一块 也可以选择 搭配擦除寿命1亿次的同接口铁电存储器; 3.3V稳压集成电路采用高稳定度AS1117-3.3 数据口P4和所有多余I/O口引出,便于扩展 配有高频(HF)和低频(LF)两种晶振,可方便选择 各单元电路间有良好去耦合措施,采用大面积接地技术,电磁兼容性能良好 5.具有板载硬件实时钟PCF8563,并搭配电池,满足特定应用需要。 如截图所示: CS8900A的说明: CS8900、CS8900A芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。它的封装是100-pin TQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口,一般在单片机中,使用了CS8900的8位接口模式。可选择1:1.414YL18-1064S或1:2.5 YL18-1080S 变压比例的变压器。 CS8900A网卡工作原理: CS8900A与ARM芯片按照16位方式连接,网卡芯片复位后默认工作方式为I/O连接,基址是300H。 最主要的工作寄存器(为16位),CS8900支持8位模式,当读或写16位数据时,低位字节对应偶地址,高位字节对应奇地址。例如,向TXCMD中写入00C0H,则可将00h写入305H,将C0H写入304H。 附件内容截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值