Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? (/watek-deklarowanie-inicjalizacja-pin%C3%B3w-wemos-w-arduino-ide) |
Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - lgema - 07-01-2020 Witam, chciałem dopytać jak to jest z prawidłową deklaracją pinów - skąd mam wiedzieć, że np. taki zapis "int pin_pomiarowy = 0" deklaruje pin analogowy A0, a nie cyfrowy D0? Dodam, że w moim przypadku używam płytki Wemos D1 mini, a jakby to było np. dla Arduino Nano? RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - Agregacik - 07-01-2020 Zapis "int pin_pomiarowy = 0" deklaruje zmienną o nazwie "pin_pomiarowy", która może przybierać wartości "int" zależne od procesora i w tej chwili wstępnie przypisuje się jej wartość "0". Deklarację pinu np A0 robi się tak "#define pin_pomiarowy A0" a pinu D0 tak "#define pin_pomiarowy 0" . Jak się mylę lub można inaczej, to proszę mnie poprawić, uzupełnić. RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - lgema - 07-01-2020 OK, to może zapytam inaczej, poniżej wklejam kod przykładowego programu obsługującego sensor GP2Y1010AU0F - program obsługuje dwa piny (A0 i D2), ale moje pytanie brzmi skąd Arduino IDE wie, że 0 to pin A0, a 2 to pin D2? " int measurePin = 0; //Connect dust sensor to Arduino A0 pin int ledPower = 2; //Connect 3 led driver pins of dust sensor to Arduino D2 int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; float voMeasured = 0; float calcVoltage = 0; float dustDensity = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); } void loop(){ digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(samplingTime); voMeasured = analogRead(measurePin); // read the dust value delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(sleepTime); // 0 - 5V mapped to 0 - 1023 integer values // recover voltage calcVoltage = voMeasured * (5.0 / 1024.0); // Chris Nafis © 2012 dustDensity = 170 * calcVoltage - 0.1; Serial.println(dustDensity); // unit: ug/m3 delay(1000); }" RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - semi - 08-01-2020 int measurePin = 0; int ledPower = 2; analogRead(measurePin) i pinMode(ledPower,OUTPUT); digitalWrite(ledPower,LOW); digitalWrite(ledPower,HIGH) już widzisz skąd "wie"? PS Czy ktoś rozwikła zagadkę? Dlaczego piny, których nie ma więcej niż 256, deklarowane są typem 16-biot ze znakiem? Dlaczego to zmienna a nie stała? Plaga jakiaś czy co? Za dużo FLASH i RAM w AVR? Za szybki CPU? RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - Jarewa0606 - 08-01-2020 No nie do końca, o ile ktoś wie jak używać numeracji jaki jest jego zakres to jeszcze będzie działać, ale jak ktoś zrobi błąd to takie deklaracje stworzą problem a autor będzie dochodził dlaczego nie działa.. int measurePin = 0; wystarczy dać 8 i mamy problemy... Bo nie ma PC8 a komplikator o tym nie wie i przepuści... RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - Agregacik - 08-01-2020 Czyli deklarowanie pinów za pomocą zmiennej to rozrzutność, bo zajmujemy niepotrzebnie pamięć, której jest i tak nie za dużo a ponadto może stwarzać problemy. Czyli "programiści" do "D". Można na sztywno wpisywać np A0 , A7 , 8, 5 itd no, ale to stwarza problemy przy rozbudowanym programie, jak trzeba zmienić któryś pin bo nie pasuje nam przy projektowaniu płytki itp. RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - Robson Kerman - 08-01-2020 Dla tego wymyślono preprocesor, oraz jego dyrektywy. Na przykład dyrektywa #define measurePin 0 spowoduje, że preprocesor w każdym wystąpieniu słowa measurePin, zamieni je na liczbę 0. A skąd kompilator wie, że 0 to to samo co A0? Oczywiście nie wie. Dopiero użycie liczby 0 w funkcji voMeasured = analogRead(measurePin); spowoduje, że do zmiennej voMeasured wpisana zostanie wartość z ADC0. Więcej można się dowiedzieć studiując plik pins_arduino.h (popatrz na stałą digital_pin_to_bit_mask_PGM[]) Jeżeli chcesz czytać stan pinu A0, to już nie możesz napisać digitalRead(0), tylko digitalRead(A0), lub zamiast zmiennej łańcuchowej można napisać digitalRead(14). RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - semi - 08-01-2020 (08-01-2020, 07:00)Jarewa0606 napisał(a): int measurePin = 0; wystarczy dać 8 i mamy problemy... Bo nie ma PC8 a komplikator o tym nie wie i przepuści...Jaki problem? Osiem to więcej niż bajt? Jeśli nawet byłoby więcej, to kompilator da ostrzeżenie (kto je czyta?). (08-01-2020, 07:00)Jarewa0606 napisał(a): Bo nie ma PC8 a komplikator o tym nie wie i przepuści...Co ma PCB do rezultatu kompilacji? (08-01-2020, 09:00)Agregacik napisał(a): Czyli deklarowanie pinów za pomocą zmiennej to rozrzutność, bo zajmujemy niepotrzebnie pamięć, której jest i tak nie za dużo a ponadto może stwarzać problemy. Czyli "programiści" do "D".Dokładnie tak. Lepiej bym tego nie ujął. (08-01-2020, 09:00)Agregacik napisał(a): ale to stwarza problemy przy rozbudowanym programie, jak trzeba zmienić któryś pin bo nie pasuje nam przy projektowaniu płytki itp.Jakie problemy? Co za problem zmienić #define PORT_OUT 3 na np #define PORT_OUT 10 ? Gdzie trudność? ja nie widzę? RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - Agregacik - 08-01-2020 @semi rozchodziło mi się o przypadek, gdy nie definiujemy na początku #define PORT_OUT 10 tylko za każdym razem w programie piszemy np digitalRead(10), bo przecież tak można. RE: Deklarowanie/inicjalizacja pinów Wemos w Arduino IDE? - semi - 08-01-2020 (08-01-2020, 12:02)Agregacik napisał(a): @semi rozchodziło mi się o przypadek, gdy nie definiujemy na początku #define PORT_OUT 10 tylko za każdym razem w programie piszemy np digitalRead(10), bo przecież tak można.Mnie takie rozwiązanie nie przyszło by nigdy do głowy. Gdy jakiś parametr występuje w kodzie więcej niż jeden raz staje się stałą lub definicją. Dopisze do listy grzechów Arduinowców. Aktualna wersja robocza w załączniku. Jak widać ciągle rośnie. |