Esercizio 1 (Porta parallela)
Esercizio 2 (Porta seriale)
�
#include <fcntl.h> int open(const char *pathname, int flags); #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count);Esercizio 1
L'esercizio consiste nell'attivare otto linee digitali (associate a led) attraverso la scrittura, nel device associato alla porta parallela, di un intero a 8 bit (=1 byte = char).
#include<fcntl.h> #include<unistd.h> int fd; char c[1]; fd = open("/dev/pp0",O_WRONLY); ... write(fd,c,1); ... close(fd);Per vedere in esadecimale il valore di un numero intero:
cout << hex << i << endl;Provate diverse sequenze di accensione e spegnimento dei led.
Esercizio 2
Dopo aver collegato il multimetro digitale alla porta seriale si imposti la misura
(comando composto dalla singola lettera d) e si legga il risultato
(il multimetro risponde inviando la misura effettuata all'istante del comando
e quelle nei tre secondi precedenti).
Ad esempio (resistenza)
-12345678901234- XX 7.345 uu 7.341 7.344 7.344dove XX identifica il tipo di misura (OH=resistenza DC=misure in corrente continua) e uu l'unità di misura.
#include<fcntl.h> #include<unistd.h> #include<serial.h> ... char buf[14]; int i; sid = open("/dev/ttyS0",O_RDWR); if (sid>0){ setserspeed(sid,9600); } else { ... } for ( ){ // ciclo sul numero di misure write(sid,"d\n",2); usleep(500000); val = lettura(tipo); sleep(1); } ... close(sid); ...La funzione lettura sarà molto utile per le prossime due esercitazioni: vi consigliamo quindi di realizzarla e provarla con cura per risparmiare tempo nelle prossime esercitazioni.
double lettura(string tipo){ double val=-999; //valore di default nel caso in cui la lettura non vada a buon fine for (i=0;i<4;i++){ read(sid,buf,14); // per i=0 il buffer contiene il valore della misura (per i=1,2,3 i valori a -1,-2,-3 sec) ... } return val; }Dopo la chiamata a read occorrerà procedere alla codifica:
Strumenti utili per la lettura:
string sbuf(buf,nch);buf puntatore al primo elemento, nch numero di caratteri
string sottostringa = stringa.substr(inizio,lunghezza);il primo parametro del metodo substr definisce la posizione del carattere da cui la sotto stringa inizia, il secondo da quanti caratteri � composta (se il secondo parametro viene omesso la sottostringa termina con la stringa)
#include <sstream> string sbuf; istringstream is(sbuf); // si può anche utilizzare una sottostringa double val; is >> val
string s=" abcdef"; int pos = s.find("ab"); // pos vale 1In caso la sottostringa cercata non esista pos viene posto uguale a string::npos , find può quindi essere utilizzato per verificare che una stringa contenga una determinata sottostringa
> g++ -o eseguibile sorgente.cpp -l serial