Liczba postów: 11
Liczba wątków: 1
Dołączył: Jan 2020
Reputacja:
0
Witam,
Napisałem samodzielnie swój pierwszy w życiu kod, w zasadzie to rozbudowałem i poprawiłem gotowca, tzn. rozbudowałem go o dodatkowe funkcje korzystając z określonych bibliotek. Testuję go od jakiegoś czasu i wygląda, że wszystko działa. Jak zweryfikować poprawność tego kodu, czy wystarczy, że nie wywala się podczas kompilacji i działają wszystkie nowo dodane w nim funkcje? Wgrany na klona nano, korzysta z 72% biblioteki dynamicznej, nie mam co prawda ostrzeżenia, ale starałem się go wcześniej optymalizować żeby jak najmniej tej biblioteki pożarł. Jaka jest granica której nie powinno się przekraczać?
Pozdrawiam
Liczba postów: 296
Liczba wątków: 0
Dołączył: Aug 2019
Reputacja:
8
03-01-2020, 22:13
(Ten post był ostatnio modyfikowany: 03-01-2020, 22:25 przez semi.)
GSM:
- W czasie działania programu zresetuj moduł GSM. Jak nastąpi ponowne zalogowanie to ok.
- Kolejny to test na nieotrzymanie odpowiedzi zapytanie/komendę i otrzymanie odpowiedzi, której się nie spodziewasz (np o wylogowaniu, ponownym zalogowaniu, RING, itp).
Na tych 2 testach 99,99% programów na arduino polega. Jeśli te testy ok to:
- Jak używasz karty z PIN to jak program zachowa się z kartą bez PIN?
- Gdy PIN jest błędny co robi program?
- Jeśli używasz karty bez PIN, to co będzie po włożeniu karty z PIN? jak sygnalizujesz błąd?
Tych testów na arduino nigdy nie robiłem bo nie przeszły pierwszego testu.
DS18B20:
- Zewrzyj magistralę z masa, jakie otrzymujesz odczyty temperatury?
- Odłącz termometr, jakie otrzymujesz odczyty temperatury?
Na pierwszym z testów 99,99% programów zwraca 0, na drugim -127. Oba wyniki są naturalnie nie prawdziwe.
- Błąd CRC, co robi program?
Tego testu nigdy nie robiłem na arduino bo nie przeszła pierwszych 2 testów.
Inne testy:
- Trwa konwersja temperatury przez DS18B20. W tym czasie przychodzi SMS. Zostanie poprawnie odczytany?
Na tym teście ponad 90% programów na arduino działa błędnie.
PS
Używasz float choć nigdzie nie jest wymagane. Z jakim uC masz Arduino?
Liczba postów: 11
Liczba wątków: 1
Dołączył: Jan 2020
Reputacja:
0
03-01-2020, 22:31
(Ten post był ostatnio modyfikowany: 03-01-2020, 22:34 przez nowy.)
To jest nano atmega328p z tego co kojarzę.
Karta jest bez pin, nóżka resetu jest podpięta do arduino, układ resetuje się z arduino bez problemu. sim800l się nie usypia, arduino to samo, ale udało mi się ograniczyć pobór do 30mA. Zasilanie na nano jest podane poprzez vin, ale błędnie bo 5v niestety musiałem to ograniczyć bo przy 7809 było 5mA więcej, na 7805 działa stabilnie, jeżeli będzie problem wystarczy, że wypnę i wsadzę inny.
Przy odłączonym termometrze otrzymuję wiadomość -273st
Przy zwarciu magistrali z masą otrzymuję też -273st.
D18b20 jest podłączony jako poprzez 2 przewody zgodnie ze sztuką.
Jak program się załaduje to dostaję smsy za każdym razem. Jedna sytuacja jaką zauważyłem przy podpiętej konsoli, jak odpaliłem układ i nie załadował się do końca to "err cmfg" po wysłaniu smsm o załączenie przekaźnika, odpowiedzi nie otrzymałem. Jednak nie wiem na ile był to problem z załadowaniem czy coś w kodzie za dużo zoptymalizowałem, inne smsy poszły wtedy bez problemu. Będę to jeszcze weryfikował. Jeszcze jeden scenariusz muszę przetestować to brak sieci w danym momencie, nie wiem jak zachowa się układ, musiałbym dodać jakiegoś watchdoga.
Tak faktycznie teraz na szybko wyszukałem czy gdzieś jest w kodzie zmienna float i faktycznie nie ma, chodziło o sytuacje jak na początku testowałem czujnik ds18b20 na konsoli, korzystałem tam z funkcji float i na serialu wszystko działało, jednak przy sms nie. Zacząłem wtedy szukać, czytać i najpierw zmieniłem na int, temp dalej czytało, ale sms nie był wysyłany i znalazłem gdzieś, że ktoś miał podobny problem zastosowałem takie rozwiązanie i bingo zadziałało
//Tempertatura odczyt
if (lastLine.indexOf("temperatura") >= 0) {
int temperature = sensors.readTemperature(address);
Serial.println(temperature);
char buffer[10]; // adjust size to suit
itoa(temperature, buffer, 10);
//Serial.println(F(" 'C"));
// Wysyła sms z temperatura
gprs.sendSMS (buffNumber, buffer);
sensors.request(address);
}
Problem pojawi się jak będę chciał odczytać dokładne napięcie 12v z akumulatora i będę musiał użyć zmiennej float do tego a potem jakoś odczytać smsa, który jak widać z biblioteki gprs / gprs.h obsługuje wysyłkę tego jako char. Nie znam się jeszcze na tyle, żeby to przerobić. Sam fakt ogarnięcia czujnika temp zajął mi 3h, próbowałem na różne sposoby, ale nic to nie dało, dopiero poszukałem w innym sposób rozwiązania i powyższe zadziałało od strzała.
Liczba postów: 11
Liczba wątków: 1
Dołączył: Jan 2020
Reputacja:
0
04-11-2021, 23:25
(Ten post był ostatnio modyfikowany: 04-11-2021, 23:25 przez nowy.)
Dzięki za trop, bo już zacząłem szukać, ale muszę pójść Twoim tropem i spróbować, tak samo jak na początku próbowałem z itoa bo też był problem z wyświetlaniem temperatury.