Même principe que précédemment : on écrit "in" dans le fichier direction et on lit le fichier value.
DigitalInput.h :
/*
* DigitalOutput.h
*
* Created on: 6 juin 2011
* Author: Eliott
*/
#ifndef DIGITALOUTPUT_H_
#define DIGITALOUTPUT_H_
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
class DigitalOutput {
public:
DigitalOutput(int pin);
void write(unsigned int value);
void toggle();
private:
int pin;
int etat;
string racine;
};
#endif /* DIGITALOUTPUT_H_ */
DigitalInput.cpp :
#include "DigitalInput.h"
DigitalInput::DigitalInput(int pin) {
FILE *file=NULL;
this->pin = pin;
file = fopen("/sys/class/gpio/export","a");
if (file==NULL){
cout << "Erreur ouverture fichier : /sys/class/gpio/export"<<endl;
return;
}
fprintf(file,"%d",this->pin); // on exporte la pin
fclose(file);
// nom de la racine du nouveau fichier
ostringstream ss;
ss << this->pin;
this->racine = "/sys/class/gpio/gpio" + ss.str() ;
this->racine += "/";
// direction du port
file = fopen((this->racine + "direction").c_str(),"w+");
if (file==NULL){
cout << "Erreur ouverture fichier : "<<this->racine + "direction"<<endl;
return;
}
fprintf(file,"in");
fclose(file);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unsigned int DigitalInput::read(){
FILE *file=NULL;
file = fopen((this->racine+"value").c_str(),"r");
if(file==NULL){
cout<<"Erreur ouverture fichier : "<<this->racine + "value"<<endl;
return 0;
}
fscanf(file,"%d",&this->etat);
fclose(file);
return this->etat;
}
Exemple : !bouton sur PB18 et bouton sur PB19main.cpp :
#include "DigitalInput.h"
#include "DigitalOutput.h"
#include "Foxboard.h"
int main(void) {
DigitalOutput led1(foxboard::PB18), led2(foxboard::PB19);
DigitalInput bouton(foxboard::PB0);
unsigned int value;
while(true){
value = bouton.read();
led1.write(!value);
led2.write(value);
}
return 0;
}
Aucun commentaire:
Enregistrer un commentaire