i am new to arduino technology kindly help me out.
here is code for v2xe mode information. once i got the correct output but later again i didn't get correct value. now the output is:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
once i saw correct information.
code is:
#include <SPI.h>
#include "pins_arduino.h"
// used pins
#define SS 10 // SPI "slave select" pin. active low. (same as the analog pin 0, used in digital)
#define SYNC_PIN 7 // Sync resets the compass' communication buffers on raising front
#define kSyncChar 0xAA
#define kTerminator 0x00
char a[8];
enum{
// commands/frame types
kGetModInfo = 1, // 0x01
kModInfoResp, // 0x02
};
void setup (void)
{
Serial.begin (115200);
Serial.println ();
SPI.begin ();
pinMode(SCK, OUTPUT);
pinMode(MOSI, OUTPUT);
pinMode(SS, OUTPUT);
digitalWrite(SCK, LOW);
digitalWrite(MOSI, LOW);
digitalWrite(SS, HIGH);
pinMode(SYNC_PIN, OUTPUT);
// Put SCK, MOSI, SS pins into output mode
// also put SCK, MOSI into LOW state, and SS into HIGH state.
// Then put SPI hardware into Master mode and turn SPI on
//pinMode(MISO, INPUT);
// Slow down the master a bit
SPI.setClockDivider(SPI_CLOCK_DIV8);
//SPI.setDataMode(SPI_MODE0);
delay(10);
// sync the compass
v2xe_sync();
} // end of setup
void v2xe_sync(){
digitalWrite(SYNC_PIN, LOW);
delay(10);
digitalWrite(SYNC_PIN, HIGH);
delay(10);
//digitalWrite(SYNC_PIN, LOW);
}
byte transferAndWait (const byte what)
{
byte a = SPI.transfer (what);
delayMicroseconds (10);
Serial.println(a);
return a;
}
bool v2xe_check_module(){
bool ok = false;
// enable Slave Select
digitalWrite(SS, LOW);
delay(1);
//for (int i = 0; i< 50; i++){
//if
while(kSyncChar == transferAndWait (0)) {
//Serial.println(ok);
ok = true;
break;
}
//}
Serial.println (ok);
if (ok) {
// receive the command
if (kModInfoResp == transferAndWait (0)) {
for (int i = 0; i< 8; i++){
a[i]= transferAndWait (0);
}
}
}
// disable Slave Select
digitalWrite(SS, HIGH);
return ok;
}
void loop (void)
{
digitalWrite(SS, LOW);
delay(1);
// transmit the command
transferAndWait (kSyncChar); // all frames always start with a sync character
transferAndWait (kModInfoResp); // the frame type
transferAndWait (kTerminator); // don't forget the terminator
// enable Slave Select
digitalWrite(SS, HIGH);
delay(1);
if (v2xe_check_module()) {
Serial.print ("Module Type: ");
Serial.print (a[0]);
Serial.print (a[1]);
Serial.print (a[2]);
Serial.println (a[3]);
Serial.print ("Firmware Version: ");
Serial.print (a[4]);
Serial.print (a[5]);
Serial.print (a[6]);
Serial.println (a[7]);
}
delay(1000);
} // end of loop
Kindly check it sir. According to me its having syncronous problem. i shall be thankful to you sir if you guide me sir further. i used the voltage divider with resistor
- 10K ohm
- 15K ohm
i took voltage against 15K ohm that is 3v
Kindly let me know that what is mistake if i am doing sir .
Regards,
Usman Munawar