Aumentare pin arduino uno

Ciao a tutti! :smiley:
Sto buttando giu un progettino con arduino (uno), ma mi sono reso conto che mi servono più pin di quanti ne abbia a disposizione..
In pratica io uso: 4 pin per l'ethernet (enc28j60), 8 pin per 4 rotary encoder, 5 pin per 3 lcd (hd47780) + 3 pin per il controllo di ogni singolo lcd, più vari pin per led e pulsanti...

Ovviamente mi servono molti più pin di quelli disponibili... Cercando su internet ho letto che posso usare un PCF8574 per aumentare i pin disponibili.. Il problema, che non ho capito, è se io al PCF8574 posso collegare solo pulsanti o led (quindi che possono solo ricevere uno stato 0 o 1 deciso da me) o se posso collegare qualcosa tipo gli encoder, o gli lcd...

Leggendo mi sembra di aver capito che tramite una funzione io posso comandargli gli stati 0 o 1 sui vari pin, ma non ho capito se posso leggere o comandare qualcosa di più complesso...

What is the total of pins you need ?
To upload a sketch : pin 0 and 1 (RX and TX).
Total is 2 (RX,TX) + 4 (SPI) + 8 (encoders) + 5 (lcd) + 3 (lcd select) = 22 ?
The Arduino has 20 pins (every analog pin can also be a digital pin).

You can use I2C for example for a I2C display and buttons and the PCF8574.
You can also use SPI. You have already SPI for the ethernet.
Or you can use a few lines with a mux or shift register like the 74HC595.

Nick Gammon about output shift register: http://www.gammon.com.au/forum/?id=11518
Input shift register: Gammon Forum : Electronics : Microprocessors : Using a 74HC165 input shift register
Example with an I/O expander: Gammon Forum : Electronics : Microprocessors : Connecting a graphical LCD via a I2C/SPI using a 16-bit port expander

Io ti direi comprati una 2560 .... anche perché più pin ti servono più grande è il programma che deve elaborare e gestire la grande quantità di pin, quindi finisci con il soddisfare una condizione e essere carente su un altra
Espandere i pin di una UNO è valida solo se molti di essi sono controllati contemporaneamente tipo cubo led, ma se ciascuno ha una sua funzione e deve rispondere a determinate regole diventa difficile farci stare tutto in quel chippino
ciao

ciao

AleCune93:
...
5 pin per 3 lcd (hd47780) + 3 pin per il controllo di ogni singolo
...

con 3 PCF8574 puoi collegare i tre display con 2 pin in tutto (A4 e A5).

ciao
pippo72

Anch io Ti consiglio di usare un Arduino Mega 2560.
Non solo per il numero di pin disponibili ma anche per la RAM che presto scareggerá sulla UNO.
Ciao Uwe

In alternativa, puoi aggiungere una o due Arduino Micro e lavorare via I2C.
In questo modo ogni board esegue un compito specifico e lavori in vero parallelismo.
Penso soprattutto agli encoder.

@Peter.. I need minimum 24 pins.. Can't I use pins 0 and 1 even if they're for RX and TX? I don't need the serial in my project..

@pablos, uwefed.. la mia idea era di lavorare al progetto su un arduino uno, e poi trasportare tutto su un singolo ATMEGA328, cosi da diminuire gli spazi.. A meno che non ci sia un 2560 che non richieda una saldatura superficiale (non so il termine corretto :sweat_smile: )..

@paulus.. potrebbe essere una buona idea.. ma è fattibile con due ATMEGA328? Dovrei lavorarci su però per il passaggio di parametri.. Perchè ora ho scritto lo sketch in modo che quando giro l'encoder lui capisce se l'ho girato a dx o sx e invia direttamente un comando via UDP.. Se separo l'encoder dall'ethernet non saprei come farlo..

You can use RX and TX, but the signals must override the usb-to-serial chip. That chip is still connected.
When you set them as output, there is no problem in most cases.

come ti e' già stato suggerito,

con 3 PCF8574 puoi collegare i tre display con 2 pin in tutto (A4 e A5)

o in alternativa, se non vuoi saldare, tre di questi
con due Pin colleghi gli LCD in I2C, la Libreria e' simile e i comandi rimangono gli stessi

Su consiglio di paulus ho provato a dare un occhiata alla comunicazione tra due arduino via I2C... Ho collegato l'arduino uno ad un ATMEGA328, e sono riuscito a trasferire i dati da un arduino all'altro..

Mi piace molto questa cosa... Quando (e se) amplierò il progetto potrò usare l'I2C per avere più atmega, ognuna col suo compito (la master legge i dati dall'ethernet, e li manda alle relative slave che si gestiscono i vari compiti in base a cos'hanno collegato...)

Cercando sempre per l'I2C ho trovato anche la libreria "EasyTransfer"... Ho provato a scambiare dati con questa libreria, e devo dire che è molto più semplice e immediato rispetto a trasferirli con la sola libreria "wire".. Anche se immagino che ci sia un "ma"... Mi sembra strano che sia tutto rose e fiori.. O questa libreria funziona bene tanto quanto trasferire dati con la semplice wire?