2014年3月5日水曜日

Raspberry Pi Universal Module (Manual Mode with wiringPi)

Raspberry Pi Universal Module (Manual Mode with wiringPi)


//compile
// $g++ -Wall -o main main.c MCUGearM.cpp MCUGearBaseM.cpp -lwiringPi
// $sudo ./main

#include "commonM.h"
#include "MCUGearM.h"
#include "MCUGearBaseM.h"
#include 
#include 
#include 
#include 

void setIOUni(MCUGear *mcugear);

int main(void){
 
 //define IOs
 int inpin[2] = {0,1}; //output pins
 int outpin[6] = {2,3,4,5,6,7}; //output pins
 
 
 if(wiringPiSetup() == -1)
  return 1;

 int spiSpeed = 1000000; //1MHz
 int spiChan = 0; //CE0
 
 if(wiringPiSPISetup(spiChan, spiSpeed)== -1) //set CE0 and 1MHz
  return 1;
  

 //set IO direction
 pinMode(inpin[0], INPUT);
 pinMode(inpin[1], INPUT);
 
 pinMode(outpin[0], OUTPUT);
 pinMode(outpin[1], OUTPUT);
 pinMode(outpin[2], OUTPUT);
 pinMode(outpin[3], OUTPUT);
 pinMode(outpin[4], OUTPUT);
 pinMode(outpin[5], OUTPUT);
 
 
 initBase(); //initialize Baseboard   
   
 //set Address and number of pins that you want to use on this module
 MCUGear UniM = MCUGear(N_VDD_VDD_VDD); 
 MCUGear AD2M = MCUGear(N_SCL_SCL_VSS); 
 
    int sw1 = 0;
    int sw2 = 0;

    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    int location = UniM.detectModule();    //save location data in MCUGear class and you can check return data.Baseboard has 0-47 pin.
    printf("UniM location = %d\n", location);
    

   //Save wiring data on Bank0 --------------------------
    startReg(0);
    setIOUni(&UniM);//make schematic Bank0
    endReg(0);

//---------------------------------------------------------------------
//If you want to make other Bank(schematic 0 to 7) write like that.
//    startReg(1);
//    setIOBank1(&UniM);//make schematic Bank1
//    endReg(1);
//
//delete function is 
//void deleteBank(unsigned char bank);
//---------------------------------------------------------------------

    changeBank(0);//select Bank(schematic 0 to 7)
    
    UniM.connectModule();   //connect---(open module gate)
  
  
 while(1){
  
  //UniM.connectModule();   //connect---(open module gate)
  
  sw1 = digitalRead(inpin[0]);
  sw2 = digitalRead(inpin[1]);
  printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);
  
  digitalWrite(outpin[0],0);
  digitalWrite(outpin[1],1);
  digitalWrite(outpin[2],1);
  delay(300); //set your favorite time
  
  digitalWrite(outpin[0],1);
  digitalWrite(outpin[1],0);
  digitalWrite(outpin[2],1);
  delay(300); //set your favorite time
  
  digitalWrite(outpin[0],1);
  digitalWrite(outpin[1],1);
  digitalWrite(outpin[2],0);
  delay(300); //set your favorite time
  
  //UniM.disconnectModule();   //disconnect---(close module gate)
  //changeBank(nowBank);  //you can change the Bank after close all module gate. It is safe.
        
 }
 
 return 0;
}


void setIOUni(MCUGear *mcugear){
    mcugear->setWire(IO_0, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_1, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_2, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_3, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_4, IO_REG_OUT_DIR, 4);
}

0 件のコメント:

コメントを投稿