Salve ragazzi, inanzi tutto vi ringrazio per l'aiuto che mi state dando, vi spiego meglio: (ovviamente non devo conservare oggetti di valore o altro ahaahh).
sto realizzando un sito web (mettiamo caso di un negozio di alimentari locale) dove aggiungo gli articoli al carrello mettiamo caso quindi parliamo di acquisti online, arrivati al pagamento, oltre al pagamento, per ritirare la merce comprata mi servirò di un codice che dovrò generare al momento dell'acquisto. (questo codice ha una lunghezza fissa es: 9 cifre (numeri e/o lettere)): quando avrò generato il codice, e mi reco allo (sportello/al negozio alimentari per esempio) ci sarà questa cassa chiusa, utilizzando arduino e quindi display LCD, tastierino, servo motore e modulo ethernet, l'utente finale inserirà il codice che hanno generato dal sito, e se la password/codice è giusto la cassa si aprirà. ecco un esempio del mio codice.
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define LED_PIN 11
#define Password_Length 6 // Inserire la lunghezza della password se la password è lunga 7 caratteri inserire 8
char Data[Password_Length];
char Master[Password_Length] = "12345"; //Modifica la password
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;
void setup(){
lcd.init();
lcd.backlight();
pinMode (LED_PIN, OUTPUT);
analogWrite (LED_PIN, 50);
Serial.begin (9600);
myservo.attach (10);
myservo.write (0);
}
void loop(){
lcd.setCursor(0,0);
lcd.print("INSERIRE PASS");
customKey = customKeypad.getKey();
if (customKey){
Data[data_count] = customKey;
lcd.setCursor(data_count,1);
lcd.print ("*");
Serial.println(Data[data_count]);
data_count++;
}
if(data_count == Password_Length-1){
lcd.clear();
if(!strcmp(Data, Master)){
lcd.print("PASS CORRETTA");
delay (1000);
myservo.write (180);
}
else{
lcd.print("PASS ERRATA");
delay(1000);
}
lcd.clear();
clearData();
}
}
void clearData(){
while(data_count !=0){
Data[data_count--] = 0;
}
return;
}
questo è il codice senza la scheda ethernet, infatti funziona da semplice cassaforte da aprire con password che arduino già conosce.
Questo invece è la funzione (che premesso non ho creato io ma ho trovato sul web)
<TITLE>Numeri casuali</TITLE>
<SCRIPT>
today=new Date();
jran=today.getTime();
function Casual()
{
ia=9301;
ic=49297;
im=233280;
jran = (jran*ia+ic) % im;
N1=eval(document.forms[0].elements[0].value);
N2=eval(document.forms[0].elements[1].value);
document.forms[0].elements[3].value = Math.ceil( (jran/(im*1.0)) *(N2-N1) ) + N1 - 1;
document.forms[0].elements[4].value += document.forms[0].elements[3].value + " ";
}
</SCRIPT>
<CENTER>
<FORM>
<TABLE BORDER=0 WIDTH=600>
<TD align="center"><INPUT TYPE="hidden" VALUE="100000" SIZE=0>
<TD align="center"><INPUT TYPE="hidden" VALUE="999999" SIZE=0>
<TD align="center"><INPUT TYPE="button" VALUE="Conferma Acquisto" onClick="Casual()">
<TD align="center"><INPUT TYPE="text" VALUE="" SIZE=8>
</TABLE>
da adattare al sito web in questione, oppure se c'è una soluzione senza usare JS meglio ancora
partendo da questi due codici dove devo andare a modificare il tutto?