Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

Podobne dokumenty
Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

Systemy Wbudowane. Arduino - rozszerzanie. Podłączanie wyświetlacza LCD. Podłączanie wyświetlacza LCD. Podłączanie wyświetlacza LCD

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

Systemy Wbudowane. Arduino, AVR (wersja 2019) Arduino. Arduino. Oprogramowanie. Rys historyczny. Mikrokontroler

Klawiatura matrycowa

SCL > Pin 21 SDA > Pin 20 VCC > 5V GND > GND

LABORATORIUM - ELEKTRONIKI Układy mikroprocesorowe cz.2

Przetwornik analogowo-cyfrowy

Systemy Wbudowane. Arduino dołączanie urządzeń Wersja Arduino więcej portów I/O. Układy serii 74. Układy serii 74xx a seria 40xx

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Uwaga: dioda na wyjściu 13 świeci gdy na wyjście podamy 0.

Schemat blokowy architektury AVR

Prosty system alarmowy z Arduino

Systemy Wbudowane. Arduino, AVR (wersja 2018) Arduino. Arduino. Oprogramowanie. Rys historyczny. Mikrokontroler

Wprowadzenie do programowania urządzeń Arduino (Arduino dla Informatyków)

Pomiar odległości z Arduino czujniki, schematy, przykładowe kody

Rafał Staszewski Maciej Trzebiński, Dominik Derendarz

Systemy Wbudowane. Arduino, AVR (wersja ) Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Zmierzyć się z żywiołami, czyli jak zbudować własną stację badawczą! Zaczynamy! Pole komunikatów programu. Nawigacja w programie Arduino

Tematem projektu jest oparty na Arduino zegar pokazujący godzinę oraz datę.

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Programowanie systemów autonomicznych

Pilot RF 4-kanałowy + odbiornik XY-DJM-5V umożliwia zdalne sterowanie do czterech urządzeń. Nadajnik pilot MX804. Odbiornik XY-DJM.

Notatka lekcja_#3_1; na podstawie W.Kapica 2017 Strona 1

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Generator funkcyjny. Spis treści. Działanie. Interfejs. Adam Miarka Maksymilian Szczepanik

Systemy Wbudowane. Arduino rozszerzanie Wersja Plan. Biblioteka EPROM Arduino bez płytki Arduino. Czyli... Co musimy mieć, aby uruchomić chip?

SZYMAŃSKI ŁÓDŹ Ul. Wiskicka 22 Tel./fax. (042) Tel./fax. (042) Kom

Krótki wstęp o wyświetlaczach. Jak zmusić wyświetlacz do pracy?

SiMod-X-(A1) Przetwornik parametrów powietrza z interfejsem RS485 (MODBUS RTU) oraz wyjściem analogowym (dotyczy wersji -A1)

Programowanie mikrokontrolerów. 8 listopada 2007

Listing_ $crystal = deklaracja

Komunikacja w mikrokontrolerach Laboratorium

Instrukcja do ćwiczeń

Kurs Elektroniki. Zastosowanie elektroniki w robotyce cz

6 ARDUINO DLA POCZĄTKUJĄCYCH. PODSTAWY I SZKICE

Systemy Wbudowane. Arduino dołączanie urządzeń Wersja Arduino bez płytki Arduino. Czyli... Eliminowanie modułu z projektu. Na płytce...

Kurs Arduino dla początkujących - Michał Jaworski str. 1. Lekcja 5

Wyświetlacz LCD. Ogólne zasady działania

Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1

2. Format danych i zaimplementowane funkcje MODBUS

Systemy wbudowane Arduino, AVR

ELPM-8DI8DOasLightCount

2.1 Przesył danych między procesorem a tabelą zmiennych

Programowanie mikrokontrolerów AVR z rodziny ATmega.

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Język programowania. KURS Kurs Arduino (1)

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Funkcja (podprogram) void

RS485 MODBUS Module 8I8O

Programowanie Mikrokontrolerów

Układy transmisji przewodowej. na przykładzie USB

LMWD-2X LISTWOWY MODUŁ WYJŚĆ DWUSTANOWYCH DOKUMENTACJA TECHNICZNO-RUCHOWA. Wrocław, listopad 1999 r.

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Nazwa implementacji: Pamięć i zręczność - zapamiętaj kolejność. Autor: Krzysztof Bytow

Wyniki (prawie)końcowe - Elektroniczne warcaby

Sterownik PLC ELPM-8DI8DO z aplikacją ELPM-8DI8DOasRoleta wersja v

Dokumentacja Techniczna. Czytnik RFID UW-M4GM

LSPY-21 LISTWOWY MODUŁ WYJŚĆ ANALOGOWYCH DOKUMENTACJA TECHNICZNO-RUCHOWA. Wrocław, październik 2003 r.

Mini Modbus 1AO. Moduł rozszerzający 1 wyjście analogowe, 2 wyjście cyfrowe. Wyprodukowano dla

4/80. Przegląd systemu. Modułowe sterowniki PLC XC100/XC Moeller HPL /2008 F6 F7 F8 F9 F10 F11 +/- F12 F13 F14

MCAR Robot mobilny z procesorem AVR Atmega32

TRD-MINI COMBO. Uniwersalny moduł czytnika transponderów UNIQUE - wersja OEM. Podstawowe cechy :

Jednofazowy licznik energii elektrycznej z interfejsem Modbus, pomiar bezpośredni

Kurs Arduino #2 podstawy programowania, porty I/O. 2 //Zawartość programu. 1 int main() { void setup() { //Instrukcje, które wykonają się jeden raz

2.1 Porównanie procesorów

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

UNIPROD GLIWICE ul. Sowińskiego 3 tel: , fax kontakt@uniprod.pl

Systemy wbudowane Obsługa interfejsu 1-Wire na przykładzie termometru DS18B20

Pomiar natężenia światła (005; ; arduino, processing)

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Instrukcja obsługi rejestratora SAV35 wersja 10

Teraz możesz kupić zestaw ponad 70 elementów niezbędnych do przeprowadzenia ćwiczeń z kursu u naszych dystrybutorów!

Drivery LED PWM oraz prosty sterownik Świt Zmierzch oparty na Arduino

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

PANEL ODCZYTOWY SONIX P5

Kompilator języka C na procesor 8051 RC51 implementacja

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Opis ogólny SAV5.HT

RS485 MODBUS Module 8I8RO

RS485 MODBUS Module 8I8RO

Wprowadzenie do programowania urządzeń Arduino (Arduino dla Informatyków)

Technika Mikroprocesorowa

Instrukcja integracji urządzenia na magistrali Modbus RTU

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Nazwa implementacji: Zróbmy grę - Tetris. Autor: Łukasz Ciężki

Sterownik procesorowy S-2 Komunikacja RS485 MODBUS

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Programowanie mikrokontrolerów AVR

Transkrypt:

Arduino C - stałe Systemy Wbudowane Arduino C Wersja 2019 Unikać redefiniowania istniejących stałych. Stosowane dla polepszenia zrozumiałości kodu. Lepiej HIGH niż 0x01 Lepiej INPUT_PULLUP niż 0x2 Uwzględniają wielkość liter. mgr inż. Marek Wilkus Wydział Inżynierii Metali i Informatyki Przemysłowej AGH Kraków http://home.agh.edu.pl/~mwilkus 1 2 Arduino C - Stałe true, false HIGH Stan wysoki (wyjście) Włączenie 20K rezystorów podciągających (wejście). LOW Stan niski (wyjście) Wyłączenie 20K rezystorów podciągających (wejście). INPUT, OUTPUT, INPUT_PULLUP Arduino C - Stałe INPUT_PULLUP: pinmode(12, INPUT); digitalwrite(12,high); LED_BUILTIN wyprowadzenie, do którego podłączony jest LED diagnostyczny, w Arduino Uno pin 13. 3 4 Arduino C - Stałe Matematyczne: #define PI 3.1415926535897932384626433832795 #define HALF_PI 1.5707963267948966192313216916398 #define TWO_PI 6.283185307179586476925286766559 #define DEG_TO_RAD 0.017453292519943295769236907684886 #define RAD_TO_DEG 57.295779513082320876798154814105 #define EULER 2.718281828459045235360287471352 Funkcje matematyczne min(x,y), max(x,y) abs(x) constrain(x,a,b) x gdy x [a..b] a gdy x<a b gdy x>b map(liczba,fromlow,fromhigh,tolow,tohigh) Mapuje wartość z jednego przedziału na inny Nie obsługuje liczb zmiennoprzecinkowych! pow(podstawa, wykladnik), sqrt(x) radians(deg), degrees(rad) sq(x) = x*x 5 6

Operacje na bitach bitset(x,n) zapisuje 1 na bit n zmiennej x. bitclear(x,n) zapisuje 0. Operacje na bitach bitwrite(x,n,b) zapisuje n-ty bit zmiennej x wartością b (1/0 lub HIGH/LOW). byte k=0; bitset(k,2); bitset(k,3); bitclear(k,2); 0 0 0 0 0 0 0 0 Bit 7 Bit 0 0 0 0 0 1 1 0 0 Bit 7 Bit 0 0 0 0 0 1 0 0 0 Bit 7 Bit 0 bitread(x,n) odczytuje wartość n-tego bitu zmiennej x. 7 8 Czas Jeszcze raz przerwania delay(x), delaymicroseconds(x) micros() - liczba μs od uruchomienia Arduino (lub ostatniego przeładowania tego licznika). millis() - jak micros(), w milisekundach. byte ledstate = LOW; long previousmillis = 0; long interval = 500;... void loop() unsigned long currentmillis = millis(); if(currentmillis - previousmillis > interval) previousmillis = currentmillis; if (ledstate == LOW) ledstate = HIGH; else ledstate = LOW; Tymczasowe wyłączenie przerwań na wskazanym fragmencie kodu: nointerrupts();... interrupts(); Wyłączenie obsługi przerwania: detachinterrupt(nrprzerwania); digitalwrite(ledpin, ledstate); 9 10 Debouncing Wciśnięcie przycisku nie skutkuje z reguły pojedynczą zmianą stanu. Styki przycisku uderzają o siebie, odbijając się i przez niewielki czas (0.1-1ms) dają zmienne stany, Działanie oparte o ilość wciśnięć przycisku działa więc w sposób niekontrolowany. Niezbędna jest eliminacja drgań. Można zrealizować ją sprzętowo (kondensator), lub programowo. 11 Założenie: Sprawdzamy okresowo stan linii. Jeżeli linia pozostaje zmieniona przez konkretną ilość sprawdzeń przycisk rzeczywiście został wciśnięty/puszczony. Wymagania: Zapisanie dotychczasowego stanu przycisku, Licznik ilości sprawdzeń. Zewnętrzna zmienna do zapisui końcowego stanu przycisku W implementacji możemy zmieścić się w byte przez użycie pól bitowych! 12

ALGORYTM: jeżeli (aktualny stan przycisku!= zapisany stan) licznik++; jeżeli ( licznik >= 4 ) zapisany stan = aktualny stan przycisku ustaw odpowiednio zewnętrzną zmienną W przeciwnym wypadku 13 ALGORYTM: jeżeli (aktualny stan przycisku!= zapisany stan) licznik++; jeżeli ( licznik >= 4 ) zapisany stan = aktualny stan przycisku ustaw odpowiednio zewnętrzną zmienną W przeciwnym wypadku Zmieniamy stan na aktywny gdy przycisk został wciśnięty. Brak efektu powtarzania. Cały czas publikujemy stan. Wciśnięcie powoduje b. częste powtarzanie. 14 Użycie: Wywołanie funkcji debounce, ustalenie stanu przycisku do button1. Obsługa zdarzenia w button1 Skasowanie znacznika po obsłużeniu zdarzenia. Reszta kodu. 15 16 Oszczędzanie RAMu Podłączanie wyświetlacza LCD Zastosowanie pól bitowych: -2B z RAMu (mamy go 2kB) +15-17B pamięci programu (mamy jej jednak aż 32kB) Licznik: 4 bity, 0..15 Zapamiętany stan: 1 bit, 0..1 Ostateczny stan przycisku: 1 bit, 0..1 Wymagania: +5V, GND Zasilanie LED podswietlenia (opcjonalne) Regulacja kontrastu (potencjometr) Enable Register Select R/W (LOW) 4 bity szyny danych 17 R/W do masy! 18

Podłączanie wyświetlacza LCD Podłączanie wyświetlacza LCD Zapis wartości do rejestru danych + zapis rozkazu do rejestru rozkazów (linia RS) Dla wielu wyświetlaczy zgodnych z Hitachi wbudowana biblioteka. RS Enable D4 D5 D6 D7 #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() void setup() Ilość kolumn Ilość wierszy lcd.begin(16, 2); lcd.begin(16, 2); lcd.print("hello, world!"); lcd.print("hello, world!"); lcd.setcursor(0, 1); lcd.setcursor(0, 1); lcd.print("dolna linia"); lcd.print("dolna linia"); 19 Kolumna wiersz 20 LCD - drukowanie DHT-11 po raz kolejny int i;... i=2;... lcd.print("liczba TO "); lcd.print(i); double k=32.23; lcd.print(k,1); lcd.setcursor(0,1); lcd.print(k,2); Sensor temperatury i wilgotności działający na jednoprzewodowej magistrali. Zasilanie: 5V Podłączenie: ---> Komunikacja dwustronna 0..50 *C, max 80RH Uwaga na pin 3/4! 21 22 DHT-11 Biblioteka DHT 1 2 3 4 GND DATA Pulled to 5V! Arduino #include <dht11.h> dht11 DHT; #define DHT11_PIN 2 #define F_PIN 4 #define TEMP_MAX 29 void setup() Serial.begin(9600); Serial.println("Termostat "); Serial.println(); pinmode(f_pin, OUTPUT); digitalwrite(f_pin,low); Odczytaj wskazania do DHT.humidity i.temperature void loop() Serial.print("DHT11, \t"); int chk = DHT.read(DHT11_PIN); Serial.print(chk); Serial.print(",\t"); Serial.print(DHT.humidity, 1); Serial.print(",\t"); double temp = DHT.temperature; Serial.println(temp, 1); if (temp>= TEMP_MAX) digitalwrite(f_pin,high); else digitalwrite(f_pin,low); delay(2000); Pin DHT11 +5V 23 24

DHT-11 - protokół DHT-11: Transmisja Zapytanie z MCU: Linia komunikacyjna w stan niski na 18ms. Później z powrotem w stan wysoki. DHT11 wysyła stan niski (80μs)->wysoki(80μs) DHT11 wysyła dane (po ok. 40μs): 1: 8 bit: Wilgotność 2: 8 bit: Wilgotność, część dziesiętna 3: 8 bit: Temperatura 4: 8 bit: Temperatura, część dziesiętna 5: 8 bit: Suma kontrolna: Ostatnie 8 bit z 1+2+3+4 Każdy bit zaczyna się 50μs stanem niskim, czas późniejszego stanu wysokiego identyfikuje czy przesyłane jest 0 czy 1: 26-28μs 0 70μs 1 Następnie w ten sam sposób przesyłany jest kolejny bit. 25 26 DHT-11: Implementacja //Zapytanie: pinmode(pin, OUTPUT); digitalwrite(pin, LOW); delay(18); digitalwrite(pin, HIGH); delaymicroseconds(40); pinmode(pin, INPUT); //Czekamy na dane while(digitalread(pin) == LOW)... //Obsługa time-out'u while(digitalread(pin) == HIGH)... //Obsługa time-out'u DHT-11: Odbiór danych byte data[5]; //dla przejrzystości pominięto zerowanie tablicy byte currentbyte=0; byte currentbit=7; for (int i=0; i<40; i++) while(digitalread(pin) == LOW)... //Obsługa time-out'u unsigned long t = micros(); //pomiar czasu - start while(digitalread(pin) == HIGH)... //Obsługa time-out'u if ((micros() - t) > 30) data[currentbyte] = (1 << currentbit); 27 if (currentbit == 0) // następny bajt currentbit = 7; currentbyte++; else currentbit--; 28 Przykład zastosowania ADC Arduino Uno 9 8 7 6 5 4 3 2 1 0 4K7 1K DHT11 M 1N4001 BC547 Za pomocą digitalread możemy odczytać stan wysoki lub niski. Czasami pojawia się potrzeba zmierzenia napięcia konkretnej wartości napięcia. Służy do teg oprzetwornik analogowo-cyfrowy podłączony do pinów ANALOG (A0..A5) Napięcie 0..5V jest dostępne jako wartość całkowita z przedziału 0...1023. 29 30

ADC - zastosowanie Przełączamy pin jako wejście: pinmode(a0,input); Odczytujemy wartość i przeliczamy na napięcie: unsigned int value=analogread(a0); float volt = (value * 5.0) / 1024.0; ADC i LM35 temperatura analogowo LM35 zawiera w sobie gotowy dzielnik napięcia z termistorem. Charakterystyką układu jest (zgrubnie) 10mV/1 O C. Stąd napięcie należy przemnożyć *100. Wcześniej zapewnić zasilanie układu. Nie podłączać zasilania odwrotnie! Materiał termistora spowoduje przepływ dużego prądu i możliwe uszkodzenie układu. 31 32 Przełączanie tranzystorem Większa moc/napięcie? Jak dobrać tranzystor? PNP/NPN, Si, Dopuszczalny prąd I C (P tot ), Dopuszczalne napięcie V CEO Parametry termiczne. ULN2803 8x sterownik na tranzystorach w układzie Darlingtona. Po podaniu 1 na wejście na wyjściu 0. Max 500mA/wyjście (moc!) Max 50V Pin 10 do przełączanego napięcia. 33 34