Library for 3.2'' uLcd Picaso Display4D system Picaso Serial Environment Command Set web: http://www.4dsystems.com.au/product/20/67/Processors_Graphics/PICASO/

Committer:
adelino
Date:
Sun Apr 05 13:54:48 2015 +0000
Revision:
1:a74e42cf52b2
PicasoLib version 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adelino 1:a74e42cf52b2 1 #include "Nunchuk.h"
adelino 1:a74e42cf52b2 2
adelino 1:a74e42cf52b2 3 Nunchuk::Nunchuk(PinName sda,PinName scl,float mTe):myI2C(sda,scl)
adelino 1:a74e42cf52b2 4 {
adelino 1:a74e42cf52b2 5 periodeTe=mTe;
adelino 1:a74e42cf52b2 6 myI2C.frequency(100000);
adelino 1:a74e42cf52b2 7
adelino 1:a74e42cf52b2 8 this->joyX=0x00;
adelino 1:a74e42cf52b2 9 this->joyY=0x00;
adelino 1:a74e42cf52b2 10 this->accX=0;
adelino 1:a74e42cf52b2 11 this->accY=0;
adelino 1:a74e42cf52b2 12 this->accZ=0;
adelino 1:a74e42cf52b2 13 this->btnC=false;
adelino 1:a74e42cf52b2 14 this->btnZ=false;
adelino 1:a74e42cf52b2 15
adelino 1:a74e42cf52b2 16 setup();
adelino 1:a74e42cf52b2 17
adelino 1:a74e42cf52b2 18 if(periodeTe>0)
adelino 1:a74e42cf52b2 19 myTicker.attach(this,&Nunchuk::process,periodeTe);
adelino 1:a74e42cf52b2 20 }
adelino 1:a74e42cf52b2 21 //-----------------------
adelino 1:a74e42cf52b2 22 Nunchuk::~Nunchuk(void)
adelino 1:a74e42cf52b2 23 {
adelino 1:a74e42cf52b2 24 if(periodeTe>0)
adelino 1:a74e42cf52b2 25 myTicker.detach();
adelino 1:a74e42cf52b2 26 }
adelino 1:a74e42cf52b2 27 //-----------------------
adelino 1:a74e42cf52b2 28 void Nunchuk::process(void)
adelino 1:a74e42cf52b2 29 {
adelino 1:a74e42cf52b2 30 bool res=false;
adelino 1:a74e42cf52b2 31 static char datas[6];
adelino 1:a74e42cf52b2 32
adelino 1:a74e42cf52b2 33 int i=0;
adelino 1:a74e42cf52b2 34
adelino 1:a74e42cf52b2 35 res=request(); //demande une mesure
adelino 1:a74e42cf52b2 36 if(res==false) {
adelino 1:a74e42cf52b2 37 return ; //pb
adelino 1:a74e42cf52b2 38 }
adelino 1:a74e42cf52b2 39
adelino 1:a74e42cf52b2 40 if(myI2C.read(ADRESSE,datas,6)==0) {
adelino 1:a74e42cf52b2 41 res=true;
adelino 1:a74e42cf52b2 42
adelino 1:a74e42cf52b2 43 for(i=0; i<6; i++) {
adelino 1:a74e42cf52b2 44 datas[i]=decode(datas[i]);
adelino 1:a74e42cf52b2 45 }
adelino 1:a74e42cf52b2 46
adelino 1:a74e42cf52b2 47 //
adelino 1:a74e42cf52b2 48 if(datas[0] < 100)
adelino 1:a74e42cf52b2 49 joyX=-1;
adelino 1:a74e42cf52b2 50 else if(datas[0] >200)
adelino 1:a74e42cf52b2 51 joyX=1;
adelino 1:a74e42cf52b2 52 else
adelino 1:a74e42cf52b2 53 joyX=0;
adelino 1:a74e42cf52b2 54 //
adelino 1:a74e42cf52b2 55 if(datas[1] <100)
adelino 1:a74e42cf52b2 56 joyY=-1;
adelino 1:a74e42cf52b2 57 else if(datas[1] >140)
adelino 1:a74e42cf52b2 58 joyY=1;
adelino 1:a74e42cf52b2 59 else
adelino 1:a74e42cf52b2 60 joyY=0;
adelino 1:a74e42cf52b2 61 //
adelino 1:a74e42cf52b2 62 accX=datas[2]<<2;
adelino 1:a74e42cf52b2 63 accY=datas[3]<<2;
adelino 1:a74e42cf52b2 64 accZ=datas[4]<<2;
adelino 1:a74e42cf52b2 65
adelino 1:a74e42cf52b2 66 //btnZ
adelino 1:a74e42cf52b2 67 if(datas[5] & 0x01)
adelino 1:a74e42cf52b2 68 btnZ=false;
adelino 1:a74e42cf52b2 69 else
adelino 1:a74e42cf52b2 70 btnZ=true;
adelino 1:a74e42cf52b2 71
adelino 1:a74e42cf52b2 72
adelino 1:a74e42cf52b2 73 //btnC
adelino 1:a74e42cf52b2 74 if(datas[5]& 0x02)
adelino 1:a74e42cf52b2 75 btnC=false;
adelino 1:a74e42cf52b2 76 else
adelino 1:a74e42cf52b2 77 btnC=true;
adelino 1:a74e42cf52b2 78
adelino 1:a74e42cf52b2 79 accX+=(datas[5]>>2) & 0x0003;
adelino 1:a74e42cf52b2 80 accY+=(datas[5]>>4) & 0x0003;
adelino 1:a74e42cf52b2 81 accZ+=(datas[5]>>6) & 0x0003;
adelino 1:a74e42cf52b2 82
adelino 1:a74e42cf52b2 83
adelino 1:a74e42cf52b2 84 } else {
adelino 1:a74e42cf52b2 85 res=false;
adelino 1:a74e42cf52b2 86 joyX=0;
adelino 1:a74e42cf52b2 87 joyY=0;
adelino 1:a74e42cf52b2 88
adelino 1:a74e42cf52b2 89 accX=0;
adelino 1:a74e42cf52b2 90 accY=0;
adelino 1:a74e42cf52b2 91 accZ=0;
adelino 1:a74e42cf52b2 92 btnZ=false;
adelino 1:a74e42cf52b2 93 btnC=false;
adelino 1:a74e42cf52b2 94 }
adelino 1:a74e42cf52b2 95
adelino 1:a74e42cf52b2 96 }
adelino 1:a74e42cf52b2 97 //-----------------------
adelino 1:a74e42cf52b2 98 bool Nunchuk::setup(void)
adelino 1:a74e42cf52b2 99 {
adelino 1:a74e42cf52b2 100 char cmd[2];
adelino 1:a74e42cf52b2 101 bool res=false;
adelino 1:a74e42cf52b2 102
adelino 1:a74e42cf52b2 103 cmd[0]=0x40;
adelino 1:a74e42cf52b2 104 cmd[1]=0x00;
adelino 1:a74e42cf52b2 105
adelino 1:a74e42cf52b2 106 if(myI2C.write(ADRESSE,cmd,2)==0) {
adelino 1:a74e42cf52b2 107 res=true;
adelino 1:a74e42cf52b2 108 } else {
adelino 1:a74e42cf52b2 109 res=false;
adelino 1:a74e42cf52b2 110 }
adelino 1:a74e42cf52b2 111 return res;
adelino 1:a74e42cf52b2 112 }
adelino 1:a74e42cf52b2 113 //----------------------------
adelino 1:a74e42cf52b2 114 bool Nunchuk::request(void)
adelino 1:a74e42cf52b2 115 {
adelino 1:a74e42cf52b2 116 bool res=false;
adelino 1:a74e42cf52b2 117 char cmd[1]= {0x00};
adelino 1:a74e42cf52b2 118
adelino 1:a74e42cf52b2 119 if(myI2C.write(ADRESSE,cmd,1)==0) {
adelino 1:a74e42cf52b2 120 res=true;
adelino 1:a74e42cf52b2 121 wait(0.001);
adelino 1:a74e42cf52b2 122
adelino 1:a74e42cf52b2 123 } else {
adelino 1:a74e42cf52b2 124 res=false;
adelino 1:a74e42cf52b2 125 }
adelino 1:a74e42cf52b2 126
adelino 1:a74e42cf52b2 127 return res;
adelino 1:a74e42cf52b2 128 }
adelino 1:a74e42cf52b2 129 //-----------------------------
adelino 1:a74e42cf52b2 130 float Nunchuk::getPeriodeTe(void)
adelino 1:a74e42cf52b2 131 {
adelino 1:a74e42cf52b2 132 return periodeTe;
adelino 1:a74e42cf52b2 133 }
adelino 1:a74e42cf52b2 134 //-----------------------------
adelino 1:a74e42cf52b2 135 char Nunchuk::decode(char data)
adelino 1:a74e42cf52b2 136 {
adelino 1:a74e42cf52b2 137 return (data^0x17)+0x17;
adelino 1:a74e42cf52b2 138 }
adelino 1:a74e42cf52b2 139 //------------------------------
adelino 1:a74e42cf52b2 140 signed char Nunchuk::getJoyX(void)
adelino 1:a74e42cf52b2 141 {
adelino 1:a74e42cf52b2 142 return joyX;
adelino 1:a74e42cf52b2 143 }
adelino 1:a74e42cf52b2 144 //-------------------------------
adelino 1:a74e42cf52b2 145 signed char Nunchuk::getJoyY(void)
adelino 1:a74e42cf52b2 146 {
adelino 1:a74e42cf52b2 147 return joyY;
adelino 1:a74e42cf52b2 148 }
adelino 1:a74e42cf52b2 149 //--------------------------------
adelino 1:a74e42cf52b2 150 int Nunchuk::getAccX(void)
adelino 1:a74e42cf52b2 151 {
adelino 1:a74e42cf52b2 152 return accX;
adelino 1:a74e42cf52b2 153 }
adelino 1:a74e42cf52b2 154 //------------------------------
adelino 1:a74e42cf52b2 155 int Nunchuk::getAccY(void)
adelino 1:a74e42cf52b2 156 {
adelino 1:a74e42cf52b2 157 return accY;
adelino 1:a74e42cf52b2 158 }
adelino 1:a74e42cf52b2 159 //----------------------------
adelino 1:a74e42cf52b2 160 int Nunchuk::getAccZ(void)
adelino 1:a74e42cf52b2 161 {
adelino 1:a74e42cf52b2 162 return accZ;
adelino 1:a74e42cf52b2 163 }
adelino 1:a74e42cf52b2 164 //-----------------------------
adelino 1:a74e42cf52b2 165 bool Nunchuk::getBtnC(void)
adelino 1:a74e42cf52b2 166 {
adelino 1:a74e42cf52b2 167 return btnC;
adelino 1:a74e42cf52b2 168 }
adelino 1:a74e42cf52b2 169 //-------------------------------
adelino 1:a74e42cf52b2 170 bool Nunchuk::getBtnZ(void)
adelino 1:a74e42cf52b2 171 {
adelino 1:a74e42cf52b2 172 return btnZ;
adelino 1:a74e42cf52b2 173 }