Salve a tutti..
Avrei un problemino con un progetto che sto realizzando. Il progetto consiste nel creare un sistema di votazioni formato da 15 enti che usi arduino e un display a 4 righe per dare i risultati. In pratica ogni postazione avrà due pulsanti uno per il SI e uno per il NO. Nel display dovrà comparire quante persona hanno votato si, quante hanno votato no e infine quanti astenuti ci sono. Ho fatto una bozza con solo due votanti ma credo non funzioni ...
Chiedo il vostro aiuto XD XD
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7);
int P1Pin = 2;
int P2Pin = 3;
int P3Pin = 4;
int P4Pin = 5;
int P1State = 0;
int P2State = 0;
int P3State = 0;
int P4State = 0;
int VotiSi = 0;
int VotiNo = 0;
int Assenti = 2;
int A=0;
int B=0;
int C=0;
void setup()
{
lcd.begin(16, 4);
pinMode(P1Pin, INPUT);
pinMode(P2Pin, INPUT);
pinMode(P3Pin, INPUT);
pinMode(P4Pin, INPUT);
}
void loop()
{
//1° votante
//SI
if (P1Pin=HIGH)
{
P1State=1;
}
else
{
P1State=0;
}
if (P1State=1)
{
A=VotiSi+1;
}
//NO
if (P2Pin=HIGH)
{
P2State=1;
}
else
{
P2State=0;
}
if (P2State=1)
{
B=VotiNo+1;
}
//ASTENUTO
if (P1State==0 && P2Pin==0)
{
C=Assenti-1;
}
//2° votante
//SI
if (P3Pin=HIGH)
{
P3State=1;
}
else
{
P3State=0;
}
if (P3State=1)
{
A=A+1;
}
//NO
if (P4Pin=HIGH)
{
P4State=1;
}
else
{
P4State=0;
}
if (P4State=1)
{
B=B+1;
}
//ASTENUTO
if (P3State==0 && P4Pin==0)
{
C=C-1;
}
//visualizzazione
lcd.setCursor(0, 0);
lcd.print("Risultati Votazione:");
lcd.setCursor(1,1);
lcd.print("SI:");
lcd.setCursor(5,1);
lcd.print(A);
lcd.setCursor(1,2);
lcd.print("NO:");
lcd.setCursor(5,2);
lcd.print(B);
lcd.setCursor(1,4);
lcd.print("Astenuti:");
lcd.setCursor(10,4);
lcd.print(C);
}
A=VotiSi+1; A sará sempre 0 o 1 mai piú alto
C=Assenti-1; C sará sempre 1
if (P4Pin=HIGH)
{
P4State=1;
}
else
{
P4State=0;
}
if (P4State=1)
{
B=B+1;
}
B sará alle Stelle
if (P3State==0 && P4Pin==0)
{
C=C-1;
}
e C in cantina.
Devi:
Fare il debouce
Triggerare un pulsante premuto sul cambio LOW-HIGH senó lo conti piú volte.
Gli astenuti li controlli togliendo dall nr totale di aventi diritto i voti si e i voti no.
Il c sarà sempre 1 in questo caso perche io per prova ho provato con due soli pulsanti ma in finale saranno 15 e ogni volta dovrebbe fare -1 ... Uwe si sono alle prime armi con la programmazione in Arduino se potresti darmi una mano te ne sarei molto grato
Se ho capito bene vorresti collegare 15 coppie di pulsanti ad Arduino (15 si e 15 no) per far votare 15 persone contemporaneamente giusto?
Il programma dovrebbe leggere i pulsanti e chiusa la votazione dare il risultati dei totale dei si, dei no e degli astenuti.
Cosi?
Dividi il codice in funzioni in modo da seguire una sequenza logica.
Aggiungi un pulsante per iniziare e concludere e resettare le votazioni.
Il tuo programma dovrà fare:
inizializzo Arduino (pulsanti, ecc )
attendo inizio votazione
leggo continuamente lo stato dei pulsanti di voto e memorizzo i valori
ok, ma con la logica che sta' seguendo, se uno dei votanti preme SI e poi ci ripensa e preme NO ( e poi SI e poi NO etc etc ) i voti alla fine saranno ben piu' del numero dei votanti.
e poi, come pensi di collegare 30 linee ad Arduino ?
Il debounce è un falso problema perché devi cambiare lo stato del voto nel periodo di votazione.
Anche se si dovesse premere più volte il pulsante il voto sarebbe uno perché vai a leggere la variabile di stato e non lo stato del pulsante. Variabile che resetti a fine voto.
Per le linee o passi ad Arduino Mega o usi un expander (tipo il PCF8574).
Arduino DUE è molto poco supportato e pochissime librerie di terze parti sono state convertite per funzionarci.
Molti pochi shield sono fatti per funzionare su Arduino DUE.
La scheda funziona esclusivamente a 3.3V e molti dei suoi pin sono in grado di dare un decimo della corrente (max 3 mA) dei pin degli altri Arduino (max 40 mA). I rimanenti comunque non danno più di 15 mA.
E' sicuramente un processore molto più complesso da utilizzare. Basta guardare le oltre 1400 pagine di cui è composto il datasheet
Difficilmente vedrà ulteriori sviluppi dato che ... ora c'è da dedicarsi alle nuove schede.
Insomma ... salvo tu non abbia esigenze veramente particolari e l'esperienza per utilizzare tale scheda, se è solo per una questione di numero di pin ... usa Arduino Mega ... avrai tutto il supporto di cui puoi avere bisogno e la totale compatibilità con la maggior parte degli shield.
Buona sera... Mi sono messo 10 minuti al pc ed ho pensato di farlo così il programma però non so dove sbaglio.. Vi metto un nuovo sketch fatto adesso. Vi allego la foto del display per farvi vedere che esce :~
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7);
int P1Si = 2;
int P2No = 3;
int P3Si = 4;
int P4No = 5;
int ValSi = 0;
int ValNo = 0;
int ValAssenti = 0;
int A=0;
int B=0;