LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Synchronize Read/Write to USB

What is the device sending the data?  I'd like to take a look at its manual (presumed available on the Web) to better understand its data structure.

 

Bob Schor

0 Kudos
Message 11 of 12
(315 Views)

I have a gyroscope sending data to a ATmega2560 arduino, the Arduino sends the data to the PC.

Below is the Arduino code:

 

#include "TimerOne.h"
enum Gyro_Status {
  WARNING,
  NO_DATA,
  CAUTION,
  NORMAL,
  CHECKSUM_FAIL
};

struct PacketType {
  byte Status;
  byte TagID;
  byte angleLSB;
  byte angleMSB;
  byte TagData;
  byte CheckSum;
  byte index;
  boolean complete;
  boolean processed;
};

PacketType GyroPacket = {0, 0, 0, 0, 0, 0, 0, false, true};
unsigned short combined; 
boolean Trigger=false;
boolean LoopTrigger=false;
unsigned long StartTime;
unsigned long LoopTime;

void setup() {
  pinMode(42, OUTPUT);
  pinMode(34, OUTPUT);
  pinMode(38, OUTPUT);
  pinMode(32, INPUT);
  // put your setup code here, to run once:
Serial.begin(57600);
Serial1.begin(1000000);
digitalWrite(38,HIGH);
digitalWrite(34,HIGH);
Timer1.initialize(2000);
Timer1.attachInterrupt(Blink);
StartTime = millis()-1;
}

void loop() {
  while (Serial.available()){
   byte val= Serial.read();
   if (val == 'A'){
    Serial.println("Hello!");
    StartTime = millis();
    LoopTrigger=true;
   }   
   if (val == 'Z'){
    Serial.println("Hi!");
    LoopTrigger=false; 
   }
  }
  if(Trigger && LoopTrigger){
  //Serial.println("Hello world!");
  digitalWrite(38,HIGH);
  LoopTime=millis()-StartTime;
  digitalWrite(42,HIGH);
  while(Serial1.available() && !GyroPacket.complete && GyroPacket.processed){
//      Serial.println("Reading!");
      byte Sum = 0;
      byte RECvalue = Serial1.read();
      byte statusCheck;
      PacketWrite(GyroPacket, GyroPacket.index, RECvalue);
      GyroPacket.index++;
//      Serial.print("I received: ");
//      Serial.println(GyroPacket.index);
//      Serial.println(RECvalue);
      if(GyroPacket.index == 6){
        GyroPacket.complete = true;
        GyroPacket.processed = false;
        GyroPacket.index = 0;
        statusCheck = (GyroPacket.Status & 0xC0) >> 6;
        Sum = GyroPacket.Status + GyroPacket.TagID + GyroPacket.angleLSB + GyroPacket.angleMSB + GyroPacket.TagData + GyroPacket.CheckSum;
//        Serial.print("Sum = ");
//        Serial.println(Sum);
        if (Sum != 0xFF){
         // Serial.println("CHECKSUM_FAIL!");
        //  Serial.println("C_F");
        }else{
          //Serial.println("CHECKSUM_CORRECT!");
         //Serial.println("C_C");
           if (statusCheck != NORMAL){
      switch (statusCheck) {
        case WARNING:
          Serial.println("WARNING");
          break;
        case NO_DATA:
          Serial.println("NO_DATA");
          break;
        case CAUTION:
          Serial.println("CAUTION");
          break;
        default:
          //error
          Serial.println("Status Read Error");
      }
    } else {
     // Serial.println("NORMAL");   
      if(digitalRead(32)== HIGH){
   // Serial.println("OK");
    combined = GyroPacket.angleMSB; //send MSB to rightmost 8 bits 
    combined = combined<<8; //shift MSB over to leftmost 8 bits 
    combined |= GyroPacket.angleLSB; //logical OR keeps MSB intact in combined and fills in rightmost 8 bits 
    Serial.print("*");
    Serial.print(LoopTime);  
    Serial.print("$"); 
    Serial.print(combined,DEC);
    Serial.print("#"); 
     }
     else{
    Serial.print("Gyro NOT OK!");
   }
          }
      }
   }
   }
  digitalWrite(42,LOW);
  GyroPacket.complete = false;
  GyroPacket.processed = true;
 digitalWrite(38,LOW);
 Trigger=false;
  }
 }
void Blink()
{
Trigger=true;
}

void PacketWrite(PacketType &dataPacket, byte index, byte value){
  switch(index){
    case 0:
      dataPacket.Status = value;
      break;
    case 1:
      dataPacket.TagID = value;
      break;
    case 2:
      dataPacket.angleLSB = value;
      break;
    case 3: 
      dataPacket.angleMSB = value;
      break;
    case 4:
      dataPacket.TagData = value;
      break;
    case 5: 
      dataPacket.CheckSum = value;
      break;
    default:
      dataPacket.index = 0;
  }
}

The output data from LabVIEW looks like this:

 

*11$64600#
*13$64600#
*16$64600#
*18$64598#
*19$64597#
*21$64598#
*23$64600#
*25$64599#
0 Kudos
Message 12 of 12
(306 Views)