Witam
Mam pytanie odnosnie zapisywania danych do tablicy. Jak wiecie zaprogramowany czujnik odbiera sygnaly ktorych wartosci mozemy wyswietlic w Serial Moniotor. Chcialbym jednak aby wyniki byly zapisywane do tablicy, z tego wzgledu ze chcialbym z nich korzystac w nastepnej funkcji. Czy ktos ma pomysl jak tego dokonac? podam kod ktory wyswietla wyniki bez tablicy
Kod:
#define Trig A0
#define Echo A1
//#define Led1 A7
//#define Led2 A6
unsigned long duration;
float distance;
void setup()
{
Serial.begin(9600);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
//pinMode(Led1,OUTPUT);
//pinMode(Led2, OUTPUT);
//digitalWrite(Led2,HIGH);
//digitalWrite(Led1,LOW);
}
/*
float measure()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
duration = pulseIn(Echo,HIGH);
distance = duration/58.00;
/*if (distance < 10.00)
{
digitalWrite(Led1,HIGH);
digitalWrite(Led2,LOW);
}
}*/
void loop()
{
digitalWrite(Led2,HIGH);
digitalWrite(Led1,LOW);
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
duration = pulseIn(Echo,HIGH);
float distance = duration/58.00;
/* if (distance < 10.00)
{
digitalWrite(Led1,HIGH);
digitalWrite(Led2,LOW);
}*/
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
delay(500);
}
Kurcze nie zdążę do kina... jak wrócę to napiszę więcej. W każdym da się utworzyć w pamięci tablicę typu float o max 596 elementach (praktyka). Powyżej tej wielkości kompilator zastrajkuje - za mało pamięci.
To tyle. Wieczorkiem napisze dlaczego tak jest i jak to ugryźć.
Pozdrawiam
Super, będę czekał na podpowiedzi. Z tego co sie dowiedziałem międzyczasie to trzeba by było z EEPROM, jest gotowy sketch zapisu do EEPROM ale z tymi tablicami to nie wychodzi.
Pozdrawiam
Da się i do EEPROM zapisać, tyle że tam zapisuje się kolejne bajty, zaczynając od komórki pamięci o adresie 0. Mała trudność polega na tym, że jak pisałem wcześniej liczba typu float zajmuje w pamięci 4 bajty, zatem jej poszczególne bity (po 8) trzeba dzielić i kolejno zapisywać w EEPROM. Mało wydajna metoda niestety. Może napisz do czego potrzebne Ci są te tablice, co chciałbyś z tymi danymi potem robić... i może wtedy należałoby wymyślić coś max. prostego....Najtrudniej jest zakumać co autor ma na myśli :-)
Pozdrawiam
Zgadza się, nie ma to jak zrozumieć autora mysli. Potrzebna mi byla tablica by zbierac pomiary i z opoznieniem 200ms maksymalnie wysylac max wartosc, a pozniej z kolei dzieki tym wartosciom max mogl sterowac innym urzadzeniem. Mysle ze poradzilem sobie z tym.
Dzieki za odpwiedz
Pozdrawiam
Witam
No nie bardzo rozumiem to zbieranie pomiarów z tym max opóźnieniem 200ms skoro w kodzie pozwalasz sobie na delay(500)... ale spoko.
Skoro chcesz z np 1000 prób pobrać max. wartość to jaki problem użyć tylko 2 zmiennych i w każdej próbie sprawdzać:
Kod:
float x, max=0;
for(int i=0;i<1000;i++)
{
// jakiś tam pomiar - tu musisz coś dać od siebie :-) np x=analogRead(0);
if(x>max) max=x;
}
Pozdro
dolaczony kod to kod pokazowy z opoznieniem widzialnym dla oka, a chodzilo o to by robic pomiar1....gdy wartosci zaczna byc wieksze od wartosci z pomiaru1 zaczac nowy pomiar2. Gdy wartosci zmaleja zakonczyc pomiar2 i wrocic do poczatku wykonywania pomiaru2 i dokonac na nich pewnych obliczen.
Witam
Kurcze co drugi tu robi co najmniej bombę atomową, wszystko takie utajnione :-) Opiszcie dokładnie na czym pracujecie i co chcielibyście osiągnąć a macie z tym problemy. Zawsze trzeba od was wszystko wyciągać, krok po kroku?
Twój przypadek - chcesz robić jakiś pomiar, ale jego wynik poddawać dalszej obróbce dopiero wtedy gdy trend przestanie rosnąć lub maleć, TAK?
Jeśli o to dokładnie chodzi to rzeczywiście potrzebujesz tablicy z wynikami. Tylko pytanie: Ile ostatnich pomiarów wystarczy aby określić trend - rosnący czy malejący? Bo może nie trzeba aż tak wielu obliczeń.
Może wystarczy do Twoich obliczeń np. wiedza. z np. 5-ciu kolejnych pomiarów?
jeśli np:
1) każdy następnik z 5-ciu ost. pomiarów jest większy od poprzednika -> trend rosnący
2) każdy następnik z 5-ciu ost. pomiarów jest mniejszy od poprzednika -> trend malejący
3) Jeśli przypadek 1 lub 2 nie zachodzi - to wybierz z tych 5-ciu MIN lub MAX i rób obliczenia
Te 3 punkty to może być algorytm którego potrzebujesz.
Pozdrawiam
No nie koniecznie bombe ale czasem ktos ma pomysl na cos i nie moze zdradzic calosci projektu tylko ewentualnie kawalek kodu tak by ktos nie wykorzystal tego..wiem ze maloprawdopodobne bo teraz juz jest wszystko hehe..
A wracajac do tematu...
Mam funkcje ktora w tablicy x elementowej wyswietla mi na okraglo pomiary i zwraca wartosc stanu wysokiego i niekiego jak w warunku:
if(tab[i]<10.00)
{
canL=tab[i];
Serial.println(" CAN LOW ");
}
else
{
canH=tab[i];
Serial.println(" CAN HIGH ");
}
}
Pytanie, jak zwrocic ilosc wystapien stanow wysokich i niskich w tej x elementowej tablicy. zazwyczaj uzywa sie funkcji tab.length no ale arduino nie korzysta z niej. zrobilem funkcje szukajaca po tablicy:
int canL=0;
for( i=0;i<x;i++)
{
if(tab[i]<10.00)
{
canL=tab[i]
canL++;
}
Serial.print(canL);
Ale cos nie dokonca to dobrze wyszukuje..
(24-01-2016, 00:39)f1rew4ll napisał(a): [ -> ]No nie koniecznie bombe ale czasem ktos ma pomysl na cos i nie moze zdradzic calosci projektu tylko ewentualnie kawalek kodu tak by ktos nie wykorzystal tego..wiem ze maloprawdopodobne bo teraz juz jest wszystko hehe..
A wracajac do tematu...
Mam funkcje ktora w tablicy x elementowej wyswietla mi na okraglo pomiary i zwraca wartosc stanu wysokiego i niekiego jak w warunku:
if(tab[i]<10.00)
{
canL=tab[i];
Serial.println(" CAN LOW ");
}
else
{
canH=tab[i];
Serial.println(" CAN HIGH ");
}
}
Pytanie, jak zwrocic ilosc wystapien stanow wysokich i niskich w tej x elementowej tablicy. zazwyczaj uzywa sie funkcji tab.length no ale arduino nie korzysta z niej. zrobilem funkcje szukajaca po tablicy:
int canL=0;
for( i=0;i<x;i++)
{
if(tab[i]<10.00)
{
canL=tab[i]
canL++;
}
Serial.print(canL);
Ale cos nie dokonca to dobrze wyszukuje..
Cześć
Kurcze w zmiennej licznik na przykład:
Kod:
int licznik=0;
for( i=0;i<x;i++)
{
if(tab[i]<10.00)
{
licznik ++;
}
Serial.print(licznik);
Musisz jeszcze trochę ćwiczyć. Polecam Arduino Reference na arduino.cc
Pozdrawiam