Pages: 1 2 [3] 4 5   Go Down
Author Topic: Contachilometri  (Read 5300 times)
0 Members and 1 Guest are viewing this topic.
Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino <3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In effetti non ci avevo pensato al cambio di stato! più tardi provo smiley-wink
Grazie infinite!

E se montassi 2 magneti a 180° e dimezzassi il tempo di campionamento?
Però a questo punto non misurerebbe velocità basse, poichè se il magnete non passa entro mezzo secondo non c'è calcolo... mmm  smiley-grin

Ho provato, ma sembra contare solo il primo impulso...
c'è qualcosa che si incarta... faccio un po di prove e vi faccio sapere.
Luca

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int sensorePin = 8;
int sensorePinOld = LOW;
int abba;
int giri = 0;

void setup()
{
  pinMode(sensorePin,INPUT);
  lcd.begin(16, 2);
  lcd.print("    -DUCATI-");
  delay(1000);
  lcd.clear();
}


void loop()
{
  abba = digitalRead(sensorePin);
  if (abba == HIGH && sensorePinOld == LOW)
  {
    sensorePinOld = abba;
    giri++;
  }
  lcd.setCursor(0, 0);
  lcd.print("Speed");
  lcd.setCursor(0, 1);
  lcd.print(giri);
  lcd.print(" Km/h ");
  delay (5);
}
« Last Edit: June 22, 2010, 05:07:25 am by Locke » Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21647
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se metti 2 magneti e dimezzi il tempo la risoluzione resta uguale.
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Anche tu hai ragione  ;D
Allora o 2 magneti e 1 secondo di campionamento...
O 1 magnete e 0.5 secondo di campionamento...
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21647
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, 2 magneti e 1 secondo non corrispondono come segnale a 1 magnete e 0,5 secondi ma a 1 magnete e 2 secondi.
Ciao Uwe
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora 2 magneti e 0.5secondi?  smiley

Ho riprovato il programma, ma conta solo il primo cambio di stato, devo rivedere il codice, in serata posto i risultati.
Buona giornata e grazie a tutti per il supporto smiley-wink
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boh ho cambiato un po di volte il codice ma continua a contare solo il primo impulso... i need help  smiley
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 266
Posts: 21647
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

devi controllare anche il cambio di stato da HIGH a LOW e in quel momento mettere a LOW la variabile che ti tiene memorizzato lo stato precedente.

 devi aggiungere a

if (abba == HIGH && sensorePinOld == LOW)
 {
   sensorePinOld = abba;
   giri++;

 }

anche:

 if (abba == LOW && sensorePinOld == HIGH)
 {
   sensorePinOld = abba;
 }

Ciao  Uwe
« Last Edit: June 24, 2010, 06:54:14 am by uwefed » Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

void loop()
{
  abba = digitalRead(sensorePin);
  if (abba == HIGH && sensorePinOld == LOW)
  {
    sensorePinOld = abba;
    giri++;
  }
  
  if (abba == LOW && sensorePinOld == HIGH)
{
  sensorePinOld = abba;
}

  lcd.setCursor(0, 0);
  lcd.print("Speed");
  lcd.setCursor(0, 1);
  lcd.print(giri);
  lcd.print(" Km/h ");
}


grandissmo smiley-wink sembra funzionare ma resta il problema che arduino non aggiorna in tempo reale lo stato dell'input, quando va alto conta +1 ma poi è come se mantenesse il livello hight e quindi somma +1 per qualche istante, e vengono fuori numeri sballati... provo a pasticcarlo un po... oppure provo con l'analogread...
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Così conta perfetto  smiley-wink ma se aumento la frequenza degli impulsi non li conta... come se non li vedesse...

void loop()
{
  abba = analogRead(sensorePin);
  if (abba > 900 && sensorePinOld < 500)
  {
    sensorePinOld = abba;
    giri++;
  }
  
  if (abba < 500 && sensorePinOld > 900)
{
  sensorePinOld = abba;
}

  lcd.setCursor(0, 0);
  lcd.print("Speed");
  lcd.setCursor(0, 1);
  lcd.print(giri);
  lcd.print(" Km/h ");
}
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

forse perché il tempo necessario ad eseguire il loop() è superiore alla distanza fra gli impulsi stessi.
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Misurando il tempo massimo è circa 1 secondo... occorre così tanto?  :smiley :-? smiley-sad
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 185
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

un secondo per fare un giro di loop() mi pare un'eternità: sono 16 MILIONI di colpi di clock!
fino a che frequenze riesci ad avere una lettura corretta?
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come ho già scritto smiley-wink circa ogni secondo riesco a fargli leggere l'impulso, meno di questa soglia non conta...
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la butto lì...
hai provato ad escludere dal sw tutto ciò che concerne l'lcd?
 la gestione del display ed il suo aggiornamento potrebbero introdurre ritardi.
dirotta l'output sulla seriale e vedi se ti legge anche a velocità più alte.
Logged

Milano Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino &lt;3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No niente... sempre come prima anche sola seriale...  :-[
Logged

Pages: 1 2 [3] 4 5   Go Up
Jump to: