Show Posts
Pages: 1 ... 41 42 [43] 44 45 ... 49
631  International / Generale / Re: display 7 segmenti anodo comune & arduino on: August 07, 2011, 02:00:59 pm
Se ti interessa ho fatto uno sketch che fa proprio questo. Converte un numero che gli passi (da 0 a 9) in binario e poi con un ciclo che prende ogni bit della stringa binaria setta gli output da mandare all'integrato.
E' un po' confusionario ed allungato probabilmente però è stato interessante farlo.
Code:
void setup(){
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  Serial.begin(9600);
}
void loop(){
  for(int i=0;i<=9;i++){
   set_display(int_to_bin(i));//print di numeri da 0 a 9
   delay(1000);
  }
}
void set_display(String x){
  for(int i=0;i<=3;i++){
   digitalWrite(13-i,0);//spengo tutti i led
  }
  for(int i=0;i<=3;i++){
   digitalWrite(13-i,stringToInt(x.substring(i,i+1)));//assegno al led # il valore 0 o 1
  }
}
String int_to_bin(int x){
  String ris;
  do{
   if (x % 2 == 1){
    x=int(x/2);
    ris="1" + ris;
   }
   else{
    x=x/2;
    ris="0" + ris;
   }
  }while(x!=0);
 
  switch(ris.length()){
    case 1: ris="000" + ris;break; //imbottisco la stringa di "zeri" per renderla di 4 bit
    case 2: ris="00" + ris;break;
    case 3: ris="0" + ris;break;
  }
  return ris;
}
int stringToInt(String s){
  byte sLen = s.length();
  int retNum = 0;
  for(byte k=0; k < sLen; k++){
    retNum += ((byte)s.charAt(k)-48) * pow(10, sLen-k-1);
  }
  return retNum;
}
P.s: la funzione per convertire la stringa in un intero l'ho presa da un post di dani88, visto che in normale (int) non funzionava
632  International / Generale / Re: display 7 segmenti anodo comune & arduino on: August 06, 2011, 08:21:58 am
Potresti usare un decoder binario (se così si chiama) utilizzando 4 uscite digitali dell'arduino, ora non ricordo il circuito ma lo abbiamo utilizzato a scuola.
edit:qui il circuito e qui il datasheet dell'integrato
633  International / Generale / Re: Classiche domande sull'xbee on: August 02, 2011, 01:55:43 pm
Non ho mai ordinato da quel sito. Io uso questi:
https://www.adafruit.com/products/126
come schede xbee
Quello che hai linkato tu ha un pin in più rispetto al mio, chiamato "ct". Cos'è ?
634  International / Generale / Re: Classiche domande sull'xbee on: August 02, 2011, 10:34:01 am
Ottimo, grazie ragazzi!
Qualcuno di voi ha mai ordinato dal sito ? Posso fidarmi ?  http://www.dfrobot.com/
635  International / Generale / Re: Classiche domande sull'xbee on: August 01, 2011, 11:09:34 am
Ok, è arrivato il giorno ! Domani ordino.
Mi dispiace rianimare il post però ho un'altra domanda. Visto che ordino da http://www.dfrobot.com e di shield hanno solo quelle "non compatte" (come definite da un utente smiley-grin) mi chiedevo se fosse possibile collegare ll'xbee all'arduino tramite questo utilizzando i 4 pin tx rx 5v e gnd.
Sarebbe molto conveniente perchè prendendone 2 potrei comunicare da pc a pc(con usb) da arduino ad arduino ("4 pin") e anche arduino e pc.

Sto sbagliando ? smiley-grin
636  International / Generale / Re: salvare stringa on: July 30, 2011, 09:36:57 am
un piccolo esempio... se volessimo salvare http://www.arduino.cc pe esempio il codice sarebbe?
Dipende da come lo mandi sul seriale, cioè se lo scrivi tu a mano nel campo oppure se lo fai mandare da un altro ide.
637  International / Generale / Re: salvare stringa on: July 30, 2011, 09:24:27 am
scusa la mia ignoranza ratto ma come si fa?
il vettore o array non è altro che una variabile con tante sottovariabili chiamate indici, quindi una struttura dati.ti serve nel caso in cui sai già quanto è lunga la stringa, di conseguenza se è lunga 16 caratteri dichiari un vettore da 16 caratteri:  char vet[16] (15 sarebbe più corretto, perchè gli indici partono da 0)
Char perchè ti vai a salvare ogni singolo carattere in una cella. Quindi se hai la stringa "ciao" dovresti avere: vet[0]='c'; vet[1]='i' ...
Comunque se la stringa non ha una lunghezza fissa dai un'occhiata al mio post.
638  International / Generale / Re: Serial.read() di stringhe on: July 30, 2011, 09:14:56 am
Ciao,

Quote
Una cosa.. non c'è modo di aprire il monitor seriale mentre lo sta usando il python vero ?

Puoi utilizzare un software per il monitotaggio delle porte seriali (cerca serial monitor o serial sniffer in Google) come, ad esempio, questi:

http://www.serial-port-monitor.com/
Vi e' anche una versione piu' recente (DMS).
http://www.eltima.com/products/rs232-data-logger/
Poi hanno fatto la versione a pagamento http://www.eltima.com/products/serial-port-monitor/

Puoi sempre utilizzare anche le trial edition che forniscono quasi tutte le software house (in genere per un 30gg).

Controlla prima se possono funzionare con la versione di Windows che hai.

Prima devi avviare il serial monitor e poi apri la comunicazione da Python o altro software.

Ciao,
Marco.
Sembra funzionare, anche se ancora devo smanettarci smiley-grin

Comunque adesso ho un altro problema.I valori che mando sul seriale sono del genere:
stick: 80,80,80,70
stick:30,80,80,75
 e siccome sono quasi in trasmissione continua devo stoppare il ciclo while che mi aveva postato seppe per salvare la prima "ondata" di valori e fare i miei calcoli.
Di conseguenza alla fine di ogni print  sul seriale metto un ';' quindi: stick: 80,80,80,70;
in modo da intercettare la fine della stringa con il seguente codice:
Code:
String lettura="";
  while(Serial.available() && (char)Serial.read() !=';' ){
    lettura+=(char)Serial.read();
  }
  Serial.println(lettura);
Ma qualcosa va storto.. mi salta dei pezzi di stringa all'inizio e a volte non ferma il ciclo e le stringhe si concatenano !
639  International / Generale / Re: Serial.read() di stringhe on: July 30, 2011, 04:42:16 am
Prova una cosa del genere:

Code:
Serial.begin(9600); //inizializzazione della comunicazione seriale
String testo = ""; //creazione di una stringa vuota

while ( Serial.available() )
{
      testo = testo + (char)Serial.read(); //concatenazione del nuovo carattere con i precedenti
}

La trasmissione seriale comunica ad ogni lettura un carattere, e quindi un char, ma se vengono inviati più caratteri, questi rimarranno nel buffer di trasmissione, e quindi la connessione seriale sarà ancora disponibile dopo l'inivio del primo carattere, questo significa che ad una seconda lettura da seriale, otterrai il secondo carattere da concatenare al primo nella stringa del testo... e così via fino all'ultimo...

seppe
Grande, funziona smiley-grin
Una cosa.. non c'è modo di aprire il monitor seriale mentre lo sta usando il python vero ?
640  International / Generale / Re: salvare stringa on: July 29, 2011, 02:13:47 pm
A quanto vedo abbiamo postato un post molto simile a distanza di due minuti(perdonatemi, ma non me ne ero accorto).
Teniamoci in contatto smiley-grin
641  International / Generale / Serial.read() di stringhe on: July 29, 2011, 01:56:39 pm
Salva a tutti !
Ho bisogno di leggere dei valori di due joystick che invio tramite seriale. Siccome di conseguenza ho 4 valori(xleft,yleft,xright,yright)
devo riuscire a riconoscere a quale asse appartiene il valore.
Es.:
xl:250
yr:30
Come faccio quindi a leggere le stringhe dal seriale e successivamente confrontarle conseiderando che la lunghezza è variabile ?
Ho pensato ad un codice del genere che potrei memorizzare ogni carattere in un array ma come dicevo prima la lunghezza è variabile.
Consigli ?
642  International / Generale / Re: serial.readline Python on: July 23, 2011, 02:31:46 am
Non potresti fare:
Code:
Serial.println(analogRead(A0));
? Così \n te lo mette in automatico.
E' quello che facevo ma mi leggeva anche un carattere sconosciuto indicato con un "quadrato"
643  International / Generale / Re: serial.readline Python on: July 22, 2011, 09:09:36 am
Tuttavia non usando da tempo python ho un ricordo vago della classe Serial, mi pare che readline legge una linea, quanto è lunga credo dipenda dal carattere di fine riga "\n" sempre che da arduino tu lo spedisca.
E infatti non lo spedivo, abituato con il vb non ho pensato a questi caratteri di escape(si chiamano così ?).
Effettivamente adesso i valori sono "puliti" cioè senza quadrati accanto smiley-grin
Ho una fotocellula sul A0 con dovuta resisteza tra gnd e pin e usando questo codice il problema rimane comunque lo stesso..è come se non aggiornasse.
Code:
void setup(){
  Serial.begin(9600);
}
void loop(){
   Serial.print(analogRead(A0));
   Serial.print("\n");
}
In poche parole metto il dito sulla fotocellula prima che il python printi i valori sulla shell e,una volta partita, i valori sono intorno al 100 come dovrebbero. ma quando lo tolgo il dito i valori sono comunque quelli, variano di 2-3 numeri in più o in meno a caso..

Una cosa che ho notato è che il led tx dopo un po' si spegne durante la trasmissione..
644  International / Generale / Re: serial.readline Python on: July 20, 2011, 04:32:14 am
Se scrive come un quadrato o un accento potrebbe anche essere solo un errore sul settaggio delle velocita' tra la parte che scrive e quella che legge. Se non risolvi nel pomeriggio questa sera ti posso passare un po' di codice che uso di solito io
Aspetto te allora, grazie in anticipo smiley-grin
645  International / Generale / Re: serial.readline Python on: July 19, 2011, 08:12:04 am
scusatemi,il ser.close mi dev'essere scappato nella formattazione del codice, nel codice originale è fuori dall'iterazione.
In ogni caso anche passando i valori in decimale non mi cambia niente.
Ultima cosa: se vuoi sviluppare per Arduino (e ricevere aiuto), continua ad usare Python.
VB.Net produce programmi compatibili solo con Windows e tanti qui usano OSX o Linux smiley-wink
Esatto, visto che ho una live di macubuntu che voglio installare definitivamente mi era sorto questo problema smiley-grin
Pages: 1 ... 41 42 [43] 44 45 ... 49