Show Posts
Pages: [1] 2 3 ... 47
1  International / Software / Re: con un encoder scrivere 3 variabili diverse on: January 16, 2014, 03:52:36 pm
Vi ringrazio tutti tantissimo, mi scuso se ieri non ho risposto.
Ieri sera tardi ho letto i vostri post, ho provato le programmazioni postate..
Non funzionano  smiley-confuse

Usando questo:
Code:
const int pulsante = 8;    // Piedino dove collego il pulsante

int VariabileCheVoglioIncrementare = 0;
unsigned long LetturaAttuale; // Variabile che continua a incrementarsi a ogni ciclo di loop
unsigned long PrecedenteLettura;  // verificare se da blocco per overflow
unsigned long TempoPressionePulsante = 1000;    // Tempo di attesa per pulsante premuto(lo devo tener premuto 1000 millisecondi ovvero 1 secondo)

void setup() {
  pinMode(pulsante, INPUT); /// modo del piedino dove ho collegato il pulsante (ingresso)
  Serial.begin(9600); // avvio la seriale per poter vedere sul monitor se il programma funziona
}

void loop() {
  LetturaAttuale=millis();
  if(digitalRead(pulsante)== HIGH){ //se premo il pulsante dell'encoder eseguo altro if(LOW perche' io ho i comuni dell'encoder collegato a massa)
   if(LetturaAttuale>PrecedenteLettura+TempoPressionePulsante){
      VariabileCheVoglioIncrementare++;
      Serial.println(VariabileCheVoglioIncrementare);
      PrecedenteLettura=millis();
    }
  }  
}

Alla prima pressione dello switch il conteggio inizia e prosegue all'infinito... non si ferma mai.
Un mio amico programmatore mi ha dato un consiglio "volante" mi ha detto di usare un modulo..
Max

beh...   questo e ovvio     smiley-cry  se non metti te delle "briglie"    al pulsante premuto  continua a leggerlo premuto  e la velocita del micro e velocissima  rispetto a premere il pulsante con la mano  

questo che segue e un piccolo pezzo di codice che sto usando in un "progettino"

puls_encoder (e anche  conta_impulsi_pulsante)  e una variabile byte  e che parte con zero nel setup   byte puls_encoder = 0
e come "vedi"  non mi affido alla digitalRead  per incrementare   ma al cambiamento di stato di  puls_encoder == 1

 
 if (digitalRead (7)== LOW) puls_encoder = 1;  
 if (puls_encoder == 1) conta_impulsi_pulsante = conta_impulsi_pulsante +1,  puls_encoder=0,  delay (300);

if (conta_impulsi_pulsante  > 3)  conta_impulsi_pulsante  = 0 ;  // riga aggiunta per te

(ovviamente il "mio" pin 7   e messo "alto"  col pull up interno   e premendo il pulsante  lo metto a massa con una resistenza
2  International / Software / Re: con un encoder scrivere 3 variabili diverse on: January 14, 2014, 03:02:11 pm
Allora stò perdendo il filo, mi sembra che il problema sia assegnare un valore a pulsante, quindi:
Premesso che ci vuole un antirimbalzo ( software o elettrico),  se premo il pulsante vado in while (mi stoppa fino a quando e premuto) per non leggerlo migliaia di volte, faccio pulsante++ e poi torno a verificare se il pulsante è premuto.
Poi se pulsante > 3 pulsante ==3 e viceversa se < 1 pulsante ==1 >3 pulsante==1 .

Grazie.

c'è  molta differenza  tra mettere un uguale  e metterne due   smiley-twist
3  International / Software / Re: con un encoder scrivere 3 variabili diverse on: January 14, 2014, 01:37:41 am
Prima di tutto vi ringrazio per le numerose risposte ed attenzioni al mio problema.

Non per demoralizzarti o darti contro memedesimo ma hai scelto una delle cose complicata per iniziare...
l'encoder a quadratura e' oggetto ancor oggi di numerosi dibattiti....
Forse non sai che:
l'encoder da 4 impulsi a scatto.
l'encoder per gestirlo bene e che sia reattivo devi per forza di cose usare DUE IRQ, con un IRQ va gia' meglio ma....
senza IRQ vai a caso....
per capirci....:
tu fai un giro orario e conta 100 avanti
poi fai un giro antiorario e conta 23 indietro
poi giri uno orario e conta 43 avanti
un'altro antiorario e conta 75 indietro
ma tu giravi un giro avanti e uno indietro preciso preciso....

Sinceramente non ho proprio capito bene ciò che intendi, comunque mi pare di aver capito che tu ti stia preoccupando del fatto della lettura dell'encoder, che si fa in quadratura, se è per quello mi affido a una libreria:
Code:
http://www.pjrc.com/teensy/td_libs_Encoder.html
funziona molto bene, se non l'avete mai usata ve la consiglio, certo non che ne abbia provate parecchie però mi pare molto ben fatta, se per gli ingressi uso i due pin di interrupt posso ruotare l'econder molto velocemente in ambedue i sensi e il valore di lettura risponde molto bene.

forse e più complicato  come vuoi fare tu  comunque tutto dipende dAL NUMERO di cifre delle variabili
prova con una (x) da 3 cifre all'inizio magari fai 3 byte (a b c)  uno per cifra   poi moltiplichi la prima di sinistra per   100  la seconda per 10  e la prima per 1
x = (a*100 + b*10 + c*1)
oppure puoi anche provare    di moltiplicare per 10 o per 100  il valore dell'encoder ogni volta che premi il pulsante
ti consiglio  questi sistemi perché sono gli unici che funzionano (secondo me )

Mi ero chiesto come poter far funzionare le 3 variabili (centinaia, decine, unita) con la formula: x = (a*100 + b*10 + c*1) hai risposto ad una domanda che avrei quasi sicuramente posto tra qualche giorno, ti ringrazio  smiley-wink

Attualmente il mio problema forse non l'ho spiegato bene, ci riprovo:
Devo spostare il cursore sull'LCD, e ruotando l'encoder devo variare ad esempio una variabile A, successivamente alla pressione dello switch sull'encoder il cursore si deve portare nella posizione della variabile B e ruotando l'encoder devo variare il valore di B lasciando inalterato il valore di A.
Prima di riscrivere ed editare tutto il programma ho pensato bene di fare delle prove su questo funzionamento, infatti, gli ultimi sketch che ho postato in linea teorica dovrebbero contare le pressioni dello switch dell'encoder e scriverle su LCD in modo tale che io possa controllare l'avvenuto cambiamento della variabile (numero di pressioni dello switch) fatto cio ho continuato ponendo un limite alla numerazione, nel senso che il numero delle pressioni dello switch deve essere sempre un numero compreso tra 1 e 3, infatti, nell'ultimo sketch (quello del post editato) nel void loop() c'è un  if (pos==4) {  pos = 1; } che secondo logica dovrebbe riportare la variabile "pos" ad un valore di 1 nel caso in cui gli venga attribuito un valore di 4.

Qui è l'inghippo, dove sbaglio? Come fareste voi? Non riesco a programmare una funzione che mi "sposti" la lettura dell'encoder da una variabile all'altra, nel caso in cui venga premuto lo switch..

Il pulsante dell encoder è un semplice pulsante, lasciano stare l encoder, quello viene dopo, lui per ora deve fare in modo di selezionare le 3 variabili.
Fai le prove con un pulsante normale, e fai anche il debounce,
Quando avrai risolto questa cosa, cioe ptemendo il pulsante fai 1.2.3, e ritorni ad 1  solo dopo integra la parte encoder

Esatto, attualmente sto cercando di creare la sequenza 1-2-3 ma non ci riesco..
Quando premo sullo switch il valore non cambia subito, ci mette un pò.. come se l'istruzione da me fornita fosse difficoltosa da elaborare..
Mi aiuti?

Max

premesso che l'invio della scrittura dati al display sia nel loop e che c'è un refresh  senza troppi ritardi bastano 3 if

if (pulsante==1)  variabile_1  = lettura_encoder;
if (pulsante==2)  variabile_2  = lettura_encoder;
if (pulsante==3)  variabile_3  = lettura_encoder;
if (pulsante => 4)  pulsante  = 0;

 
4  International / Software / Re: SOS senza delay (torcia led) on: January 13, 2014, 04:49:22 pm
intendevo una cosa così 
http://forum.arduino.cc/index.php?topic=198388.msg1465282#msg1465282
5  International / Software / Re: con un encoder scrivere 3 variabili diverse on: January 13, 2014, 04:31:41 pm
Scusate, mentre avete postato ho fatto un edit del 6° post, se non l'avete notato ho scritto un altro sketch provando ad usare un interrupt, che non funziona per giunta...

mah..  mi sa che la vuoi fare troppo semplice  smiley-twist
che vuol dire 3 variabili ?  vuoi star li  a girare l'encoder 3/4 d'ora ?
IMHO  devi cambiare "strategia"  con es:  ad ogni premuta pulsante fai lampeggiare una sola cifra di una variabile e regoli solo quella  se bastano tre cifre   alla prima pressione regoli le unita  alla seconda, decine alla terza le centinaia e alla quarta pressione regoli la "barretta" del negativo,  
alla quinta pressione  regoli le unita della seconda variabile  etc...  

Vabbe per iniziare questo progettino ho deciso di iniziare a fare le cose semplici, già incontro parecchie difficoltà nel cambiare la posizione della scrittura scrittura di una lettura di un encoder figuriamoci cosa succederebbe se mi avventurassi direttamente in una cosa complessa come mi suggerisci, sono perfettamente d'accordo, prima o poi farò così come dici tu ma per il momento faccio un passetto alla volta altrimenti potrebbe sembrare che voglia la pappa pronta da qualcun altro senza metterci nemmeno un po di impegno.


forse e più complicato  come vuoi fare tu  comunque tutto dipende dAL NUMERO di cifre delle variabili

prova con una (x) da 3 cifre all'inizio magari fai 3 byte (a b c)  uno per cifra   poi moltiplichi la prima di sinistra per   100  la seconda per 10  e la prima per 1
x = (a*100 + b*10 + c*1)


oppure puoi anche provare    di moltiplicare per 10 o per 100  il valore dell'encoder ogni volta che premi il pulsante

ti consiglio  questi sistemi perché sono gli unici che funzionano (secondo me )
6  International / Software / Re: con un encoder scrivere 3 variabili diverse on: January 13, 2014, 03:17:10 pm
mah..  mi sa che la vuoi fare troppo semplice  smiley-twist
che vuol dire 3 variabili ?  vuoi star li  a girare l'encoder 3/4 d'ora ?
IMHO  devi cambiare "strategia"  con es:  ad ogni premuta pulsante fai lampeggiare una sola cifra di una variabile e regoli solo quella  se bastano tre cifre   alla prima pressione regoli le unita  alla seconda, decine alla terza le centinaia e alla quarta pressione regoli la "barretta" del negativo, 
alla quinta pressione  regoli le unita della seconda variabile  etc...   
7  International / Software / Re: SOS senza delay (torcia led) on: January 12, 2014, 04:06:39 pm
Svelato l'arcano. Grazie mille.
ma una domanda: in teoria l'attiny85 non viene mai scollegato dalla batteria quindi la funzione millis() va avanti per chi sa quanto. non rischia comunque di andare in overflow prima o poi? se si non é possibile azzerarla ad esempio quando vien epremuto il pulsante?

ps non sopporto nemmeno io la formattazione cosi approssimativa. ora che conosco questo strumento i miei sketch saranno molto piú ordinati

e perché devi continuare a farla andare avanti non te l'ha ordinato mica il dottore   smiley-twist  ogni volta che millis ()  arriva a un ora o un giorno l'azzeri  e tutto ricomincia   
8  International / Hardware / Re: affidabilità hardware on: January 12, 2014, 01:28:06 am
Vorrei realizzare un sensore di temperatura e di umidità con Arduino Ethernet. Dato che ho la necessità di lasciare accesso il dispositivo per parecchi mesi senza spegnerlo, l'hardware è affidabile?
Sono inesperto e vorrei che qualcuno che ha realizzato dispositivo in uso per periodi molto prolungati mi confermasse che l'hardware non crea problemi
tutto dipende da te,  
se lo metti in un contenitore a prova di bomba (waterproof)
 più qualche accorgimento per sopperire a qualche mancanza di alimentazione prolungata  
metti una riga di sofware  per azzerare millis() ogni settimana,   potrebbe  essere "eterno"
sicuramente se lo "parcheggi" in cima a un palo su una montagna dura fino al primo temporale  smiley-twist
9  International / Hardware / Re: Relè per controllare 220V (corrente di casa)? on: January 11, 2014, 03:05:55 pm
ok, puoi indicarmi quali caratteristiche deve avere?

P.S. ultimamente ho realizzato un circuito dove tramite un pin digitale controllo un transistor il quale controlla un Relè,  per questo relè passano 12V, devo mettere un diodo anche qui o vale solo per voltaggi alti?
il diodo lo metti sempre sulla bassa tersione  più o meno  vanno bene tutti, 
e se non lo metti non casca il mondo  ma di regola si mette,   piuttosto meglio scegliere relè di marca  se no una settimana e si "guastano"
10  International / Hardware / Re: Arduino uno su breadboard minimale con i2c on: January 10, 2014, 04:25:32 pm
Salve, vorrei realizzare un arduino uno minimale su breadboard , con questi requisiti:

1. collegabile in cascata mediante interfaccia I2C ad un arduino master.
2. in grado di gestire un motore passo passo (attraverso un driver L293D o UNL2003) ed un led rgb.

considerando questo progetto:
http://memeduinos.oodlesofmedia.com/2012/08/25/arduino-standalone-su-una-mini-breaboard/

per collegarlo al master mediante I2C e gestire il motore passo passo ed il led RGB bisogna aggiungere altra componentistica, oppure il progetto è autoconsistente ?

Link a qualche altro progetto del genere che soddisfi i requisiti sopra elencati ?

grazie 

ma poi il motore passo passo   come fai a sapere dove lo hai lasciato?  (come posizione intendo)
 (personalmente) non adopererò mai più stand alone  ma solo arduino nano (al massimo un clone)
il continuare a sostituire il chip e veramente orrendo   smiley-cry
11  International / Hardware / "piedinatura " arduino nano on: January 09, 2014, 08:28:57 am
volevo chiedere se l'arduino nano è fatto per essere inserito in uno zoccolo standard pe circuiti integrati
12  International / Hardware / Re: Display 7 segmenti 4 cifre anodo comune. on: January 07, 2014, 04:36:50 pm
mah per utilizzare transistor come interruttori  va bene qualsiasi tipo poi per quelle correnti  modeste tutti i transistor piccolini sono ok  smiley-cool
13  International / Software / Re: Ignorare temporaneamente un INPUT on: January 04, 2014, 01:17:25 pm
Ciao a tutti.
Sto provando a lavorare con i MAX7221 e due IR switches.
Cercavo di far accendere una fila di LED in una direzione quando attivo lo switch 1 e nell'altra quando attivo lo switch 2.
Sostanzialmente la cosa è semplice e in effetti funziona.
Mi sono incasinato (non sono una cima in programmazione, anzi sto proprio nei bassifondi) quando ho cercato il modo di dirgli di ignorare uno dei 2 switches nel caso in cui già stia eseguendo una istruzione.
Mi spiego meglio: lo sketch accende la fila di led in sequenza DX>SX se attivo davanti IR1, attende 10 sec e li spegne i fading. discorso analogo ma al contrario con IR2. Lo sketch usato è questo:

Code:
#include "LedControl.h"  //carico la libreria per gestire il MAX7221

const unsigned int accendi=250;  //creo una costante per il comando delay che accende i singoli LED
const unsigned int spegni=150;  //creo una costante per il comando delay che spegne i singoli LED
const unsigned int attesa=10000;  //creo una costante per il comando delay del timer LED
const unsigned int IR1=9;  //creo una costante per il pin 9 dove collego lo switch 1
const unsigned int IR2=10;  //creo una costante per il pin 10 dove collego lo switch 2
int IR1State = HIGH;  //definisco una variabile per memorizzare lo stato dello switch IR 1 che adesso è HIGH
int IR2State = HIGH;  //definisco una variabile per memorizzare lo stato dello switch IR 2 che adesso è HIGH

LedControl LC1=LedControl (13,11,12,1);  //creato controller con DataIn su 13 DataClock su 11 DataLoad su 12 e 1 solo MAX collegato

void setup() {
LC1.shutdown (0,false);  //se l'ometto il MAX rimane in powersafe e i LED non si accendono
LC1.setIntensity (0,10);  //se ometto il default è 1 su massimo 15 - setta l'intensità dei LED all'accensione
LC1.clearDisplay (0);  //all'accensione spengo tutti i LED sul MAX 1 - sennò sono accesi tutti
pinMode (IR1, INPUT);
pinMode (IR2, INPUT);

}

void loop() {

IR1State = digitalRead (IR1);  //legge lo stato dello switch IR1
IR2State = digitalRead (IR2);  //legge lo stato dello switch IR2

  //VALUTO LO STATO DEI DUE SWITCH IR - SE IR1 è STATO ATTIVATO E IR2 è HIGH, ALLORA VUOL DIRE CHE STO ANDANDO IN UNA DIREZIONE
if (IR1State == LOW && IR2State == HIGH) {

LC1.setIntensity (0,10);   //questa riga ho dovuto metterla altrimenti al secondo passaggio i LED sono ad intensità bassa
   //ACCENDE I LED DELLA PRIMA RIGA 
LC1.setLed (0,0,0,true);
delay(accendi);
LC1.setLed (0,0,1,true);
delay(accendi);
LC1.setLed (0,0,2,true);
delay(accendi);
LC1.setLed (0,0,3,true);
delay(accendi);
LC1.setLed (0,0,4,true);
delay(accendi);
LC1.setLed (0,0,5,true);
delay(accendi);
LC1.setLed (0,0,6,true);
delay(accendi);
LC1.setLed (0,0,7,true);

delay(attesa);
 
LC1.setIntensity (0,10);
delay(spegni);
LC1.setIntensity (0,9);
delay(spegni);
LC1.setIntensity (0,8);
delay(spegni);
LC1.setIntensity (0,7);
delay(spegni);
LC1.setIntensity (0,6);
delay(spegni);
LC1.setIntensity (0,5);
delay(spegni);
LC1.setIntensity (0,4);
delay(spegni);
LC1.setIntensity (0,3);
delay(spegni);
LC1.setIntensity (0,2);
delay(spegni);
LC1.setIntensity (0,1);
delay(spegni);
LC1.setIntensity (0,0);
delay(spegni);
LC1.clearDisplay (0);

  }  //fine condizione if
 
   //VALUTO LO STATO DEI DUE SWITCH IR - SE IR2 è STATO ATTIVATO E IR1 è HIGH, ALLORA VUOL DIRE CHE STO ANDANDO NELL'ALTRA DIREZIONE
if (IR2State == LOW && IR1State == HIGH){

LC1.setIntensity (0,10);  //questa riga ho dovuto metterla altrimenti al secondo passaggio i LED sono ad intensità bassa
  //ACCENDE I LED DELLA PRIMA RIGA 
LC1.setLed (0,0,7,true);
delay(accendi);
LC1.setLed (0,0,6,true);
delay(accendi);
LC1.setLed (0,0,5,true);
delay(accendi);
LC1.setLed (0,0,4,true);
delay(accendi);
LC1.setLed (0,0,3,true);
delay(accendi);
LC1.setLed (0,0,2,true);
delay(accendi);
LC1.setLed (0,0,1,true);
delay(accendi);
LC1.setLed (0,0,0,true);

delay(attesa);
 
LC1.setIntensity (0,10);
delay(spegni);
LC1.setIntensity (0,9);
delay(spegni);
LC1.setIntensity (0,8);
delay(spegni);
LC1.setIntensity (0,7);
delay(spegni);
LC1.setIntensity (0,6);
delay(spegni);
LC1.setIntensity (0,5);
delay(spegni);
LC1.setIntensity (0,4);
delay(spegni);
LC1.setIntensity (0,3);
delay(spegni);
LC1.setIntensity (0,2);
delay(spegni);
LC1.setIntensity (0,1);
delay(spegni);
LC1.setIntensity (0,0);
delay(spegni);
LC1.clearDisplay (0);

  }  //fine condizione if

} // questa è la fine del loop


Non riesco a fargli capire che se attivo IR1 e qualche secondo dopo IR2, deve ignorare IR2 finchè non ha terminato il suo ciclo.
Ho provato a creare delle variabili LastState per memorizzare gli stati high e low dei due switches e usare delle condizioni IF aggiuntive, ma non ha proprio più funzionato.
Mi suggerite una soluzione?
Grazie

guarda bene se... anche come hai inizializzato i pin di input   vanno bene lo stesso  di solito e pinmode ecc nel set up

e per il rest fai 2 o più variabili che partono con zero        es: byte mela = 0 

e alla fine del/dei cicli/lampeggio  li porti a 1   nell'if vi verifica dello swict  metti anche
  if (IR1State == LOW && IR2State == HIGH &&  mela ==1 )

cosi se mela non è stata portata a uno (alla fine di un lampeggio) non parte nulla
ricordati di riportare le variabili a zero  se no sempre a uno rimangono
 if (IR1State == LOW && IR2State == HIGH &&  mela ==1 ) (mela =0 ect....
14  International / Software / Re: trasmissione da serial monitor che succede esattamente? on: January 03, 2014, 05:10:31 pm
State facendo un gran casino e dicendo un mucchio di cazz..e  smiley-lol smiley-lol smiley-lol
LEGGETEVELI I REFERENCE !!! ... "Serial.print() : Prints data to the serial port as human-readable ASCII text" e "..Serial.print(78) gives "78" .."
Guglielmo
Edit : Nid ... stai facendo una gran confusione ... quella che manda i dati in binario è la Serial.write()

Verissimo, scusate, soprattutto @giga.  Ha ragione Guglielmo. Per pulizia del thread ho tolto i miei post erronei. Sorry.  smiley-red
mah..  di solito  ci sono almeno 2 modi per raggiungere lo stesso scopo  non vedo (fino a che non provo)  il motivo perché  non dovrebbe funzionare  peccato che non ho un altro arduino  smiley-cry  (ma ancora per poco)  

se prendo il numero  123456  faccio modulo 10  e separo le cifre  e le associo a variabili byte   aggiungo 48 (che nel codice ricevente viene sottratto 48)   e  poi serial.print  alle variabili     quache accolrgimento/delay per evitare la trasmissione senza sosta  .....    chi prova?  smiley-wink

codice ricevente
Code:
 long vet[9] = {-2, -2, -2, -2, -2, -2, -2, -2, -2 };
long cont = 0;
long serialx = 0;

void setup()
{
  // start serial port at 9600 bps:
  Serial.begin(9600);
}

void loop()
{
  while (Serial.available() > 0)
  {
    vet[cont] = Serial.read()-48;   //trasformo da codice ascii a numero utilizzabile
    cont++;
    delay(60);
  }
  
   if (vet[0] < -2 || vet[1] < -2 || vet[2] < -2 || vet[3] < -2 || vet[4] < -2 || vet[5] < -2 || vet[6] < -2 || vet[7] < -2 || vet[8] < -2)
   Serial.println(" ATTENZIONE DEVI  INSERIRE SOLO NUMERI DA 1 A 999999999  ");

   if (vet[0] > 9 || vet[1] > 9 || vet[2] > 9 || vet[3] > 9 || vet[4] > 9 || vet[5] > 9 || vet[6] > 9 || vet[7] > 9 || vet[8] > 9)
   Serial.println("   ATTENZIONE DEVI  INSERIRE SOLO NUMERI DA 1 A 999999999  ");
  


  if(cont > 0) //se ho letto qualcosa fai la conversione altrimenti niente
  {
    cont = 0;
    
    
      if (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 &&  vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2  && vet[1] ==  -2 )
                                                                                // in tutti gli if a seguire viene verificato se i numeri
    {                                                                         // piu a sx sono tutti a zero  e vengono usati quelli piu a destra
      serialx = vet[0];                                                           // cosi non ciene visualizzato il loro stato = 0
    }
    else
    
    if (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2 ) //  
    {
      serialx = (vet[0]* 10 +   vet[1]    );
    }
    else
    if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 &&  vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2 ) //
    {
      serialx = (vet[0] * 100 + vet[1]* 10+ vet[2]);
    }
    else
    if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2  && vet[4] ==  -2  )
    {
      serialx = (vet[0] * 1000 + vet[1] * 100 + vet[2]* 10 + vet[3]);  
      } else
      if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2   )
      {
      serialx = (vet[0] * 10000 + vet[1] * 1000 + vet[2]* 100 + vet[3]* 10 + vet[4]);  
      
      } else
       if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 )
      {
      serialx = (vet[0] * 100000 + vet[1] * 10000 + vet[2]* 1000 + vet[3]* 100 + vet[4]* 10 + vet[5]);  
      
      } else
      
        if  (vet[8] == -2 && vet[7] == -2 )
      {
      serialx = (vet[0] * 1000000 + vet[1] * 100000 + vet[2]* 10000 + vet[3]* 1000 + vet[4]* 100 + vet[5]* 10+ vet[6]);  
      
      } else  
      
          if  (vet[8] == -2 )
      {
      serialx = (vet[0] * 10000000 + vet[1] * 1000000 + vet[2]* 100000 + vet[3]* 10000 + vet[4]* 1000 + vet[5]* 100 + vet[6]* 10+ vet[6]);  
      
      } else
      
      
      
 serialx = (vet[0] * 100000000 + vet[1] * 10000000 + vet[2]* 1000000 + vet[3]* 100000 + vet[4]* 10000 + vet[5]* 1000 + vet[6]* 100 + vet[7] * 10 + vet[8]);
      
      
 if (vet[0] < -2 || vet[1] < -2 || vet[2] < -2 || vet[3] < -2 || vet[4] < -2 || vet[5] < -2 || vet[6] < -2 || vet[7] < -2 || vet[8] < -2 ) serialx = 0;
 if (vet[0] > 9 || vet[1] > 9 || vet[2] > 9 || vet[3] > 9 || vet[4] > 9 || vet[5] > 9 || vet[6] > 9 || vet[7] > 9 || vet[8] > 9)  serialx = 0;
 
 if (serialx == -2 || serialx== -1) serialx=0; //messo per evitare di prendere il punto come valido -2   e lo / -1
          
     Serial.println( vet[0]);
     Serial.println( vet[1]);
     Serial.println( vet[2]);
     Serial.println( vet[3]);
     Serial.println( vet[4]);
     Serial.println( vet[5]);
     Serial.println( vet[6]);
     Serial.println( vet[7]);
     Serial.println( vet[8]);
    
 if (vet[0] >= -2 && vet[1]  >= -2 &&  vet[2]  >= -2 &&  vet[3] >= -2 && vet[4] >= -2 && vet[5] >= -2 && vet[6] >= -2 && vet[7] >= -2 && vet[8] >= -2 &&
  vet[0] <= 9 && vet[1] <= 9 &&  vet[2] <= 9 &&  vet[3] <= 9 &&  vet[4] <= 9 &&  vet[5] <= 9 &&  vet[6] <= 9 &&  vet[7] <= 9 &&  vet[8] <= 9 )
     Serial.println(" NUMERO INSERITO  "),   Serial.println(serialx);

   if (serialx == 0)   Serial.println(" REINSERISCI UN  NUMERO DA 1 A 999999999  ")  ;
          
    

    
    vet[0] = -2;  
    vet[1] = -2;
    vet[2] = -2;
    vet[3] = -2;
    vet[4] = -2;
    vet[5] = -2;
    vet[6] = -2;
    vet[7] = -2;
    vet[8] = -2;      
  }

}  
15  International / Software / Re: trasmissione da serial monitor che succede esattamente? on: January 02, 2014, 10:53:53 am
vediamo "se ci siamo"   smiley-cool
K  =  12345 ;
Serial.parseInt( K );    equivale a.....  serial.print ( "12345" )   

e se K è negativo posso trasformarlo in positivo e aggiungergli  2 milioni,

e nel ricevente
if (numero_ricevuto > 1000000)  numero_ricevuto = numero_ricevuto - 2000000 (*-1);
Pages: [1] 2 3 ... 47