Avrei bisogno di un aiuto…praticamente sto lavorando sempre sul mio solito progetto per creare una tastiera ethernet partendo da una tastiera PS2…
a questo punto devo introdurre degli account sotto password…mi spiego meglio…cio che devo fare è scrivere un messaggio, premere invio e fare una richiesta di password…dopo aver introdotto la password corretta, abilito una scrittura su Sd card e infine passo alla immissione su ethernet…fino ad ora sono riuscito a creare una funzione password attraverso la libreria Pasword.h che scrive su Sd se riesco a loggarmi correttamente, con la scrittura su sd che nn avviene fino a quando non mi loggo correttamente…cio che non riesco a fare è legare tra di loro la funzione appena citata e la funzione di lettura tastiera…nel senso che se immetto i caratteri via tastiera e premo invio, non riesco in nessun modo ad entrare nella funzione password da me creata…sapete darmi una mano? di seguito riporto lo sketch della funzione passoword (chiamata valuta_account) e la funzione lettura tastiera…
void valuta_account_di_invio(int abilitazione) {
//
while(abilitazione) {
if (!keyboard.available()) return;
char c = keyboard.read();
if (c != PS2_ENTER) {
password.append(c);
password1.append(c);
Serial.print("*");
e++;
}
if((e == 4 && c == PS2_ENTER) || (e > 4 && c == PS2_ENTER) || (e < 4 && c == PS2_ENTER))
{
if(password.evaluate())
{
Serial.println();
Serial.println("password corretta, sei Antonio");
strcpy(temp1, temp);
password.reset();
if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END))
{
Serial.println(F("Errore apertura file"));
}
else
{
Serial.println();
Serial.println(temp1);
myFile.print("Messaggio da Antonio: ");
myFile.print(temp1);
myFile.println("
");
myFile.println();
myFile.close();
}
break;
}
else if(password1.evaluate())
{
Serial.println();
Serial.println("password corretta, sei Marco");
password1.reset();
strcpy(temp1, temp);
if (!myFile.open("test.txt", O_RDWR | O_CREAT | O_AT_END))
{
Serial.println(F("Errore apertura file"));
}
else
{
Serial.println();
Serial.println(temp1);
myFile.print("Messaggio da Marco: ");
myFile.print(temp1);
myFile.println("
");
myFile.println();
myFile.close();
}
break;
}
else
{
Serial.println();
Serial.println("password errata prego reinserire la password");
password.reset();
password1.reset();
e = 0;
}
}
}
abilitazione = 0;
}
void tastiera ()
{
while(1)
{
if(!keyboard.available()) return;
char c = keyboard.read();
Serial.print(c);
if( c == PS2_ENTER || (i == (SIZE-1))) break;
temp[i] = c;
i++;
}
temp[i] = 0x00;
i = 0;
consenso = 1;
//
Serial.println();
Serial.println("Prego inserire la password");
//
valuta_account_di_invio(consenso);
}
La funzione fa cio che deve fare.....il problema è che nn riesco a legare le due funzioni assieme.....
dovrei fare qualcosa che escluda le due funzioni......il mio timore è che siano i due cicli while che non si piacciono molto......
immetto un messaggio da tastiera PS2......mano mano che i caratteri dalla tastiera (PS2) vengono digitati, vengono caricati in un buffer......quando premo il tasto invio della tastiera succedere che questo buffer viene memorizzato all interno di un ulteriore buffer che verra memorizzato sulla sd (della ethernet shield) e successivamente verrà immesso su rete ethernet....
la modifica che devo fare sul programma sopracitato è la seguente:
Quando premo invio il programma anziche memorizzare i caratteri digitati sulla Sd, deve chiedermi una password.....quando la password è corretta il programma copiera sulla sd il buffer precedentemente memorizzato e immettera il tutto su rete ethernet......
questa cosa la funzione che ho messo la fa perfettamente......chiede una password.....e fino a quando non viene immessa la password corretta la scrittura su sd non avviene......il problema è che cio di cui ho bisogno io è immettere prima di tutto il testo (che visualizzo su monitor seriale) e poi quando premo invio far partire la funzione che ho creato
Capito, il modo migliore per fonderlo è usare un solo input da tastiera e usare dei flag a seconda di quello che si sta facendo o chiedendo in quel momento
void Inserimento_dati_tastiera() {
flag =0 (nessun utente sta scrivendo)
flag =1 (si è presentato un utente "pinco pallino" e deve inserire un USERNAME)
salvo i char in un char buffer USER
premo invio quindi chiudo l'immissione del flag 1 ...
flag =2 (deve inserire PASSWORD)
salvo i char in un char buffer PASSW
premo invio quindi chiudo l'immissione del flag 2 ...
aspetta che controllo se sei registrato
si, sei registrato ... scrivo sul server esterno
si, sei registrato ... scrivo su SD
flag=0 (nessun utente sta scrivendo)
}
è tutto un gioco di IF
E' chiaro che nessuno di noi sa cosa sta facendo il loop() mentre inseriamo i dati sulla keyboard, se deve fare nel frattempo qualcosa o se tutto è fermo fino a quando ti trovi dentro l'immissione.
non è possibile darti un listato di codice funzionante, perchè intanto va capito cosa hai fatto tu, andrebbe caricato tutto e modificato, poi non tutti abbiamo lo stesso metodo, tu hai l'idea finale di come deve essere il tutto noi no.
usi lo stesso while,
if flag==1 i char ricevuti vanno nel buffer USER
if flag==2 i char ricevuti vanno nel buffer PASSW
poi chiudi con invio .... non si accettano più char da tastiera per quel buffer
almeno questo è come lo vedo io, poi magari qualcun'altro la pensa in modo diverso