Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 30 lis 2024, o 08:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 3 gru 2014, o 19:33 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 76
Pomógł: 0

witam,
do mojego projektu na arduino użyłem dwóch transmiterów rf, tych tanich z ebaya,
i wszystko działa, dane są wysyłane i odbierane, tylko że można prze niego
wysyłać tylko dane String lub Char,

czy ktoś wie jak zamienić zmienną String spowrotem na float?
lub float na char - potem to wysłać przez transmiter i w odbiorniku
zamienić char na float?
przesyłam informacje o napięciu z wejść analogowych z jednego arduino
do drugiego, mój układ z transmiterem będzie miał zasilanie bateryjne,
bez połączenia kablem,

będę wdzięczny za pomoc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2014, o 19:41 
Offline
Użytkownik

Dołączył(a): 19 cze 2014
Posty: 247
Pomógł: 15

Nie używałem tej funkcji, ale służy do tego funkcja atof(). Tu masz jak ją obsługiwać: http://msdn.microsoft.com/pl-pl/library/hc25t012.aspx

_________________
http://elektropanel.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2014, o 22:04 
Offline
Użytkownik

Dołączył(a): 11 maja 2014
Posty: 59
Pomógł: 3

Napięcie mierzysz za pomocą ADC ?

Jeśli tak to wyślij wartość adc przez rf i zamień na napięcie dopiero w odbiorniku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2014, o 14:20 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Z tego co pamiętam to strtof, wyczaj działanie na http://www.cplusplus.com/reference/cstdlib/strtof/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 gru 2014, o 12:34 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 76
Pomógł: 0

michal98 napisał(a):
Napięcie mierzysz za pomocą ADC ?
tak, tak je mierzę

Jeśli tak to wyślij wartość adc przez rf i zamień na napięcie dopiero w odbiorniku.

nie da rady, ten string nie chce się zamienić na float w odbiorniku,
poza tym po przesłaniu danych ADC na odbiorniku widnieją one nie w pełnym zakresie,
zaczynają się od około 100 do 999, wyżej nic nie widać a poniżej 100 wyświetlają się cyfry
i litery

------------------------ [ Dodano po: kilkunastu sekundach ]

leonos2000 napisał(a):
Nie używałem tej funkcji, ale służy do tego funkcja atof(). Tu masz jak ją obsługiwać: http://msdn.microsoft.com/pl-pl/library/hc25t012.aspx

próbowałem atof(), nie działa mi w arduino IDE

------------------------ [ Dodano po: 1 minucie ]

kiclaw napisał(a):
Z tego co pamiętam to strtof, wyczaj działanie na http://www.cplusplus.com/reference/cstdlib/strtof/

strtof() też nie działa, też próbowałem

pomyślałem więc, żeby przesłać te dane z ADC w innej postaci, a więc podzielić kazdy wynik na 2,
wynik, który mnie interesuje jest napięciem z ADC więc analogRead()*(5.0/1023.0) i mam napięcie,
teraz wystarczy podzielić daną liczbę na 2 części, tą przed przecinkiem/kropką i dwucyfrową po,
mój pomiar nigdy nie będzie miał wyniku dwucyfrowego przed kropką, zresztę nie pozwala na to arduino
bo mierzy do 5.0, ale też nie mam takiej potrzeby, napięcie będę mierzył do 1.6-2.0V,
użyłem takiego rozwiązania żeby wyciągnąć dwie liczby z pomiaru napięcia

//************************to jest kod od strony transmitera
void loop(){
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);

//*****************************tutaj jest wyciąganie 2 liczb z wyniku napięcia float
if(voltage <= 0.99){firstnumber = 0;}
else if(voltage >= 1.00){firstnumber = 1;}
delay(50);
if(firstnumber == 0){secondnumber = voltage*100;}
else if(firstnumber == 1){secondnumber = (voltage-1.00)*100;}

//*********************************a tutaj podstawianie ich do stringa
int napięcie;

int a = firstnumber;
String napięcieA = napięcie + a;
Serial.println (napięcie1);

int b = secondnumber;
String napięcieB = napięcie + b;
Serial.println(napięcieB);

String calosc = napięcieA + napięcieB;
//Serial.println(calosc);


calosc.toCharArray(Msg,(calosc.length()+1));
for (int i = 0; i <= calosc.length(); i++) {
Serial.print(Msg[i]);


vw_send((uint8_t *)Msg, strlen(Msg));
vw_wait_tx();
}
//********************************

kiedy wysyłam te 2 liczby (będące odzwierciedleniem mojego wyniku napięcia) są one odczytywane przez odbiornik
i drugie arduino, i odpowiadają pomiarowi napięcie, a więc jak napięcie jest 0.98 to wynik tych dwóch liczb mam
0 i 98 a jak wynik napięcie jest 1.23 to liczby są 1 i 23 czyli działa,
jednakże powstają dwa problemy,
jeden taki, że liczby widać, jednak są one otoczone przez jakieś dodatkowe 'ogonki', inne znaki bliżej lub dalej od wyniku, który mnie
interesuje, próbowałem to wyczyścić, ale jak to robię od strony odbiornika to nawet jak proszę o wyświetlenie
w Serial.print jednej zmiennej to i tak podaje cały ciąg, a jak czyszczę kod od nadajnika, to dostaję
jakieś dziwne nie odpowiadające pomiarowi cyfry na odbiorniku,
a ja chcę wyświetlić tylko te dwie liczby w Serial.print (jednocyfrową z przodu, potem kropkę i liczbę dwucyfrową po kropce)

any idea?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 gru 2014, o 15:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

Jakiego kodowania używasz do transmisji?

Proponuję abyś przesyłał wartość sensorValue i po strone odbiornika dokonywał konwersji.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Und schreien

Spring
Erlöse mich
Spring
...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2014, o 11:01 
Offline
Użytkownik

Dołączył(a): 12 lis 2014
Posty: 76
Pomógł: 0

Próbowałem po stronie odbiornika dokonywać konwersji ale nie działało, nie bardzo wiem o jakie kodowanie pytasz?

Skorzystałem z porad z filmiku rosyjskiego programisty z YT a właściwie prawie gotowej recepty i dziala



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2014, o 18:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2013
Posty: 568
Zbananowany użytkownik

Pomógł: 31

bigplik napisał(a):
... jednakże powstają dwa problemy,
jeden taki, że liczby widać, jednak są one otoczone przez jakieś dodatkowe 'ogonki', inne znaki bliżej lub dalej od wyniku, który mnie
interesuje, próbowałem to wyczyścić, ale jak to robię od strony odbiornika to nawet jak proszę o wyświetlenie
w Serial.print jednej zmiennej to i tak podaje cały ciąg, a jak czyszczę kod od nadajnika, to dostaję
jakieś dziwne nie odpowiadające pomiarowi cyfry na odbiorniku,
a ja chcę wyświetlić tylko te dwie liczby w Serial.print (jednocyfrową z przodu, potem kropkę i liczbę dwucyfrową po kropce)

any idea?


Wydaje mi się ża masz problem z kodowaniem danych do transmisji, najpierw musisz wysłać jakiś ciąg znaków aby dostosował się odbiornik do nadajnika, (chodzi o ARW w odbiorniku). Następnie nadajesz identyfikator, interesujące cię dane i dodajesz jakąś sumę kontrolną.
Po stronie odbiornika po odczytaniu identyfikatora i zweryfikowaniu jego poprawności, odczytujesz właściwe dane i sprawdzasz czy są poprawne.

Zamiast przesyłać liczbę ułamkową, np 22,51 pomnóż ją przez 100 i prześlij 2251, po stronie odbiornika podziel ją przez 100.

_________________
Und schreien

Spring
Erlöse mich
Spring
...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO