Cours:PixyUartArduino : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
 
Ligne 1 : Ligne 1 :
 +
=mettre à jour=
 +
*lancer pixymon
 +
*mettre la caméra sous tension en appuyant sur le bouton blanc
 +
*pixymon demande de choisir le firmware
 +
 +
=ex=
 +
 
Un exemple "brut de décoffrage" de communication avec la caméra Pixy en utilisant le protocole v2
 
Un exemple "brut de décoffrage" de communication avec la caméra Pixy en utilisant le protocole v2
  

Version actuelle datée du 17 février 2026 à 14:09

mettre à jour

  • lancer pixymon
  • mettre la caméra sous tension en appuyant sur le bouton blanc
  • pixymon demande de choisir le firmware

ex

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);
          }
        }
      }
    }
  }
}