• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
TABLICA float =>int
#11
To działa "
for(int i = (probki-1); i > 0 ; i--)
{
Blue_pomiarFL[i] = Blue_pomiarFL[i-1];
Red_pomiarFL[i] = Red_pomiarFL[i-1];

}
Blue_pomiarFL [0] = temperatura1;
Red_pomiarFL [0] = temperatura1;


for(int i=0;i<probki;++i)
{
Blue_pomiarINT[i] = Blue_pomiarFL[i];
Red_pomiarINT[i] = Red_pomiarFL[i];
}"


a to "


for(int i = (probki-1); i > 0 ; i--)
{
Blue_pomiarFL[i] = Blue_pomiarFL[i-1];
Red_pomiarFL[i] = Red_pomiarFL[i-1];

}
Blue_pomiarFL [0] = temperatura1a;
Red_pomiarFL [0] = temperatura1a;


for(int i=0;i<probki;++i)
{
Blue_pomiarINT[i] = Blue_pomiarFL[i];
Red_pomiarINT[i] = Red_pomiarFL[i];
}
 
Odpowiedź
#12
Jeśli mieścisz się w dostępnym RAM to kopiowanie nie byłoby problemem. Przekombinowałeś z tym kodem. Nie musisz mieć tablicy int dla wartości ściętej z float do int, po prostu czytając taką wartość traktuj ją jak int.
Zapewne jednak brakuje RAM. Użyj sobie płytki MEGA lub chociaż Leonardo i zobacz czy program dalej działa.
Pisałem że przepisywanie tablic jest wolne, ale czytanie czujnika DS18B20 raz do tablicy floatów, drugi raz do tablicy intów to już jest mistrzostwo. Każde zajmuje z 20ms.
Ustawienie koloru tekstu w każdym loop też raczej nie jest potrzebne.
Nie musisz wymyślać różnych nazw zmiennych dla różnych bloków for, zmienna stworzona w { int i=0} znika za tym zawiasem. Tylko wtedy gdy w jednym for jest kolejny for ma to znaczenie, bo } kończący życie zmiennych lokalnych jest dalej w kodzie.
Nie przesuwaj wartości w tablicy, to jest bez sensu nawet na PC. Naucz się korzystać z bufora kołowego.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#13
1)co do ram

Sketch uses 20904 bytes (64%) of program storage space. Maximum is 32256 bytes.
Global variables use 824 bytes (40%) of dynamic memory, leaving 1224 bytes for local variables. Maximum is 2048 bytes.

2)" Nie musisz mieć tablicy int dla wartości ściętej z float do int, po prostu czytając taką wartość traktuj ją jak int"
To nie działa pierwsze co sprawdziłem
3)Czytam do dwuch, bo potrzebuje bardzo wartość int i float...
4)Red_pomiarFL / Blue To nazwa czujnika mam dwa jeden z czerwona koszulka termokurczliwa drugi niebieską
5)Zmienne specjalnie różne, aby wyeliminować wszystkie prawdopodobne/nieprawdopodobne  przyczyny "gleby" to jest test
6) "Naucz się korzystać z bufora kołowego" mam bardzo znikomą wiedzę sprawdzę co to jest ... dzięki

7) Mam cały czas tego procesora odczyt i przesuniecie tablicy raz  na 10 minut

W tym przypadku wydaje mi się że Arduino jest tak samo cienkie jak programista Smile coś powoduje  że się gubi na tych tablicach  i gleba ... gubi się też w tym konkretnym przypadku  na "princie  na oleda " ale to już rozwiązałem 

Mam jeszcze jedną wielką prośbe może ktoś pomoże chciałbym z tej części kodu  zrobić funkcje 

 for(int i = (probki-1); i > 0 ; i--)
       {
          Blue_pomiarFL[i] = Blue_pomiarFL[i-1];
       }
          Blue_pomiarFL [0] =  temperatura1;

//--- tak sobie to wymyśliłem ---------------------

tu przekazuje  pod int  temp -> temperatura1;  wywołanie z loop      WczytajTablicePrzesun(temperatura1 );

void WczytajTablicePrzesun(int temp)
{
       for(int i = (probki-1); i > 0 ; i--)
       {
          Blue_pomiarFL[i] = Blue_pomiarFL[i-1];
       }
          Blue_pomiarFL [0] =  temp;
}

a jak dodać jeszcze  tablice kompletnie nie mama pojęcia jak to przekazać

 to jest w loop wywołanie                     WczytajTablicePrzesun(temperatura1 , Blue_pomiarFL[44]);            

a tu jest funkcja 

void WczytajTablicePrzesun(int temp,int pomiarFL[44] )
{
       for(int i = (probki-1); i > 0 ; i--)
       {
          pomiarFL[i] = pomiarFL[i-1];
       }
          pomiarFL [0] =  temp;
}
 czy jest to prawidłowo napisane bo kompilator się nie czepia a  mam glebe
 
Odpowiedź
#14
No to jeszcze doczytaj o wskaźnikach, wyłuskiwaniu adresu i tablicach. Wrzuciłem Twój kod do Arduino i przed odkomentowaniem ostatniej tablicy było około 1100B RAM, z tą ostatnią ponad 1200B zajętego.
Baw się robiąc projekty, ale w między czasie uzupełniaj wiedzę. Jak Ci nie przejdzie i za parę miesięcy wrócisz do tego tematu to się nieźle uśmiejesz.
Tymczasem zajrzyj na Youtube i poszukaj kanału pasja informatyki Mirosław Zelent, ma cały kurs C++ i C++ obiektowy, znajdziesz tam o przekazywaniu argumentów do funkcji i przekazywaniu jako argumentu tablic.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#15
Martwi mnie to ... Ardurino jest za cienkie (ilość pamięci dla języka "wysokiego poziomu "jest mała ) na tematy, które chce robić mimo iż nie mam w tym momencie wiedzy to już to widać. Bardzo dziękuje faktycznie kursy są mi ogromnie potrzebne bardzo bym chciał skorzystać z jakiejś szkoły programowania, aby zdobyć solidne podstawy-ale kompletnie nie wiem jak temat zaatakować a ceny kursów zorganizowanych np. Javy to abstrakcja ...

Walczyłem z tym termostat podwójny dwa czujniki mozliwość ustawienia granicy załączenia na ekranie wykres danego czujnika możliwość czytania wartości z przeszłości na serialu (kondensator do resetu )
Ogólnie chciałem uruchomić fitotron u mnie w pracy na Arduino ale tak jak bym to chciał zrobić to sprzęt nie pozwoli ... :rolleyes: po prostu padaka

Tu jest kod bez opisów działa na 100% potrzebny enkoder może się komuś przyda


Kod:
https://github.com/maniek3716/CODE/blob/master/termostat_podwójny_Wykresy%20_oled

Pozdrawiam
 
Odpowiedź
#16
Arduino to nie tylko UNO, w podstawowych płytkach są i takie z 96kB RAM (DUE). W AVR też znajdziesz Atmega1284 z 16kB RAM, w dodatkowych core są STM i ESP32 - nawet po kilkaset kB RAM. Wybór bibliotek i sposób pisania programu też ma znaczenie, jak masz bufor na cały ekran OLED i trochę napisów to możesz zająć >2kB RAM w kilkunastu liniach kodu programu, korzystając z innej biblioteki do ekranu i wrzucając napisy do flash zajmiesz kilkadziesiąt bajtów.
Płatne kursy mają taką ceną bo i mają sens dla kogoś, kto już siedzi w temacie i kosi kasę. Jak będziesz biegły w programowaniu C++ to po przejściu na Java to już jest tylko uzupełnienie informacji i tydzień na przestawienie się na specyfikę innego języka obiektowego.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#17
Czy spotkaliście się  z  taką  sytuacją  mam dwa kompy. w domu i w pracy 
w domu kompiluje wszystko działa jest  reakcja  na przyciski 
kompiluje  w pracy ten sam program  mam muła nie reagującego na przyciski 

Wiadomo różny os ta  sama instalka te same  biblioteki o co tu chodzi ...
bo po prostu ręce opadają

barometr Code
 
Odpowiedź
#18
Z założenia byłoby bez sensu, gdybyś po prostu ten sam kod raz wgrywał w domu/raz w pracy. Pewnie przy nim dłubałeś i wgrałeś jednak coś innego, w tych samych warunkach nawet na różnych IDE ten sam kompilator wygeneruje ten sam kod maszynowy.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#19
(07-06-2019, 15:33)kaczakat napisał(a): Z założenia byłoby bez sensu, gdybyś po prostu ten sam kod raz wgrywał w domu/raz w pracy. Pewnie przy nim dłubałeś i wgrałeś jednak coś innego, w tych samych warunkach nawet na różnych IDE ten sam kompilator wygeneruje ten sam kod maszynowy.
 
Odpowiedź
#20
Jestem pewien na 100% specjalnie do domu wyskoczyłem i dwa razy sprawdzałem dom /praca nic nie rozumie gwarantuje błędu nie popełniłem ...
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości