Hibás működés!

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
kukuri
Bitmanipulátor
Hozzászólások: 132
Csatlakozott: 2014. január 20. hétfő, 12:50

Hibás működés!

Hozzászólás Szerző: kukuri »

Üdvözletem!

Egy Hall jeladós folyadék áramlás mérőt akarok beüzemelni.
Az elv az lenne hogy amikor érzékeli a szenzor jelét akkor rögzíti az időt.
Az utolsó két időrögzítést kivonja egymásból és megvan mennyi idő telik el két jel érzékelése között.
A mérés pontosítása miatt az utolsó 5 mérést átlagolom és ezt az eredményt dolgozom fel.
Egy kijelzőn kiíratom a sebességet. Jelenleg a két jel közti időt de ezt át lehet alakítani sebességre.
Hogy ne villogjon a kijelző és olvasható legyen a sebesség, ezért a kijelzőt csak időnként frissítem.
Ha az átlag számításnál a számlálót nullázom akkor a kijelző megjelenítésnél nem működik a késleltetés.
Nem látom mi köze van a kettőnek egymáshoz.
A kódban egy shift regiszter is van ahol az értékeket 8 leden kijelzem.

Kód: Egész kijelölése

//Pin connected to ST_CP of 74HC595
int latchPin = 23;
//Pin connected to SH_CP of 74HC595
int clockPin = 22;
////Pin connected to DS of 74HC595
int dataPin = 24;
int kimenet[8]={0};//Shift regiszterrel kiírt adatok tárolása
String adat; 
int karakter;
int modul=8; //Shift regiszter modulok száma
//A beolvasott HEXA értékek átkonvertálása
int hallPin = 40; //Hall érzékelő
int hall_count =0;
int hall_new =0;
int hall_old =0;
int szamlalo=0;
long starttime;
long endtime;
long time; 
long kiirt; 
long sebesseg[5]={0};
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
 
void setup()
{
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(hallPin, INPUT);
//  Serial.begin(115200);
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop()
{
  lcd.display();
  hall_new=digitalRead(hallPin);
  if(hall_new==HIGH && hall_old==LOW)
  {
    endtime=starttime;
    starttime = micros(); 
    hall_count++;
  }
  time=starttime-endtime;
  hall_old=hall_new;
    digitalWrite(latchPin, LOW);
    digitalWrite(13, LOW);
    time=time;
    if(szamlalo<6)
    {
      szamlalo++;
      sebesseg[szamlalo]=time;
      if(szamlalo==6)
      {
        szamlalo=0;
      }
    }
    time=(sebesseg[0]+sebesseg[1]+sebesseg[2]+sebesseg[3]+sebesseg[4])/5;
    if(time>0)
    {
      kimenet[0]=time;
    }
    if(micros()-starttime>1000000)
    {
      kimenet[0]=0;
    }
    for(int i=modul-1;i>=0;i--)
    {
      shiftOut(dataPin, clockPin, MSBFIRST, kimenet[i]);  
    }

    if((micros()-kiirt)>1000000)
    {
      lcd.clear();
      lcd.print(kimenet[0]);
      lcd.print(" ");
      lcd.print(micros());
      kiirt = micros(); 
    }
    digitalWrite(latchPin, HIGH);
    digitalWrite(13, HIGH);
}
kukuri
Bitmanipulátor
Hozzászólások: 132
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: Hibás működés!

Hozzászólás Szerző: kukuri »

Most átírtam úgy hogy csak minden 100. ciklusra írjon ki. Így működik.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Hibás működés!

Hozzászólás Szerző: Robert »

Az egyes feladatokra időt kell hagyni. Pl. a LCD kezelés elég időigényes feladat....
Válasz küldése