problema micros() e 5V

ho due problemi:

  1. la funzione micros mi da troppi numeri e mi fa diventare matto c’è un modo per cancellare le prime 6 cifre??

  2. quando collego qualsisi cosa ad arduino all’uscita 5v questo si spegne in autmatico… cosa può essere??

1) fai il modulo 65536 e ottieni un numero a 16bit (2 Byte). http://arduino.cc/en/Reference/Modulo 2) cos é quela qualsiasi cosa che colleghi ai 5V Ciao Uwe

2) non lo sò perchè si spegneva... ho collegato la resistenza invece che all'uscita 5v a l'entrata a0 e adesso funziona...

1) cmq come funziona il comando%???

io ho una varibile cio metto % 5 e mi cancella i primi 5 numeri??

ho letto ma non ho capito tanto... non sono molto esperto nella programmazione sorry :(

l'arduino si spenge se il carico che attacchi ai 5v consuma troppo (o lo mandi in corto) i 5 v di uscita dell'arduino non sono fatti per pilotare grandi cose, se nonpiccoli relè o transistor o led...se cerchi di mandarci anche un motorino o qualsiasi altra cosa il consumo è troppo elevato ed è come se fosse in corto

"%" non è un comando ma un operatore aritmetico. Ti calcola il modulo di una divisione, ossia restituisce la distanza che un numero ha da un altro contenuto nell'insieme dei multipli del secondo operatore del modulo.

Per capire, se tu fai a=5%2 significa: metti in "a" la distanza tra 5 ed il multiplo di 2 più vicino. Il multiplo di 2 più vicino è 4, quindi l'operazione precedente diventa a=5-4=1 Il modulo è un'operazione molto utile perché serve per far ricadere un numero molto grande all'interno di un range più piccolo mantenendo invariate le corrispondenze fra i numeri.

http://it.wikipedia.org/wiki/Aritmetica_modulare

@leo72 spieghi molto complicato. @albyy911 Il modulo é praticamente il resto di una divisione: 21 /15 = 1 resto 6; 6 é 21 modulo 15

Ripeto: cosa avvevi attacato ad Arduino quando si spegneva? Ciao Uwe

uwefed: @leo72 spieghi molto complicato.

Dici? Ecco perché la moglie mi manda sempre a quel paese :D

uwefed: @leo72 spieghi molto complicato. @albyy911 Il modulo é praticamente il resto di una divisione: 21 /15 = 1 resto 6; 6 é 21 modulo 15

Ripeto: cosa avvevi attacato ad Arduino quando si spegneva? Ciao Uwe

avevo fatto uscire un cavo da 5V fatto passare attraverso una resistenza e attaccato ad un interruttore l'altro capo della resistenza messo a GND. l'uscita dell'interruttore portato ad A0.

cmq io ho un tempo che oscilla tra questiovalore:

4294967184 come faccio a togliere 429496_ _ _ _?? solo i valori?

cmq a me millis() non mi incomincia a contare da 0 ma da 4294967184 sapete percaso perchè??

albyy911: 4294967184 come faccio a togliere 429496_ _ _ _?? solo i valori?

4294967184/10000, dato che i numeri con cui stai lavorando non hanno la virgola, la parte decimale viene persa.

albyy911: cmq a me millis() non mi incomincia a contare da 0 ma da 4294967184 sapete percaso perchè??

millis parte da 0 appena alimenti l'arduino. posta il codice, magari stai errando qualcosa

Che valore di resistenza hai usato? Hai usato una veriabile del tipo unsigned long per memorizzare il valore di millis()? Ciao Uwe

albyy911:
4294967184 come faccio a togliere 429496_ _ _ _?? solo i valori?

Se da “4294967184” vuoi togliere il “7184” dividi per 10000
Se da “4294967184” vuoi togliere il “429496” fai il modulo 10000

Ciao Uwe

Oppure fa un semplicissimo AND a livello di bit, tagliando i primi 16 bit a sinistra.

unsigned long temp;
temp = numero & 0x0000FFFF;

In questo modo da un unsigned long di 4 byte solo i 2 byte a destra (cioè i 16 bit meno significativi) per un range di valori da 0 a 65535. Molto più veloce del modulo.

leo72: Oppure fa un semplicissimo AND a livello di bit, tagliando i primi 16 bit a sinistra.

unsigned long temp;
temp = numero & 0x0000FFFF;

In questo modo da un unsigned long di 4 byte solo i 2 byte a destra (cioè i 16 bit meno significativi) per un range di valori da 0 a 65535. Molto più veloce del modulo.

Leo io credevo che tutte le operazioni di bit funzionassero solo con cifre a 1 Byte. Mi sbaglio? Ciao Uwe

Vi metto lo sketch cosi vi evito tante domande.

#define SENSOR 0
unsigned long time = 0;
int val = 0;
unsigned long ptime = 0;
unsigned long calcolo = 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  val = analogRead(SENSOR);
  time = millis();
  
  if ( val >= 500 ){
    
    calcolo = ptime - time;
    Serial.println(calcolo);
    ptime = time;
  }
}

lol
ptime = 0
time > 0
ptime -time = errore di tipo! ottieni un numero negativo ma le variabili sono unsigned(senza segno)…
questo succederà sempre, perché time sarà sempre > di ptime, tranne quando millis() va in overflow, ma dato che lo fa ogni 60 giorni se non erro, per ora puoi fregartene.

quindi
calcolo = time-ptime;
e ottieni il tempo trascorso

kiss

uwefed: Leo io credevo che tutte le operazioni di bit funzionassero solo con cifre a 1 Byte. Mi sbaglio? Ciao Uwe

Puoi ruotare e/o operare con and/or a livello di bit anche su interi e long. Prova. Io l'ho fatto. Metti sull'Arduino un sketch tipo "0xFFFFAAAA & 0x0000FFFF" e stampa il risultato sulla seriale. Otterrai 0x0000AAAA (43690). (ovviamente dichiara le variabili unsigned, sia int che long, altrimenti succedono pastrocchi)