Ciao a tutti! Cerco persona che puo realizzarmi un programma per linux che piloti la porta parallela chi è interessato risponda e gli spiego cosa deve fare...
Ciao a tutti! Cerco persona che puo realizzarmi un programma per linux che piloti la porta parallela chi è interessato risponda e gli spiego cosa deve fare...
Ehm...credo che non troverai molto così ...dovresti dare qualche cosa (magari €uro) in cambio! :P
ecco qua come dovrebbe essere:
-allora pin 2 alto e pin 3 alto = tasto di direzione (su) premuto, lo lascio e tornano tutti e due a zero;
-pin 2 alto e pin 3 basso = tasto di direzione a (sinistra) premuto , lo lascio e tornano tutti e due a zero;
-pin 2 basso e pin 3 alto = tasto di direzione a (destra) premuto, lo lascio e tornano tutti e due a zero;
-pin 4 alto fin quando tengo premuto (5), lo lascio e torna a zero;
-pin 5 alto fin quando tengo premuto (2), lo lascio e torna a zero;
-pin 6 alto fin quando tengo premuto (8), lo lascio e torna a zero;
-pin 7 alto fin quando tengo premuto (4), lo lascio e torna a zero;
-pin 8 alto fin quando tengo premuto (6), lo lascio e torna a zero;
poi sim posso pure pagare magari con una ricarica in altercent....
Ultima modifica di step92 : 06-04-2009 alle ore 18.11.48 Motivo: risposta a sim
Penso che su Linux ti basti scrivere sul device /dev/lp0 (per la prima porta parallela), essendo questa la filosofia delle periferiche mappate su filesystem.
Ti basta un programma che apre un file con qul nome, dopo di che mandi i byte alla porta parallela scrivendo dierttamente su file.
Scusa sono nuovo a linux potresti spiegarmi meglio cos' è il deviace e come si usa?...Grazie...Ma visto che si deve scrivere in un file non si puo usare il php?
Ultima modifica di step92 : 06-04-2009 alle ore 22.00.17
In unix, tutto viene ridotto ad essere maneggiato come file.
Ad esempio, se /tmp/pippo.txt è un file di testo, /dev/floppy è il lettore floppy, /dev/cdrom è il lettore cdrom, /proc/2514 è il processo in esecuzione con id 2514.
Praticamente, sia i dispositivi fisici (devices) quali floppy, cdrom, ecc, che i stessi processi in esecuzione (tra cui anche ancune variabili stesse che governano il kernel) sono mappati in automatico nel file system, cosi è possibile usare le normali operazioni su file per operazioni su dispositivi o processi.
Puoi usare qualunque linguaggio di porgrammazione che supporti la scrittura/lettura di file (questo semplifica enormemente la programmazione delle perifiriche, perchè se sono supportate da kernel, basta accedervi come se fossero dei file).
Tieni presente che non tutte le funzioni su file sono supportate sui dispositivi (infatti sono classificati in alcune categorie). Ad esempio la scrittura su una posizione "random" (con una seek) in un dispositivo quale un nastro magnetico, probabilmente non andrebbe a buon file, essendo il nastro un dispositivo sequenziale per sua natura.
Ovviamente dipende da come è implementato nel kernel il dispositivo.
Grazie sei stato chiarissimo ora potresti spiegarmi un po di pratica?Per esempio come abilito la scrittura come scriverci?Scusa l'ignoranza ma di linux so proprio 0!
In C++, basterebbe questo codice per scrivere CIAO sulla parallela (no l'ho testato, ma dal punto di vista teorico basta questo):
nota: ovviamente dipende da come si comporta il dispositivo collegato alla parallela nell'interpretare la stringa CIAO passata. Una stampante ad aghi dovrebbe stampare CIAO, altri dispositivi avvrebbero altri comportamentiCodice:#include <iostream> #include <fstream> using namespace std; int main () { ofstream myfile; myfile.open ("/dev/lp0"); myfile << "CIAO"; myfile.close(); return 0; }
usando uno script bash, il precedente codice diverrebbe:
Codice:#!/bin/sh echo CIAO > /dev/lp0
Ma con i bash si puo fare un interfaccia...Che mi rilevi i tasti che premo ed a secondo dei tasti mi attiva un bit della parallela?
A scuola (15 anni fa) mi dicevano che con i bash si può fare tutto (hanno fatto persino dei database) :)
In questo caso vanno però usate delle librerie grafiche.
Presumo che le librerie TCL/TK siano quelle più popolari (le ho usate in Perl), e che possano essere utilizzate anche con bash.
Ricordo che c'erano anche le Ncurses che sono librerie grafiche per interfaccie a caratteri.
Ma che linguaggi di programmazione conosci?
Se conosci il Java ti risolvi ogni problema: utilizzi Swing per le interfaccie grafiche e ti appoggi alle librerie di sistema per pilotare la porta parallela (il tutto indipendentemente dal sistema operativo)
Non conosco nessun linguaggio di programmazione...Mi sto documentando con il bash e vedo che si ci puo fare di tutto...Mi potresti dare una mano?
Prova a buttar giù qualcosa, nel caso chiedi pure
Non saprei da dove iniziare! Comuque grazie molte per il tuo interessamento...Ho trovato questo http://www.vincenzov.net/tutorial/spp/indirizzi.htm che spiega come attivare un bit della parallela su linux...Mi potresti dare una mano per attivare i bit secondo i casi da me elecati sopra usando la tastiera? Proprio nessuno sa aiutarm?
Ultima modifica di step92 : 08-04-2009 alle ore 20.50.24
Se trovo il tempo per stasera provo a buttar giù un pezzo di codice in c++ che effettui il core del programma (cioè senza parti grafiche)
Ecco qua. Uso ncuses e l'io a basso livello a livello di porta (invece che con /dev/lp0 ad alto livello). Viene rilevata la pressione di un solo tasto alla volta:
Codice:// use ncurses i/o #include <curses.h> #include <stdio.h> #include <unistd.h> #include <sys/io.h> // /dev/lp0 #define BASEPORT 0x3bc // /dev/lp1 //#define BASEPORT 0x378 // /dev/lp2 //#define BASEPORT 0x278 // send the value to parallel port void send(int value) { outb (value, BASEPORT); } int main ( void ) { /* Get access to the ports */ if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); return(1);} initscr(); noecho(); keypad ( stdscr, TRUE ); while ( 1 ) { switch ( getch() ) { case KEY_UP: send(0x6); break; case KEY_LEFT: send(0x2); break; case KEY_RIGHT: send(0x4); break; case '5': send(0x8); break; case '2': send(0x10); break; case '8': send(0x20); break; case '4': send(0x40); break; case '6': send(0x80); break; default: send(0x00); } refresh(); } endwin(); return 0; }
Ultima modifica di eeepc901 : 12-04-2009 alle ore 16.19.56 Motivo: aggiunto codice
Ciao eeepc grazie per la disposizione...Aggiungo che ora i tasti sono cambiati ora te li scrivo:
tasto w 10100000
tasto s 01010000
tasto d 10010000
tasto a 01100000
tasto 6 00000100
tasto 4 00001000
tasto 5 00000010
tasto 0 00000001
i tasti devono tornare a zero quando li lascio...Grazie
Ultima modifica di step92 : 12-04-2009 alle ore 21.09.54
Basta una piccola modifica:
per compilare serve:Codice:// use ncurses i/o #include <curses.h> #include <stdio.h> #include <unistd.h> #include <sys/io.h> // /dev/lp0 #define BASEPORT 0x3bc // /dev/lp1 //#define BASEPORT 0x378 // /dev/lp2 //#define BASEPORT 0x278 // send the value to parallel port void send(int value) { outb (value, BASEPORT); } int main ( void ) { /* Get access to the ports */ if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); return(1);} initscr(); noecho(); keypad ( stdscr, TRUE ); while ( 1 ) { switch ( getch() ) { case 'w': send(0xa0); break; case 's': send(0x50); break; case 'd': send(0x90); break; case 'a': send(0x60); break; case '6': send(0x04); break; case '4': send(0x08); break; case '5': send(0x02); break; case '0': send(0x1); break; default: send(0x00); } refresh(); } endwin(); return 0; }
assunto che programma.cpp sia il file precedenteCodice:c++ programma.cpp -lcurses