projet_europ
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| projet_europ [2024/06/13 22:02] – Mushussu | projet_europ [2024/12/14 21:34] (Version actuelle) – [Démarrage automatique] Mushussu | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== |
| [[https:// | [[https:// | ||
| - | Pour Utiliser le boîtier Enttec sous Linux, il faut autoriser l' | ||
| - | Il faut saisir dans un terminal la commande suivante : | ||
| - | sudo nano / | ||
| - | Puis, il faut écrire | + | ===== Installation du driver FTDI ===== |
| - | | + | Tous les boîtiers ENTTEC utilisent une puce FTDI pour la communications |
| + | | ||
| + | tar -xvf libftd2xx-arm-v8-1.4.27.tgz | ||
| + | sudo cp release/ | ||
| + | cd / | ||
| + | ls | ||
| + | sudo ln -s libftd2xx.so.1.4.27 libftd2xx.so | ||
| + | sudo chmod 0755 libftd2xx.so.1.4.27 | ||
| + | |||
| + | Brancher le boîtier ENTTEC | ||
| + | sudo rmmod ftdi_sio | ||
| + | sudo rmmod usbserial | ||
| + | cd | ||
| + | cd release/ | ||
| + | make | ||
| + | cd EEPROM/ | ||
| + | ls | ||
| + | sudo ./read | ||
| + | ===== Installation du addon ofxGenericDmx | ||
| + | Installation de la librairie ftdi : | ||
| + | sudo apt-get install libftdi-dev | ||
| - | Sauvegarde le tout avec le raccourci Ctrl + X ; et reboote le PC. | + | Pour certaines distributions, |
| - | Create the file /etc/udev/rules.d/10-ftdi.rules | + | wget https://github.com/woutgg/ |
| + | |||
| + | cd openFrameworks/addons/ | ||
| + | make | ||
| + | startx | ||
| - | Write on it: | + | Si vous souhaitez partir d'un projet vierge, il faudra ajouter des instructions pour le linker lors de la compilation |
| + | Dans le fichier config.make du projet : | ||
| + | sudo nano config.make | ||
| + | Vérifiez les lignes suivantes : | ||
| + | PROJECT_LDFLAGS=-Wl, | ||
| + | PROJECT_LDFLAGS+=-lftdi | ||
| - | SUBSYSTEM==" | + | ===== Code ===== |
| + | <code c> | ||
| + | // g++ -Wall -o compteur compteur.c -l wiringPi | ||
| + | // ./compteur | ||
| - | SUBSYSTEM==" | + | #include < |
| + | #include < | ||
| + | #include < | ||
| + | #define COMPTEUR 26 | ||
| + | #define TEMOIN 19 | ||
| + | int drapeau = 0; | ||
| - | https:// | + | int main() |
| + | { | ||
| + | wiringPiSetupGpio(); | ||
| + | pinMode (COMPTEUR, INPUT); | ||
| + | pullUpDnControl(COMPTEUR, | ||
| + | pinMode (TEMOIN, OUTPUT); | ||
| + | digitalWrite(TEMOIN, | ||
| + | while(1) { | ||
| + | if ((digitalRead(COMPTEUR) == LOW) && (drapeau == 0)) { | ||
| + | digitalWrite(TEMOIN, | ||
| + | delay(20); | ||
| + | drapeau = 1; | ||
| + | } | ||
| + | if (digitalRead(COMPTEUR) == HIGH) { | ||
| + | drapeau = 0; | ||
| + | } | ||
| + | } | ||
| + | return 0; | ||
| + | }</ | ||
| + | |||
| + | === ofApp.h === | ||
| + | <code cpp> | ||
| + | #pragma once | ||
| + | |||
| + | #include " | ||
| + | #include " | ||
| + | #include " | ||
| + | #include < | ||
| + | #include " | ||
| + | |||
| + | #define DMX_DATA_LENGTH 513 | ||
| + | #define TEMOIN1 19 | ||
| + | #define TEMOIN2 27 | ||
| + | #define ROUE 2.27 | ||
| + | |||
| + | class ofApp : public ofBaseApp{ | ||
| + | public: | ||
| + | void setup(); | ||
| + | void update(); | ||
| + | void draw(); | ||
| + | |||
| + | //pointer to our Enntec DMX USB Pro object | ||
| + | DmxDevice* dmxInterface_; | ||
| + | |||
| + | //our DMX packet (which holds the channel values + 1st byte for the start code) | ||
| + | unsigned char dmxData_[DMX_DATA_LENGTH]; | ||
| + | |||
| + | // Compteurs | ||
| + | Compteur compteur1; | ||
| + | Compteur compteur2; | ||
| + | |||
| + | ofTrueTypeFont myfont; | ||
| + | }; | ||
| + | |||
| + | </ | ||
| + | === ofApp.cpp === | ||
| + | <code cpp> | ||
| + | #include < | ||
| + | #include " | ||
| + | |||
| + | // | ||
| + | void ofApp:: | ||
| + | ofSetFrameRate( 44 ); | ||
| + | |||
| + | //zero our DMX value array | ||
| + | memset( dmxData_, 0, DMX_DATA_LENGTH ); | ||
| + | |||
| + | //open the device | ||
| + | dmxInterface_ = ofxGenericDmx:: | ||
| + | if ( dmxInterface_ == 0 ) printf( "No Enttec Device Found\n" | ||
| + | else printf( " | ||
| + | |||
| + | //frames = 0; | ||
| + | |||
| + | printf(" | ||
| + | |||
| + | // Initialisation valeurs | ||
| + | compteur1.set(TEMOIN1, | ||
| + | compteur2.set(TEMOIN2, | ||
| + | |||
| + | // Affichage | ||
| + | myfont.load(" | ||
| + | |||
| + | // WiringPi | ||
| + | wiringPiSetupGpio(); | ||
| + | } | ||
| + | |||
| + | // | ||
| + | void ofApp:: | ||
| + | dmxData_[401] = 80; | ||
| + | dmxData_[402] = 160; | ||
| + | dmxData_[403] = 255; | ||
| + | |||
| + | //force first byte to zero (it is not a channel but DMX type info - start code) | ||
| + | dmxData_[0] = 0; | ||
| + | |||
| + | if ( ! dmxInterface_ || ! dmxInterface_-> | ||
| + | printf( "Not updating, enttec device is not open.\n" | ||
| + | } | ||
| + | else{ | ||
| + | //send the data to the dmx interface | ||
| + | dmxInterface_-> | ||
| + | } | ||
| + | compteur1.mettreAJour(); | ||
| + | compteur2.mettreAJour(); | ||
| + | } | ||
| + | |||
| + | // | ||
| + | void ofApp:: | ||
| + | ofBackground(0x21, | ||
| + | compteur1.afficher(0, | ||
| + | compteur2.afficher(640, | ||
| + | } | ||
| + | </ | ||
| + | === Compteur.hpp === | ||
| + | <code cpp> | ||
| + | #include " | ||
| + | #include " | ||
| + | #include " | ||
| + | #include < | ||
| + | |||
| + | class Compteur | ||
| + | { | ||
| + | public: | ||
| + | // Constructeur | ||
| + | Compteur(); | ||
| + | |||
| + | void set(uint8_t _pinTemoin, float _roue, uint64_t _tempsDepart); | ||
| + | |||
| + | // | ||
| + | //void setX(int x); | ||
| + | //void setY(int y); | ||
| + | //int getX() const; | ||
| + | //int getY() const; | ||
| + | |||
| + | // Autres méthodes | ||
| + | void afficher(int x, int y, ofTrueTypeFont police); | ||
| + | void mettreAJour(); | ||
| + | |||
| + | private: | ||
| + | int x, y; | ||
| + | int pinTemoin; | ||
| + | float roue; | ||
| + | int compteur; | ||
| + | uint64_t temps, tempsDepart; | ||
| + | uint16_t distance; | ||
| + | float vitesseIntantanee; | ||
| + | float vitesseMax; | ||
| + | ofTrueTypeFont policeVitesse, | ||
| + | }; | ||
| + | </ | ||
| + | === Compteur.cpp === | ||
| + | <code cpp> | ||
| + | #include " | ||
| + | |||
| + | // | ||
| + | Compteur:: | ||
| + | { | ||
| + | compteur = 0; | ||
| + | temps = 0; | ||
| + | vitesseIntantanee = 0.0; | ||
| + | vitesseMax = 0.0; | ||
| + | policeVitesse.load(" | ||
| + | policeDistance.load(" | ||
| + | policeLabel.load(" | ||
| + | distance = 0; | ||
| + | } | ||
| + | |||
| + | // | ||
| + | void Compteur:: | ||
| + | { | ||
| + | ofPushMatrix(); | ||
| + | ofTranslate(x, | ||
| + | ofSetCircleResolution(100); | ||
| + | ofSetLineWidth(3); | ||
| + | // Dessin du compteur | ||
| + | ofPushMatrix(); | ||
| + | ofTranslate(150, | ||
| + | // Aiguille de la vitesse Max | ||
| + | ofSetColor(255, | ||
| + | ofFill(); | ||
| + | ofPushMatrix(); | ||
| + | ofRotateDeg(60 + vitesseMax * 4); | ||
| + | ofDrawTriangle(-6, | ||
| + | ofPopMatrix(); | ||
| + | // Aiguille de la vitesse | ||
| + | ofSetColor(0, | ||
| + | ofPushMatrix(); | ||
| + | ofRotateDeg(60 + vitesseIntantanee * 4); | ||
| + | ofDrawTriangle(-6, | ||
| + | ofPopMatrix(); | ||
| + | // Dessin du cadran | ||
| + | ofSetColor(255, | ||
| + | ofFill(); | ||
| + | ofDrawCircle(0, | ||
| + | ofSetColor(0, | ||
| + | ofNoFill(); | ||
| + | ofDrawCircle(0, | ||
| + | ofDrawCircle(0, | ||
| + | char nombre[3]; | ||
| + | for (int i = 0; i < 61; i += 5) { | ||
| + | ofPushMatrix(); | ||
| + | ofRotateDeg(4 * i - 120); | ||
| + | sprintf(nombre, | ||
| + | policeVitesse.drawString(nombre, | ||
| + | ofDrawLine(0, | ||
| + | ofPopMatrix(); | ||
| + | } | ||
| + | ofSetColor(0, | ||
| + | char labelCompteur[255]; | ||
| + | sprintf(labelCompteur, | ||
| + | policeLabel.drawString(labelCompteur, | ||
| + | ofPopMatrix(); | ||
| + | // Affichage de la distance | ||
| + | ofPushMatrix(); | ||
| + | ofTranslate(320, | ||
| + | ofSetColor(0, | ||
| + | ofFill(); | ||
| + | ofDrawRectangle(00, | ||
| + | ofSetColor(255, | ||
| + | char ligneDistance[255]; | ||
| + | sprintf(ligneDistance, | ||
| + | policeDistance.drawString(ligneDistance, | ||
| + | ofSetColor(0, | ||
| + | char labelDistance[255]; | ||
| + | sprintf(labelDistance, | ||
| + | policeLabel.drawString(labelDistance, | ||
| + | ofPopMatrix(); | ||
| + | ofPopMatrix(); | ||
| + | } | ||
| + | |||
| + | // | ||
| + | void Compteur:: | ||
| + | if (digitalRead(pinTemoin) == 1) { | ||
| + | digitalWrite(pinTemoin, | ||
| + | compteur++; | ||
| + | uint64_t tempsCourant = ofGetCurrentTime().getAsMilliseconds(); | ||
| + | vitesseIntantanee = (3.6 * 1000 * roue) / (tempsCourant - temps); | ||
| + | if (vitesseMax < vitesseIntantanee) { | ||
| + | vitesseMax = vitesseIntantanee; | ||
| + | } | ||
| + | temps = tempsCourant; | ||
| + | } | ||
| + | // Mise à zéro de la vitesse si la roue est arrêtée | ||
| + | if ((ofGetCurrentTime().getAsMilliseconds() - temps) > 6000) { | ||
| + | vitesseIntantanee = 0; | ||
| + | } | ||
| + | distance = (int)(roue * compteur); | ||
| + | } | ||
| + | |||
| + | // | ||
| + | void Compteur:: | ||
| + | { | ||
| + | pinTemoin = _pinTemoin; | ||
| + | roue = _roue; | ||
| + | tempsDepart = _tempsDepart; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Démarrage automatique ===== | ||
| + | sudo nano / | ||
| + | |||
| + | [Unit] | ||
| + | Description=Met en route le compteur des vélos | ||
| + | | ||
| + | [Service] | ||
| + | Type=simple | ||
| + | WorkingDirectory=/ | ||
| + | ExecStart=/ | ||
| + | Restart=on-failure | ||
| + | RestartSec=1 | ||
| + | User=pi | ||
| + | Group=pi | ||
| + | | ||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | |||
| + | sudo systemctl enable compteur.service | ||
| + | |||
| + | sudo systemctl status compteur.service | ||
| + | Construction d'un autre service pour la course : | ||
| + | |||
| + | sudo nano / | ||
| + | Ajouter avant la ligne exit 0 | ||
| + | startx ./ | ||
| + | Il faut aussi désactiver les sorties audio par l' | ||
| + | sudo nano / | ||
| + | dtoverlay=vc4-kms-v3d, | ||
| + | |||
| + | {{tag> | ||
projet_europ.1718316179.txt.gz · Dernière modification : de Mushussu
