Go Down

Topic: Hashmap (Read 661 times) previous topic - next topic

antonio_cov

Ciao a tutti. Come si capisce dal titolo ho un problema riguardante la programmazione. Sto realizzando una classe e avrei bisogno di utilizzare un hashmap<String,int> avete qualche idea se esista una libreria che mi permetta di utilizzare un tipo di dato Hashmap?

P.S:
Ho trovato sul sito una libreria, ma secondo me è un pò vecchiotta perché per farla funzionare ho dovuto sostituire in HashMap.h l'include di "WProgram.h" con "Arduino.h".
Grazie...

lucadentella

ciao Antonio

quella su playground mi pare l'unica libreria che abbia oggetti Hashmap per arduino.
Spesso però utilizzare oggetti "comodi" a cui magari siamo abituati in C# o Java anche nella programmazione di Arduino comporta un (inutile) spreco di memoria RAM... nel tuo sketch è indispensabile l'uso di una Hashmap?
bye
lucadentella.it

antonio_cov

Grazie per avermi risposto! In pratica ho un programma che fa delle cose e ad un certo punto devo utilizzare dei pin di output e di input ma questi vengono fuori dalle considerazioni fatte dal programma. Avevo pensato di utilizzare un hashmap<String,int> del tipo <"circuito lampada",3> ad esempio sapevo che sull'ingresso 3 c'è un relè che comanda la lampada, poi ad esempio <"sensore movimento",9> così sapevo che sul pin 9 è collegato in ingresso un sensore di movimento. Però se mi porta via molta memoria vedo di implementare il tutto in maniera diversa. Avresti qualche soluzione in merito?
Grazie ancora...

lesto

usa una matrice a 2 dimensioni di tipo int
matrice[2][numero elementi]

nell'indice
  • avrai il valore int dell'hash (un hash molto semplice per le stringhe è sommare tra loro tutte le lettere, che come sai secondo la tabella ascii corrispondono ad un numero)
    nell'indice [1]
  • avrai il valore da dare in pasto al puntatore della classe (nel tuo caso vuoi un int e quindi nessun problema)

    volendo al posto della matrice puoi usare 2 array "paralleli"

    poi copn la realloc puoi rendere dinamico questo array....

    ma secondo me non conviene avere una struttura così complessa.
    fai una struttura che contiene String e int, e poi fai una lista (le liste sono un discorso base del c che si fanno per comprendere i puntatori... trovi mille guide ed esempi)
    consiglio questa via, è quella da dove imparerai molte cose interessanti E ottieni un codice più ottimizzato (ed essendo arduino mooolto limitato...)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

lucadentella

Ciao

quindi l'associazione PIN/significato è dinamica?

potresti definire delle costanti per i significati possibili, es

Code: [Select]
#define LAMPADA 1
#define RELAY 2
#define TEMPERATURA 3


e, avendo un numero finito di PIN, usare un semplice array con il seguente significato:
- posizione array = PIN di Arduino
- valore dell'elemento = significato del pin

quindi con un codice tipo

Code: [Select]
switch(mioArray[1]) {
case LAMPADA: ... break;
case RELAY: ... break;
}


vai a capire che significato ha il PIN 1 di Arduino...

può andare in base a quanto ho capito che ti serve?

lucadentella.it

antonio_cov

Grazie luca la soluzione era molto banale ma non ci avevo proprio pensato. Abituato a linguaggi più complessi!!  :smiley-mr-green:

Go Up