Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Classes/NXPCam.cpp@0:8743b606abc3, 2020-02-11 (annotated)
- Committer:
- Wael_H
- Date:
- Tue Feb 11 15:41:45 2020 +0000
- Revision:
- 0:8743b606abc3
- Child:
- 1:a9af73d5abd4
Version direction a peu pres
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Wael_H | 0:8743b606abc3 | 1 | #include "NXPCam.h" |
| Wael_H | 0:8743b606abc3 | 2 | |
| Wael_H | 0:8743b606abc3 | 3 | extern Serial bt; |
| Wael_H | 0:8743b606abc3 | 4 | |
| Wael_H | 0:8743b606abc3 | 5 | NXPCam::NXPCam() : pixy(p28, p27) |
| Wael_H | 0:8743b606abc3 | 6 | { |
| Wael_H | 0:8743b606abc3 | 7 | |
| Wael_H | 0:8743b606abc3 | 8 | } |
| Wael_H | 0:8743b606abc3 | 9 | |
| Wael_H | 0:8743b606abc3 | 10 | /// DETECTION DEVIATION VIA CENTRE DE LA PISTE /// |
| Wael_H | 0:8743b606abc3 | 11 | int NXPCam::getDeviationTrajectoire() |
| Wael_H | 0:8743b606abc3 | 12 | { |
| Wael_H | 0:8743b606abc3 | 13 | float centrePiste; |
| Wael_H | 0:8743b606abc3 | 14 | static int x0, x1; // les 2 pts au bout des 2 vecteurs |
| Wael_H | 0:8743b606abc3 | 15 | int x; // si 1 seul vecteur détecté |
| Wael_H | 0:8743b606abc3 | 16 | int dev; |
| Wael_H | 0:8743b606abc3 | 17 | |
| Wael_H | 0:8743b606abc3 | 18 | if (pixy.pixy2_getAllFeature(PIXY2_VECTOR) & PIXY2_VECTOR == PIXY2_VECTOR && pixy.Pixy2_numVectors > 2) |
| Wael_H | 0:8743b606abc3 | 19 | bt.printf("Plus de 2 vecteurs !\n\r"); |
| Wael_H | 0:8743b606abc3 | 20 | |
| Wael_H | 0:8743b606abc3 | 21 | if (pixy.pixy2_getAllFeature(PIXY2_VECTOR) & PIXY2_VECTOR == PIXY2_VECTOR && pixy.Pixy2_numVectors >= 2) // Si la pixy a capté des vectors |
| Wael_H | 0:8743b606abc3 | 22 | { |
| Wael_H | 0:8743b606abc3 | 23 | x0 = (pixy.Pixy2_vectors[0].pixY1 < pixy.Pixy2_vectors[0].pixY0) ? pixy.Pixy2_vectors[0].pixX1 : pixy.Pixy2_vectors[0].pixX0; // Tests nécessaires pour être sûr de prendre la partie haute |
| Wael_H | 0:8743b606abc3 | 24 | x1 = (pixy.Pixy2_vectors[1].pixY1 < pixy.Pixy2_vectors[1].pixY0) ? pixy.Pixy2_vectors[1].pixX1 : pixy.Pixy2_vectors[1].pixX0; // du vecteur (possibilité de reverseVector à tester plus tard) |
| Wael_H | 0:8743b606abc3 | 25 | if(x0 > x1) |
| Wael_H | 0:8743b606abc3 | 26 | { |
| Wael_H | 0:8743b606abc3 | 27 | int savex0 = x0; |
| Wael_H | 0:8743b606abc3 | 28 | x0 = x1; |
| Wael_H | 0:8743b606abc3 | 29 | x1 = savex0; |
| Wael_H | 0:8743b606abc3 | 30 | } |
| Wael_H | 0:8743b606abc3 | 31 | |
| Wael_H | 0:8743b606abc3 | 32 | centrePiste = (x0 + x1) / 2.f; // valeur entre 15 et 55 |
| Wael_H | 0:8743b606abc3 | 33 | dev = (int)((SCREEN_CENTER - centrePiste) * (200.f / SCREEN_CENTER)); |
| Wael_H | 0:8743b606abc3 | 34 | return dev; |
| Wael_H | 0:8743b606abc3 | 35 | } |
| Wael_H | 0:8743b606abc3 | 36 | else if (pixy.pixy2_getAllFeature(PIXY2_VECTOR) & PIXY2_VECTOR == PIXY2_VECTOR && pixy.Pixy2_numVectors == 1) |
| Wael_H | 0:8743b606abc3 | 37 | { |
| Wael_H | 0:8743b606abc3 | 38 | bt.printf("1 seul vecteur !\n\r"); |
| Wael_H | 0:8743b606abc3 | 39 | this->v1 = Vector(pixy.Pixy2_vectors[0].pixX0, pixy.Pixy2_vectors[0].pixY0, pixy.Pixy2_vectors[0].pixX1, pixy.Pixy2_vectors[0].pixY1); |
| Wael_H | 0:8743b606abc3 | 40 | |
| Wael_H | 0:8743b606abc3 | 41 | return (this->v1.getCoeffDir() < 0) ? 100 : -100; |
| Wael_H | 0:8743b606abc3 | 42 | // return -1.f/this(->v1.getCoeffDir(); |
| Wael_H | 0:8743b606abc3 | 43 | |
| Wael_H | 0:8743b606abc3 | 44 | /*x = (pixy.Pixy2_vectors[0].pixY1 < pixy.Pixy2_vectors[0].pixY0) ? pixy.Pixy2_vectors[0].pixX1 : pixy.Pixy2_vectors[0].pixX0; |
| Wael_H | 0:8743b606abc3 | 45 | |
| Wael_H | 0:8743b606abc3 | 46 | return (abs(x0-x) < abs(x1-x)) ? -100 : 100;*/ |
| Wael_H | 0:8743b606abc3 | 47 | } |
| Wael_H | 0:8743b606abc3 | 48 | else |
| Wael_H | 0:8743b606abc3 | 49 | return INFO_NON_EXPLOITABLE; |
| Wael_H | 0:8743b606abc3 | 50 | } |
| Wael_H | 0:8743b606abc3 | 51 | |
| Wael_H | 0:8743b606abc3 | 52 | /// DETECTION DEVIATION VIA VALEURS DE COEFFICIENTS DIRECTEURS /// |
| Wael_H | 0:8743b606abc3 | 53 | /*int NXPCam::getDeviationTrajectoire() |
| Wael_H | 0:8743b606abc3 | 54 | { |
| Wael_H | 0:8743b606abc3 | 55 | if (pixy.pixy2_getAllFeature(PIXY2_VECTOR) & PIXY2_VECTOR == PIXY2_VECTOR && pixy.Pixy2_numVectors >= 2) // Si la pixy a capté des vectors |
| Wael_H | 0:8743b606abc3 | 56 | { |
| Wael_H | 0:8743b606abc3 | 57 | this->v1 = Vector(pixy.Pixy2_vectors[0].pixX0, pixy.Pixy2_vectors[0].pixY0, pixy.Pixy2_vectors[0].pixX1, pixy.Pixy2_vectors[0].pixY1); |
| Wael_H | 0:8743b606abc3 | 58 | this->v2 = Vector(pixy.Pixy2_vectors[1].pixX0, pixy.Pixy2_vectors[1].pixY0, pixy.Pixy2_vectors[1].pixX1, pixy.Pixy2_vectors[1].pixY1); |
| Wael_H | 0:8743b606abc3 | 59 | |
| Wael_H | 0:8743b606abc3 | 60 | if(this->v1.estADroiteDe(v2)) |
| Wael_H | 0:8743b606abc3 | 61 | { |
| Wael_H | 0:8743b606abc3 | 62 | Vector savev1 = v1; |
| Wael_H | 0:8743b606abc3 | 63 | v1 = v2; |
| Wael_H | 0:8743b606abc3 | 64 | v2 = savev1; |
| Wael_H | 0:8743b606abc3 | 65 | } |
| Wael_H | 0:8743b606abc3 | 66 | |
| Wael_H | 0:8743b606abc3 | 67 | float c1 = v1.getCoeffDir(), c2 = v2.getCoeffDir(); |
| Wael_H | 0:8743b606abc3 | 68 | |
| Wael_H | 0:8743b606abc3 | 69 | if(c1 < 0) |
| Wael_H | 0:8743b606abc3 | 70 | return 100; |
| Wael_H | 0:8743b606abc3 | 71 | if(c2 > 0) |
| Wael_H | 0:8743b606abc3 | 72 | return -100; |
| Wael_H | 0:8743b606abc3 | 73 | if(abs(c1) > 2.5) |
| Wael_H | 0:8743b606abc3 | 74 | return -100; |
| Wael_H | 0:8743b606abc3 | 75 | if(abs(c2) > 2.5) |
| Wael_H | 0:8743b606abc3 | 76 | return 100; |
| Wael_H | 0:8743b606abc3 | 77 | else return 0; |
| Wael_H | 0:8743b606abc3 | 78 | } |
| Wael_H | 0:8743b606abc3 | 79 | else |
| Wael_H | 0:8743b606abc3 | 80 | return INFO_NON_EXPLOITABLE; |
| Wael_H | 0:8743b606abc3 | 81 | }*/ |
| Wael_H | 0:8743b606abc3 | 82 | |
| Wael_H | 0:8743b606abc3 | 83 | /// DETECTION DEVIATION VIA DIFFERENCE DE COEFFICIENTS DIRECTEURS /// |
| Wael_H | 0:8743b606abc3 | 84 | /*int NXPCam::getDeviationTrajectoire() |
| Wael_H | 0:8743b606abc3 | 85 | { |
| Wael_H | 0:8743b606abc3 | 86 | if (pixy.pixy2_getAllFeature(PIXY2_VECTOR) & PIXY2_VECTOR == PIXY2_VECTOR && pixy.Pixy2_numVectors >= 2) // Si la pixy a capté des vectors |
| Wael_H | 0:8743b606abc3 | 87 | { |
| Wael_H | 0:8743b606abc3 | 88 | this->v1 = Vector(pixy.Pixy2_vectors[0].pixX0, pixy.Pixy2_vectors[0].pixY0, pixy.Pixy2_vectors[0].pixX1, pixy.Pixy2_vectors[0].pixY1); |
| Wael_H | 0:8743b606abc3 | 89 | this->v2 = Vector(pixy.Pixy2_vectors[1].pixX0, pixy.Pixy2_vectors[1].pixY0, pixy.Pixy2_vectors[1].pixX1, pixy.Pixy2_vectors[1].pixY1); |
| Wael_H | 0:8743b606abc3 | 90 | |
| Wael_H | 0:8743b606abc3 | 91 | if(this->v1.estADroiteDe(v2)) |
| Wael_H | 0:8743b606abc3 | 92 | { |
| Wael_H | 0:8743b606abc3 | 93 | Vector savev1 = v1; |
| Wael_H | 0:8743b606abc3 | 94 | v1 = v2; |
| Wael_H | 0:8743b606abc3 | 95 | v2 = savev1; |
| Wael_H | 0:8743b606abc3 | 96 | } |
| Wael_H | 0:8743b606abc3 | 97 | |
| Wael_H | 0:8743b606abc3 | 98 | return (int)((float)(abs(v2.getCoeffDir()) - abs(v1.getCoeffDir())) * 15); // entre -6 et 8 de base donc *14 pour entre -100 et 100 (à peu près) |
| Wael_H | 0:8743b606abc3 | 99 | } |
| Wael_H | 0:8743b606abc3 | 100 | else |
| Wael_H | 0:8743b606abc3 | 101 | return INFO_NON_EXPLOITABLE; |
| Wael_H | 0:8743b606abc3 | 102 | }*/ |
| Wael_H | 0:8743b606abc3 | 103 | |
| Wael_H | 0:8743b606abc3 | 104 | int NXPCam::getNormeVecteurs() |
| Wael_H | 0:8743b606abc3 | 105 | { |
| Wael_H | 0:8743b606abc3 | 106 | if(pixy.pixy2_getAllFeature(PIXY2_VECTOR) & PIXY2_VECTOR == PIXY2_VECTOR && pixy.Pixy2_numVectors == 2) |
| Wael_H | 0:8743b606abc3 | 107 | { |
| Wael_H | 0:8743b606abc3 | 108 | Vector v1 = Vector(pixy.Pixy2_vectors[0].pixX0, pixy.Pixy2_vectors[0].pixY0, pixy.Pixy2_vectors[0].pixX1, pixy.Pixy2_vectors[0].pixY1); |
| Wael_H | 0:8743b606abc3 | 109 | Vector v2 = Vector(pixy.Pixy2_vectors[1].pixX0, pixy.Pixy2_vectors[1].pixY0, pixy.Pixy2_vectors[1].pixX1, pixy.Pixy2_vectors[1].pixY1); |
| Wael_H | 0:8743b606abc3 | 110 | |
| Wael_H | 0:8743b606abc3 | 111 | return (v1.getNorme() + v2.getNorme()) / 2; |
| Wael_H | 0:8743b606abc3 | 112 | } |
| Wael_H | 0:8743b606abc3 | 113 | |
| Wael_H | 0:8743b606abc3 | 114 | return -1; |
| Wael_H | 0:8743b606abc3 | 115 | } |