Cours:PixyUartArduino : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Page créée avec « Un exemple "brut de décoffrage" de communication avec la caméra Pixy en utilisant le protocole v2 https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:porting_guide <sou... »)
 
 
(3 révisions intermédiaires par le même utilisateur non affichées)
Ligne 6 : Ligne 6 :
 
<source lang=cpp>
 
<source lang=cpp>
 
void setup() {
 
void setup() {
  // put your setup code here, to run once:
 
 
   Serial.begin(115200);
 
   Serial.begin(115200);
 
   Serial1.begin(200000);
 
   Serial1.begin(200000);
Ligne 24 : Ligne 23 :
  
 
   unsigned long  currentTime = millis();
 
   unsigned long  currentTime = millis();
   // put your main code here, to run repeatedly:
+
   // envoyer une requête de temps en temps
 
 
 
   if (currentTime>(myTime+200))
 
   if (currentTime>(myTime+200))
 
   {
 
   {
Ligne 41 : Ligne 39 :
 
     for (int i=0;i<5;i++)  Serial1.write(data[i]);
 
     for (int i=0;i<5;i++)  Serial1.write(data[i]);
 
   }
 
   }
 
+
  // lorsqu'on a une réponse de la pixy
 
   if(Serial1.available()>=6)
 
   if(Serial1.available()>=6)
 
   {
 
   {
Ligne 56 : Ligne 54 :
 
           uint16_t checksum=getSerial16();
 
           uint16_t checksum=getSerial16();
 
           Serial.println(checksum,HEX);
 
           Serial.println(checksum,HEX);
 +
          // ce serait bien de vérifier le checksum !
 
           if ((taille%14)!=0)
 
           if ((taille%14)!=0)
 
           {
 
           {
 
             Serial.println("erreur, devrait être un multiple de 14 !!");
 
             Serial.println("erreur, devrait être un multiple de 14 !!");
 +
            // on vide le buffer
 
             while(Serial1.available())Serial1.read();
 
             while(Serial1.available())Serial1.read();
 
           }
 
           }

Version actuelle datée du 25 avril 2025 à 18:01

Un exemple "brut de décoffrage" de communication avec la caméra Pixy en utilisant le protocole v2

https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:porting_guide


void setup() {
  Serial.begin(115200);
  Serial1.begin(200000);
}

unsigned long myTime=0;

uint16_t getSerial16()
{
  uint16_t data;
  data=Serial1.read();
  data=(data)|(Serial1.read()<<8);
  return data;
}

void loop() {

  unsigned long  currentTime = millis();
  // envoyer une requête de temps en temps
  if (currentTime>(myTime+200))
  {
    while(Serial1.available())Serial1.read();
    Serial.write('\n');
    Serial.print("new : ");
    myTime=currentTime;
    uint8_t data[6];
    data[0]=0xae;
    data[1]=0xc1;
    data[2]=32;
    data[3]=2;
    data[4]=255;
    data[5]=1;
    for (int i=0;i<5;i++)  Serial1.write(data[i]);
  }
  // lorsqu'on a une réponse de la pixy
  if(Serial1.available()>=6)
  {
    if (Serial1.read()==0xaf)
    {
      if (Serial1.read()==0xc1)
      {
        if (Serial1.read()==33)
        {
          uint8_t taille=Serial1.read();
          Serial.print("trame reçue, lenght/checksum : ");
          Serial.print(taille);
          Serial.write(' ');
          uint16_t checksum=getSerial16();
          Serial.println(checksum,HEX);
          // ce serait bien de vérifier le checksum !
          if ((taille%14)!=0)
          {
            Serial.println("erreur, devrait être un multiple de 14 !!");
            // on vide le buffer
            while(Serial1.available())Serial1.read();
          }
          else
          {
            uint16_t dataToRead=taille;
            do
            {
              // lire par paquet de 14 pour ne pas saturer le buffer (taille max ??)
              while(Serial1.available()>=14)
              {
                uint16_t signature=getSerial16();
                uint16_t mx=getSerial16();
                uint16_t my=getSerial16();
                uint16_t width=getSerial16();
                uint16_t height=getSerial16();
                uint16_t angle=getSerial16();
                uint8_t index=Serial1.read();
                uint8_t age=Serial1.read();
                Serial.print("bloc : ");
                Serial.print(mx);Serial.write(' ');
                Serial.print(my);Serial.write(' ');
                Serial.write('\n');
                dataToRead-=14;
              }
            }while(dataToRead!=0);
          }
        }
      }
    }
  }
}