iring i-树莓派大神求救,源码看不懂 啊

问题描述

树莓派大神求救,源码看不懂 啊

import com.pi4j.wiringpi.Spi;

public class WiringPiSPIExample {

// SPI operations
public static byte WRITE_CMD = 0x40;
public static byte READ_CMD  = 0x41;

@SuppressWarnings("unused")
public static void main(String args[]) throws InterruptedException {

    //
    // This SPI example is using the WiringPi native library to communicate with
    // the SPI hardware interface connected to a MCP23S17 I/O Expander.
    //
    // Please note the following command are required to enable the SPI driver on
    // your Raspberry Pi:
    // >  sudo modprobe spi_bcm2708
    // >  sudo chown `id -u`.`id -g` /dev/spidev0.*
    //
    // this source code was adapted from:
    // https://github.com/thomasmacpherson/piface/blob/master/python/piface/pfio.py
    //
    // see this blog post for additional details on SPI and WiringPi
    // http://wiringpi.com/reference/spi-library/
    //
    // see the link below for the data sheet on the MCP23S17 chip:
    // http://ww1.microchip.com/downloads/en/devicedoc/21952b.pdf

    System.out.println("<--Pi4J--> SPI test program using MCP23S17 I/O Expander Chip");

    // configuration
    byte IODIRA = 0x00; // I/O direction A
    byte IODIRB = 0x01; // I/O direction B
    byte IOCON  = 0x0A; // I/O config
    byte GPIOA  = 0x12; // port A
    byte GPIOB  = 0x13; // port B
    byte GPPUA  = 0x0C; // port A pullups
    byte GPPUB  = 0x0D; // port B pullups
    byte OUTPUT_PORT = GPIOA;
    byte INPUT_PORT  = GPIOB;
    byte INPUT_PULLUPS = GPPUB;        

    // setup SPI for communication
    int fd = Spi.wiringPiSPISetup(0, 10000000);
    if (fd <= -1) {
        System.out.println(" ==>> SPI SETUP FAILED");
        return;
    }

    // initialize
    write(IOCON,  0x08);  // enable hardware addressing
    write(GPIOA,  0x00);  // set port A off
    write(IODIRA, 0);     // set port A as outputs
    write(IODIRB, 0xFF);  // set port B as inputs
    write(GPPUB,  0xFF);  // set port B pullups on

    int pins = 1;

    // infinite loop
    while(true) {

        // shift the bit to the left in the A register
        // this will cause the next LED to light up and
        // the current LED to turn off.
        if(pins >= 255)
            pins=1;
        write(GPIOA,  (byte)pins);
        pins = pins << 1;
        Thread.sleep(1000);

        // read for input changes
        //read(INPUT_PORT);
    }
}

public static void write(byte register, int data){

    // send test ASCII message
    byte packet[] = new byte[3];
    packet[0] = WRITE_CMD;  // address byte
    packet[1] = register;  // register byte
    packet[2] = (byte)data;  // data byte

    System.out.println("-----------------------------------------------");
    System.out.println("[TX] " + bytesToHex(packet));
    Spi.wiringPiSPIDataRW(0, packet, 3);
    System.out.println("[RX] " + bytesToHex(packet));
    System.out.println("-----------------------------------------------");
}

public static void read(byte register){

    // send test ASCII message
    byte packet[] = new byte[3];
    packet[0] = READ_CMD;    // address byte
    packet[1] = register;    // register byte
    packet[2] = 0b00000000;  // data byte

    System.out.println("-----------------------------------------------");
    System.out.println("[TX] " + bytesToHex(packet));
    Spi.wiringPiSPIDataRW(0, packet, 3);
    System.out.println("[RX] " + bytesToHex(packet));
    System.out.println("-----------------------------------------------");
}

public static String bytesToHex(byte[] bytes) {
    final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] hexChars = new char[bytes.length * 2];
    int v;
    for ( int j = 0; j < bytes.length; j++ ) {
        v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}

}

 代码神码意思

解决方案

目测是读写gpio端口,至于控制的硬件怎么理解,这个要看它连接了什么设备。那个设备需要什么数据。

时间: 2024-10-22 03:23:48

iring i-树莓派大神求救,源码看不懂 啊的相关文章

java源码-求大神告诉源码,真的不太会

问题描述 求大神告诉源码,真的不太会 面向对象来写,可是不太会,求大神源码???????????????????????????????????????????????????????????????????????? 解决方案 package com.njupt.www; import java.util.Date; public class Employee { private int num; private String name; private String position; pr

namespace-求大神 jaxa2怎么理解 看不懂

问题描述 求大神 jaxa2怎么理解 看不懂 Axis2开发WebService客户端 QName qname = new QName(namespace, "getPrice"); namespace命名空间,getprice怎么理解? 解决方案 getPrice是web service的服务名,相当于方法名,namespace是命名空间,用于区分不同的主机的服务,一般类似域名.

安卓应用开发-安卓小白有不懂,大神求救

问题描述 安卓小白有不懂,大神求救 我今年刚学安卓,请问老司机,关于界面中点击与反应的音效怎么添加

大神求救!!!基础学生综合信息管理系统有三个功能运行不了

问题描述 大神求救!!!基础学生综合信息管理系统有三个功能运行不了 #include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#define N 100struct stu{ char number[8]; char name[8]; char sex[2]; int ywsxyysum; float ave;};void creat(struct stu score[]);v

firefox-定位兼容问题,大神求救!

问题描述 定位兼容问题,大神求救! 火狐浏览器和360浏览器中图片的定位数值一样可是位置不同该如何解决? 浏览器按比例放大缩小绝对定位的图片位置改变,如何让它不改变 解决方案 http://www.aseoe.com/show-11-456-1.html

大神求救sql management studio数据库中导入多个xls

问题描述 大神求救sql management studio数据库中导入多个xls 数据库中有多个表,如何将一个xls文件中的多个表导入数据库中对应的表中 用的是sql management studio 解决方案 只能用程序读取一个个表,然后来导入.

java语言-用户接受一个奇数,通过如下方式图片展示的方式,在控制台打印出来,求大神讲解和源码

问题描述 用户接受一个奇数,通过如下方式图片展示的方式,在控制台打印出来,求大神讲解和源码 1数字旋转 输入奇数n旋转1-n的平方 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13

php-紧急求助,刚接触这个,可能有点弱,不好意思,PHP大神求救

问题描述 紧急求助,刚接触这个,可能有点弱,不好意思,PHP大神求救 一个字段是预期年化收益,在页面填写数字及字母的时候,后台只保存数字,需要找到在哪改, 页面为wap/tpl/wap/taskinner.html 解决方案 后台数据库中,该字段的类型设置的是什么? 解决方案二: 预期年化收益这个字段,按理应该是integer,但是你怎么会输入字母呢?如果有字母,那就应该设置成string 解决方案三: 关于类型转换,这里有详细介绍,可以参考一下:http://blog.163.com/pdfz

刚学c语言向各位大神求救

问题描述 刚学c语言向各位大神求救 这个代码的m值当输入you are yourself时应该是15 但是奇怪的变成了19望各位大大帮我看看,不胜感激 源代码: #include #include int main() { int i,n=0,m; char A[100],B[100]; gets(A); m=strlen(A); for(i=0;i<=m-1;i++) { if(A[i]=='y'&&A[i+1]=='o'&&A[i+2]=='u'&&