Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 08 marzo 10, 14:10   #1 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
oooooooooooooooooooooooooooooooooooooook, vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaa bene

ora provo con il metodo degli array (si sono duro di testa ) poi magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu

grazie a tutti intanto, vi farò sapere se funziona

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:21   #2 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Ho guardato un po' il codice e devo dire che con un ciclo FOR non risolveresti: hai delle eccezioni da gestire che riguardano i casi 'somma', voglio dire i valori 3,5,6,9 che non sono diretta potenza di 2.
Probabilmente hai già una buona riduzione del codice raccogliendo tutti i casi in una funzione che richiamerai da tutto il codice.
ad esempio

unsigned int function check_porta()
{
switch(PORTA) {
case 1: return 1;
case 2: return 2;
case 3: return 9;
etc etc
}
}

Nel codice scriveresti, per esempio:
arciereb[freb] = check_porta();

Attenzione che comunque hai un paio di eccezioni, come qui:
case 6:
arciereb[freb] = 0;
freb = freb-1;
break;
in questo caso devi comunque controllare porta==6 e decrementare freb

Non conoscendo bene il funzionamento, non credo che si possa fare sempre dentro la funzione. Ma insomma, vedi tu...
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:27   #3 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
per il case 6 infatti mettevo un if
il fatto che non siano potenze di 2 in realtà è perchè per alquni tasti uso un solo bit acceso per altri anche 2
ad esempio
case 1 (0b00000001)
case 2 (0b00000010)
case 4 (0b00000100)
...
case 3 (0b00000011) da quì non sono più potenze di 2

uso questo modo per non usare pin eccessivi.

grazie dell'aiuto, appena ho un po di tempo butto giù il codice completo

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:37   #4 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
per il case 6 infatti mettevo un if
il fatto che non siano potenze di 2 in realtà è perchè per alquni tasti uso un solo bit acceso per altri anche 2
ad esempio
case 1 (0b00000001)
case 2 (0b00000010)
case 4 (0b00000100)
...
case 3 (0b00000011) da quì non sono più potenze di 2

uso questo modo per non usare pin eccessivi.

grazie dell'aiuto, appena ho un po di tempo butto giù il codice completo

ciao
lol21
I tasti quanti sono? Li hai messi in matrice?
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 16 marzo 10, 15:22   #5 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da illez Visualizza messaggio
I tasti quanti sono? Li hai messi in matrice?
Non te lo avevo già suggerito?

Cerco qualcosa che ti possa aiutare, ma non è difficile!
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 16 marzo 10, 15:37   #6 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
Citazione:
Originalmente inviato da illez Visualizza messaggio
Non te lo avevo già suggerito?

Cerco qualcosa che ti possa aiutare, ma non è difficile!
OOOOOPS!

non mi ricordavo scusa, grazie dell'aiuto
i tasti sono 16 e non sono in matrice (attualmente )
ora appena arriva la nuova millefori faccio già la tastiera, la collego tranite strep ma questo non dovrebbe importare.

signori e signori, sono fiero di presentarvi lo schema della tastiera


Grazie ancora a tutti dell'aiuto e della risposta tempestiva

ciao
lol21
Immagini allegate
Tipo file: png pic_schema_tastiera.png‎ (11,6 KB, 329 visite)
lol21 non è collegato   Rispondi citando
Vecchio 16 marzo 10, 15:41   #7 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Embè???
Hai fatto il 90% del lavoro
Metti a 1 un pin delle colonne e verifichi se uno dei 4 pin delle righe è a 1.
La combinazione riga-colonna ti dice il tasto.
Qual'è il problema???
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:28   #8 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu
Guarda qui:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; mask < (1 << MAXPAGLIONI); mask = mask << 1, i++) 
	        if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
Questo funziona se, come nel tuo codice, può essere colpito un solo paglione per volta. Se è possibile che vengano colpiti più bersagli insieme, bisogna modificare le cose.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:37   #9 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Anzi, meglio ancora e più efficiente:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; i < MAXPAGLIONI+1; mask = mask << 1, i++) 
	        if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:40   #10 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da frank Visualizza messaggio
Anzi, meglio ancora e più efficiente:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; i < MAXPAGLIONI+1; mask = mask << 1, i++) 
            if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
Ci sono le eccezioni in alcuni casi (vedi 3, 5 etc)
i < MAXPAGLIONI+1; è inefficiente. Fai una somma ad ogni ciclo.
piuttosto:
i <= MAXPAGLIONI;
__________________
.......
illez non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
alimentatore insufficiente??? molale81 Batterie e Caricabatterie 2 10 aprile 09 00:35



Tutti gli orari sono GMT +2. Adesso sono le 22:55.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002