• 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
Poprawność kodu
#11
es2 ale ja Ci nie kazałem pomagać skoro nie miałeś ochoty Smile
 
Odpowiedź
#12
(26-12-2018, 15:12)Automatyk231 napisał(a): es2 ale ja Ci nie kazałem pomagać skoro nie miałeś ochoty Smile

@kaczakat
napisał co jest źle, ale Ty dalej swoje
Cytat:z programem jest coś nie tak bo po wgraniu go na płytkę program w ogóle nie działa
Gdzie masz wysyłanie/wyświetlanie komunikatów diagnostycznych?
Znasz C?
To chyba pierwszy program, który próbujesz zmodyfikować nie znając podstaw.
 
Odpowiedź
#13
Cytat:Gdzie masz wysyłanie/wyświetlanie komunikatów diagnostycznych? 

Program pisałem sam wraz z pomocą programisty więc raczej składnia itd jest napisana poprawnie Wink Co do wysyłania komunikatów diagnostycznych to nie wiem o co Ci chodzi Wink
 
Odpowiedź
#14
(26-12-2018, 15:23)Automatyk231 napisał(a):
Cytat:Gdzie masz wysyłanie/wyświetlanie komunikatów diagnostycznych? 

Program pisałem sam wraz z pomocą programisty więc raczej składnia itd jest napisana poprawnie Wink 

Składnia
Kod:
folat a=0.7, b=0.7;
if( a+b == 1.4 )
też jest poprawna ale na 99% warunek nigdy nie będzie spełniony.
Tak samo w
Kod:
char txt[5000];
for(uint16_t i=0; i<5000; i++) txt[i] = 0;
składnia jest poprawna a program na ArduinoUNO będzie się wieszał. Co więcej, użycie tego w funkcji, nie spowoduje wyświetlenia komunikatu o przekroczeniu pojemności RAM.
Operacje na stringach, też składnia ok, a po chwili może zabraknąć ram.
Ten programista to na co programy pisze? Na PC? Na jaki system? Win? Linux? Pisał kiedyś soft na embeded?

(26-12-2018, 15:23)Automatyk231 napisał(a): Co do wysyłania komunikatów diagnostycznych to nie wiem o co Ci chodzi Wink
Co do diagnostyki, to właściwie nie powinienem już dalej pisać ale zapytam:
- Wiesz co to debugowanie?
- Jak sprawdzić czy program wykonał warunek?
- Jak określić miejsce w którym program kręci się w kółko?
- Jak stwierdzić, że program wykonał określoną funkcję?
- Jak stwierdzić, że nastąpił restart mikrokontrolera?
- Jak stwierdzić przyczynę restetu (BOD-zasilanie, wejście reset, WDG)?

Dlaczego nie używasz WDG?
 
Odpowiedź
#15
Tak ,nie pisał on programów na mikrokontrolery. Tak wiem co to debugowanie - zadajesz takie pytania jakbym był profesjonalistą Wink Próbowałem wyświetlać zmienne z funkcji na monitorze portu szeregowego jednak na nic moje próby - nie wyświetlało się niestety nic.
 
Odpowiedź
#16
(26-12-2018, 16:03)Automatyk231 napisał(a): Tak ,nie pisał on programów na mikrokontrolery.
Jak nie pisał na mikrokontrolery, to jego pomoc niewiele da, co gorsza może wprowadzać Cię w błąd.

(26-12-2018, 16:03)Automatyk231 napisał(a): Tak wiem co to debugowanie - zadajesz takie pytania jakbym był profesjonalistą Wink
Aby uruchomić program trzeba posiadać minimum wiedzy. Nie koniecznie trzeba byc profesjonalistą. Skoro jednak wiesz co to debugowanie, to jak zatrzymać program w dowolnym momencie i sprawdzić wartość zmiennej?
Jak spowodować zatrzymanie programu, gdy określona zmienna przyjmie zadaną wartość?

(26-12-2018, 16:03)Automatyk231 napisał(a): Próbowałem wyświetlać zmienne z funkcji na monitorze portu szeregowego jednak na nic moje próby - nie wyświetlało się niestety nic.


Dopóki nie uruchomisz wyświetlania w monitorze portu szeregowego albo nie użyjesz debugera (IDE Arduino nie wspiera debugera, AS7 tak) możesz zapomnieć o sensownym uruchamianiu programów.

PS
Spytaj swojego programisty jaki będzie wynik operacji
Kod:
a =< 17;
zakładając, że typ a to uint_32_t
Jaki będzie wynik
Kod:
a=65535;
a += 1;
gdy typ a to int.
Później sprawdź wyniki na Arduino z AVR. Stwierdzisz, że programista sie nie zna na programowaniu.
 
Odpowiedź
#17
Pobieram AS7 i zimportuje program Arduino Big Grin
 
Odpowiedź
#18
Pisałeś już o zawieszaniu, a ja Ci odpowiadałem: https://forum.arduinopolska.pl/watek-zaw...led?page=7 #61. Testowałem Twój kod, żeby działał prawidłowo konieczne jest zarządzanie czasem, nie pytaj czujnika co parę ms o nowy odczyt, nie wysyłaj na ekran nowego stanu co obrót pętlą. Naucz się zarządzać czasem. Z napisów wyrzucanych na ekran pomyślałem, że to ma być teraz jakieś menu do ustawiania wilgotności, dlatego wrzuciłem Ci linki do różnych prostych menu.
Jak podejrzewasz, że program się wiesza, to podłącz go do PC, dodaj w programie wydruki opisu co program robi:
Np. Serial.prinln("odczytałem czujniki, punkt 1 programu"); itd. zobacz w którym miejscu kodu dostajesz ostatni komunikat, do których miejsc program nigdy nie zagląda (bo może działa, tylko inaczej niż chcesz), bo warunki nigdy się nie spełniają.
Jak nie chcesz by ten wątek miał tyle stron co poprzedni to wystarczy nie karmić trola.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#19
Wartość w monitorze portu szeregowego zatrzymuje się na punkcie "10" [Serial.println("10");]. Pytanie dlaczego skoro w tym samym programie, jednak bez dodawania histerezy, wszystko działa jak należy?

Kod PHP:
#include "DHT.h"
#include "U8glib.h"
 
#define LED_INFO_RADIATOR 4
#define LED_INFO_VAPORGENERATOR 13
#define LED_INFO_DEAD_ZONE 1
#define DHTPIN 2
#define DHTTYPE DHT22
 
const int stateX 0;
const 
int stateA 1;
const 
int stateB 2;
const 
int stateC 3;
 
int state stateA;
 
const 
int sizeRangeX 2;
const 
int sizeRangeB 2;
 
int humidity;
float temperature;
 
unsigned long currentTime 0;
unsigned long rememberedTime 0;
 
int relayPin 8;
int relayPin2 12;
int relayPin3 7;
int relayPin4 9;
 
int potentiometer A0;
int valuePotentiometer 0;
int data[5];
int i 0;
int average;
 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE U8G_I2C_OPT_DEV_0); // I2C(TWI)
DHT dht(DHTPINDHTTYPE6);
char str[10];
 
void setup()
{
 
  Serial.begin(9600);
 
  Serial.println("1");
 
   dht.begin();
 
   pinMode(potentiometerINPUT);
 
   pinMode(relayPinOUTPUT);
 
   pinMode(relayPin2OUTPUT);
 
   pinMode(relayPin3OUTPUT);
 
   pinMode(relayPin4OUTPUT);
 
   digitalWrite(relayPinHIGH);
 
   digitalWrite(relayPin2HIGH);
 
   digitalWrite(relayPin3HIGH);
 
   digitalWrite(relayPin4HIGH);
 
   pinMode(LED_INFO_RADIATOROUTPUT);
 
   pinMode(LED_INFO_VAPORGENERATOROUTPUT);
 
   pinMode(LED_INFO_DEAD_ZONEOUTPUT);

 
   Serial.println("10");
}
 
void decreaseHumidity(void)
{
 
 Serial.println("2");
 
   u8g.firstPage();
 
   do {
 
       u8g.setFont(u8g_font_helvB08);
 
       u8g.drawStr(227"Zmniejszanie wilgotnosci!");
 
 
       u8g.drawStr(242"Wilgotnosc :");
 
       u8g.drawStr(8042dtostrf(humidity52str));
 
       u8g.drawStr(11042"%");
 
 
       u8g.drawStr(257"Wilg. zad.:");
 
       u8g.drawStr(8057dtostrf(valuePotentiometer52str));
 
       u8g.drawStr(11057"%");
 
   } while (u8g.nextPage()) ;
 
 

 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości