Skocz do zawartości
Komentator

Kurs Arduino - #2 - podstawy programowania, porty I/O

Pomocna odpowiedź

Chciałbym się odnieść do listingu pierwszego z migającą diodą na pinie 8.Nie rozumiem  po co jest funkcja pinMode (8,OUT);  w void setup ?

Usunąłem tą funkcję i dioda dalej miga , w void loop zmieniłem pin z 8 na 7 ,ponownie wgrałem kompilację i dioda miga na pinie 7 ,pomimo braku funkcji pinMode  ???

Udostępnij ten post


Link to post
Share on other sites

@ML7 witam na forum 🙂

Funkcje Arduino możesz podejrzeć - folder programu\hardware\arduino\avr\cores\arduino

pinMode ustawia tryb wyprowadzenia. Przyczym nie ma trybu OUT tylko OUTPUT. Nie wiem jak się stało że Ci się to skompilowało. Wewnątrz funkcji pinMode jest warunek else, który zostanie spełniony dla innych wartości zmiennej mode. Dlaczego funkcja jest "nie potrzebna", ciężko powiedzieć. Wyprowadzenia Arduino są domyślnie wejściami INPUT, jeżeli twój LED jest podłączony do plusa to wejście może zaciągać prąd i tworzyć sink.

Takie "optymalizacje" nie są jednak zalecane, kod traci na jakości i działa przypadkowo. Możesz jeszcze sprawdzić jak działają funkcje, kod poniżej:

void pinMode(uint8_t pin, uint8_t mode)
{
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);
	volatile uint8_t *reg, *out;

	if (port == NOT_A_PIN) return;

	// JWS: can I let the optimizer do this?
	reg = portModeRegister(port);
	out = portOutputRegister(port);

	if (mode == INPUT) { 
		uint8_t oldSREG = SREG;
                cli();
		*reg &= ~bit;
		*out &= ~bit;
		SREG = oldSREG;
	} else if (mode == INPUT_PULLUP) {
		uint8_t oldSREG = SREG;
                cli();
		*reg &= ~bit;
		*out |= bit;
		SREG = oldSREG;
	} else {
		uint8_t oldSREG = SREG;
                cli();
		*reg |= bit;
		SREG = oldSREG;
	}
}

 

void digitalWrite(uint8_t pin, uint8_t val)
{
	uint8_t timer = digitalPinToTimer(pin);
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);
	volatile uint8_t *out;

	if (port == NOT_A_PIN) return;

	// If the pin that support PWM output, we need to turn it off
	// before doing a digital write.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);

	out = portOutputRegister(port);

	uint8_t oldSREG = SREG;
	cli();

	if (val == LOW) {
		*out &= ~bit;
	} else {
		*out |= bit;
	}

	SREG = oldSREG;
}

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Nie mogę wgrać żadnego programu na płytkę. Za każdym razem pojawia się taki komunikat.

688aa-2020-04-17_10-29-37-8414.png

Udostępnij ten post


Link to post
Share on other sites

@Davis czy na pewno wybrałeś odpowiedni port COM w ustawieniach?

Udostępnij ten post


Link to post
Share on other sites

@Treker dzięki, już sobie poradziłem🙂. Komputer nie wykrywał płytki, teraz jest już w porządku.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Gdy przerobię program blink na miganie diodą na porcie 8 to wszystko działa ale jak zrobię nowy plik to wyskakuję mi błąd

Cytat

 

Arduino:1.8.12 (Windows Store 1.8.33.0) (Windows 10), Płytka:"Arduino Uno"

C:\Users\DELL\Documents\Arduino\sketch_may09b\sketch_may09b.ino: In function 'void setup()':

sketch_may09b:3:13: error: 'output' was not declared in this scope

   pinMode(8,output);

             ^~~~~~

C:\Users\DELL\Documents\Arduino\sketch_may09b\sketch_may09b.ino: In function 'void loop()':

sketch_may09b:10:19: error: 'high' was not declared in this scope

   digitalWrite(8, high);

                   ^~~~

C:\Users\DELL\Documents\Arduino\sketch_may09b\sketch_may09b.ino:10:19: note: suggested alternative: 'sinh'

   digitalWrite(8, high);

                   ^~~~

                   sinh

sketch_may09b:14:21: error: 'low' was not declared in this scope

    digitalWrite (8, low);

                     ^~~

C:\Users\DELL\Documents\Arduino\sketch_may09b\sketch_may09b.ino:14:21: note: suggested alternative: 'pow'

    digitalWrite (8, low);

                     ^~~

                     pow

exit status 1
'output' was not declared in this scope

Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"

 

rozumiem, że muszę dodać jakieś biblioteki? ale jakie i jak?

tak wygląda program:

#include "Arduino.h"
void setup(){
  pinMode(8,output);
   // ustawiam pin 8 jako wyjscie


}

void loop() {
  digitalWrite(8, high);
   //ustawiam stan pinu 8 na wysoki
   delay(1000);
   //opoznienie 1000ms
   digitalWrite (8, low);
   //ustawiam stan pinu 8 jako niski
   delay (1000);
   //opoznienie 1000ms

}

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@PersonalJezus witam na forum 🙂 To nie jest wina braku bibliotek. W przypadku tego typu słów kluczowych ważna jest wielkość znaków, czyli nie "output" tylko "OUTPUT", nie "low" tylko "LOW" i nie "high" tylko "HIGH". Dokładnie tak jest napisane w działającym Blinku i tego trzeba się trzymać.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
1 minutę temu, Treker napisał:

@PersonalJezus witam na forum 🙂 To nie jest wina braku bibliotek. W przypadku tego typu słów kluczowych ważna jest wielkość znaków, czyli nie "output" tylko "OUTPUT", nie "low" tylko "LOW" i nie "high" tylko "HIGH". Dokładnie tak jest napisane w działającym Blinku i tego trzeba się trzymać.

DZIĘKI! 🙂

Udostępnij ten post


Link to post
Share on other sites

Cześć wszystkim! Na start mam problem, ponieważ gdy chciałem podłączyć diodę do Arduino (pierwszy schemat) to zrobiłem wszystko jak na schemacie, program przepisywałem i nawet kopiowałem i wklejałem a mimo wszystko dioda wciąż nie świeci. W przypadku użycia diody wbudowanej na płytce wszystko działa. Układałem również na nowo cały schemat kilka razy i wciąż nic. Może ktoś spotkał się z podobnym problemem na start i powie mi co robię źle? 😄 

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@mdominiak witam serdecznie na forum 🙂

Możesz sprawdzić czy dioda w ogóle działa - podłącz ją przez rezystor do pinu 5v Arduino.

Najlepiej podeślij zdjęcie układu, łatwiej będzie coś doradzić.

 

Edytowano przez Gieneq
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Hej @Gieneq,

Powodem okazał się uszkodzony przewód - wymieniłem i wszystko działa jak należy 😄 

Ale dzięki za zainteresowanie 😉

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Witam wszystkich. Mam pytanie odnośnie zad domowego nr 1.2 . Czy podłączenie układu w taki sposób niczego nie uszkodzi?

aaa.jpg

Udostępnij ten post


Link to post
Share on other sites

@Wortan wygląda dobrze 🙂 ale do czego podłączasz te kabelki? Bo jak biały do masy a czarny i czerwony do pinów sterujących to będzie działać.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@Gieneq Dokładnie tak jak piszesz. Sprawdziłem już, działa. Dziękuje za odpowiedź.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...