Pages: 1 [2]   Go Down
Author Topic: reed switch  (Read 1491 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 44
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

avete ragione.

ora ho capito: i diodi sono necessari per forza smiley

grazie mille per le info
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10466
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

innanzitutto grazie a tutti per le risposte.

stasera mi sono trovato col socio con cui voglio fare la scacchiera e abbiam tirato giù un paio di problematiche/soluzioni.

per quanto riguarda i vostri post:

se il pezzo fosse solo uno, la cosa dovrebbe essere semplice, dovrebbe bastare leggere il cambio di tensione (anzi, di corrente sarebbe meglio) di tutti i PA e PB. Ma visto che i pezzi sono tanti, la cosa diventa quasi impossibile con quello schema (non so se matematicamente sia possibile). Se tutti i reed shift sono della stessa resistenza, analizzando la corrente e conoscendo a priori che si sposta una sola pedina, e lo stato iniziale delle pedine, analizzando la corrente dovresti farcela, anche se è molto complicato.


scusami ma non ho capito bene cosa intendi. per come l'ho intesa io (eliminando per il momento eventuali errori umani etc etc, quindi ipotizzando una situazione ideale, la situazione è questa:

1. nello schema che ho postato le righe sono elettricamente separate dalle colonne, e i pin digitali delle righe sono di output, mentre quelli delle colonne di input.
2. la matrice di partenza è la seguente

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1

3. per leggere la posizione attuale della scacchiera, due cicli for (le colonne sono i e le righe j)

for (int i = 0 ; i<8;i++) {
   set pin i to high and set other pin to low;
// faccio passare corrente alla prima riga mentre le altre le setto a low
// rispetto allo schema che ho postato, non cè un unico bus a +5v sempre attivo, ma ogni riga è collegata ad un pin separato dagli altri (forse era qui che non mi ero spiegato bene)

   for(int j = 0;j<8;j++) {
      read status of pin j and save to matrix
// leggo lo stato di ogni casella di quella riga e la salvo in una nuova matrice.
// se c'è il pezzo, il magnete chiude il contatto e dovrei leggere 1 sul pin di input, mentre se non ce nessun pezzo leggo 0.
}
}

in questo modo penso che con 8 pin di output e 8 di input riesco a gestirmi tutta la scacchiera.

ipotizzando che abbia mosso una pedina, dopo la mossa ho per esempio questa matrice:

1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1

confronto questa matrice con quella precendete e scopro che c'è stato un cambiamento, che in pezzo di è mosso da e2 a e4 (coordinate della scacchiera). io a priori so che in e2 ci sta un pedone, e quindi so che in e4 ci è finito un pedone. poi questo come lo gestirò via software non lo so ancora che non ho ancora cominciato a smanettarci, ma credo che non sarà un problema troppo complicato in virtù della conoscenza iniziale delle varie posizioni dei pezzi.


Scusa, non sapevo come funziona questa griglia e son partito per la tangente, pensavo che sia righe che colonne fossero input. Per come l'ho pensata io (velocemente, eh, niente calcoli o schemi di supporto) in effetti lo schema dovrebbe essere modificato, specialmente le resistenze di pull-up dovrebbero avere diversi valori accuratamente scelti(forse numeri primi?). quando un reed si attiva, mette in collegamento la riga (che è a pull-up) con la colonna. Quindi se la pedina rimane sulla stessa riga, la tensione resta uguale, ma cambia per le 2 colonne (quella di partenza e quella di arrivo).
A questo punto è abbastanza semplice sapere dov'è il pezzo. Quando più pezzi stanno sulla scacchiera, invece diventa più complesso, perchè bisogna smontare la tensione letta considerando l'apporto di ogni resistenza. Ah i reed non devono essere un corto circuito, ma avere tutti la stessa resistenza.

Ora sto dando un'occhiata al link di astrobeed e mi rendo conto che la mia (se funziona) è una complicazione inutile...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 [2]   Go Up
Jump to: