Arduino für FunkAmateure

Ähnliche Dokumente
Arduino für FunkAmateure

Arduino für FunkAmateure

Arduino für FunkAmateure

Arduino für FunkAmateure

Erste Gehversuche mit ARDUINO (Teil 3) (DL6OAA) Die 7-Segmentanzeige (1-stellig)

Arduino. Inhalt. (mit Arduino UNO)

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

Was so passieren wird:

Arduino Kurs Das LC-Display. Stephan Laage-Witt FES Lörrach

Einen elektronischen Würfel programmieren

Übungen zu Systemnahe Programmierung in C (SPiC)

Einführung Arduino - Aufbau

Die Software zum Unser kleiner Computer

I2C Serial 2.6 LCD Modul. Verwendung mit einem Arduino

Erste Gehversuche mit ARDUINO (DL6OAA)

Eine tastergesteuerte LED

I2C Serial 2.6 LCD Modul

AVR Ein/Ausgabe. Inhaltsverzeichnis

saarland Prof. Dr. Andreas Zeller Verantw. Tutor: Florian Groß Übungsblatt 6

C++ mit dem Arduino (Uno und Mega2560)

Arduino LCD Shield. Quelle:

Arduino - Einfacher Teiler

Übungen zu Systemnahe Programmierung in C (SPiC)

Inhalt. Aufgabe 4: LED-Modul Hinweise Testen des Moduls Sommersemester 2015

C++ mit dem Arduino (Uno und Mega2560)

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

// Daniel Ettenhuber // Projekt Kameraslider // letzte Änderung: // //

Mark VHS Augsburg Einführung in die Mikrocontroller-Programmierung.

Repetitorium Programmieren I + II

LCD-Display 16x2 QAPASS (AllNet)

TRIER. Automatische Messwerterfassung mit dem Arduino (Mikrocontroller) ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht

ARDUINO KENNENLERNEN WAS IST EIN ARDUINO?

myavr Programmierung in C

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Globale Variablen

Tag 4 7 Segment-Anzeige, File Include, LC-Display

System-Programmierung 10: Weitere Arten von I/O. CC BY-SA, Thomas Amberg, FHNW (soweit nicht anders vermerkt)

Bei jedem Arduino-Projekt muss man ein Grundgerüst "bauen". Das sieht dann so aus:

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

Rotary Encoder (RE)

Girls Day. Einführung Mikrocontroller,

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Girls Day 2017 Programmierung

Grundlagen der Objektorientierung :

TCS3200 Farbsensor. Schritt 1 Anschließen des Sensors. Bild 1: TCS3200 Farbsensor

Arduino, IR Fernbedienung dekodieren

Wir hätten nie gedacht das drei Computer und Elektronik-Fans soweit kommen!! Mit diesem Video sagen wir vielen Dank!

saarland Prof. Dr. Andreas Zeller Verantw. Tutor: Florian Groß Übungsblatt 4

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Programmieren für Ingenieure Übungs-Klausur

Haftkünstler auf dem Prüfstand. Online Ergänzung HOLGER FLORIAN BOHN OLGA SPECK THOMAS SPECK

Aufgaben zur Attiny-Platine

Ampelsteuerung Merkblatt 2 Wie wird der Arduino programmiert?

analoge Ein- und Ausgänge

SINNsorik Wahrnehmen durch Sensoren NAME, KLASSE:

Erste Schritte. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Girls Day 2018 Programmiereinführung

Wetterdaten online GND 3,3V VIN CLK MISO MOSI CS VBEN IRQ GND V D13 D12 D11 D10 D5 D3. Arduino

8.3 Taster am µcontroller

U5-2 Register beim AVR-µC

Lösungen der Aufgaben

Milliwattmeter mit Arduino Uno (low-cost-version)

Eine Roboter-Kanone. Projekt 20

Forth-Vokabular. Vokabular für Attiny2313-Forth Stand: A: Assembler-Wort F: Forth-Wort C: Compiler-Wort

foexlab-materialien Arduino-Schaltungen First Steps Gottfried Wilhelm Leibniz Universität Hannover

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

Arbeitsblatt Nr.19: RFID Kit

Struktur eines Sketches

MSP-EXP430G2. LaunchPad Entwicklungskit MSP-EXP430G2. Schnellstart mit dem Texas Instruments. LaunchPad Entwicklungskit

Arduino Digispark. Ausgabe Copyright by Joy-IT 1

Projektarbeit in DVT auf dem Entwicklerboard

Der I²C-Bus. Vorstellung des Inter-Integrated Circuit -Bus. Aufbau und Funktionsweise. Beispiel PortExpander am Arduino

Projekt Nr. 15: Einen elektronischen Würfel erstellen

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Selbstbauprojekt 2017 GØ1

Arduino für FunkAmateure

4 Formelsammlung C/C++

Hall Magnetfeld Sensor KY-003

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm

Einführung in das Programmieren in der Sekundarstufe 1. mit einem Arduino und der Physical-Computing-Plattform

Mikrocontrollerplatine vorbereiten

Aufbau eines Assembler-Programms

Warum dieses Projekt

LCD Modul 84x84 Nokia 5110

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Mikrocontroller - Schnelleinstieg

RalfPongratz. Grundversion. Reaktivlichtmit7SegmentAnzeige

Warum dieses Projekt

PIC16 Programmierung in HITECH-C

Transkript:

Arduino für FunkAmateure Arduino Einführung Teil 9 Taster-Platine 4x4 Wie gehe ich am besten vor? 1. Was will ich machen? 2. Bauteile 3. Überlegungen zur Schaltung und Algorithmus 4. Zuordnung Arduino-Pins mit den Pins der Taster-Platine 5. Schaltplan Taster-Platine mit LCD 6. Zu Versuch 1 ALL_TastPlatine_1.ino und functions.ino 7. Zu Versuch 2 ALL_TastPlatine_2.ino und functions.ino 8. Sketch Versuch 1 Taster-Platine 9. Sketch Versuch 2 Taster-Platine 10. LCD-Funktionen H39@email.de

Was will ich machen? Vorversuch Taster-Platine Die Matrix der Reihen und Spalten untersuchen. LCD in Betrieb nehmen 1. Ordner LiquidCrystal_dfrobot in \arduino\libraries anlegen 2. Dateien kopieren (Anfrage an Enno) Versuch 1 Taster-Platine Versuch 2 Taster-Platine Taster-Platine betreiben Taste auf LCD anzeigen Konventionelle Programmierung Taster-Platine betreiben Taste auf LCD anzeigen Programmierung mit Ports und Bit-Operatoren

Bauteile? Vorversuch Tast-Platine LCD in Betrieb nehmen Steckbrett ALLNET-Bausatz: Tast-Platine Multimeter ARDUINO ALLNET-Bausatz: LCD Anschlüsse: LCD Arduino GND Steckbrett minus (-) VCC Steckbrett plus (+) SDA Arduino SDA SCL Arduino SCL Tast-Platine Versuch 1 Tast-Platine Versuch 2 Bauteile s.o. Bauteile s.o.

Überlegungen zur Schaltung und Algorithmus Aufgabe Stromkreise? Arduino OUTPUT-Pins Arduino INPUT-Pins Algorithmus Ein Tastenduck (S1 bis S16) soll erkannt werden. Wird Taster S9 gedrückt, so ergibt sich beginnend bei Stift R3 über den Taster S9 zum Stift C1 ein Stromkreis. Wegen der 16 Taster ergeben sich 16 Stromkreise. Wir verbinden die Pins R1 bis R4 der Taster-Platine mit Arduino-Pins im OUTPUT-Modus (+ 5V). Wir verbinden die Pins C1 bis C4 der Taster- Platine mit Arduino-Pins im INPUT-Modus. S6 sei gedrückt. In einer äußeren Schleife setzen wir die OUTPUT-Pins (R1 bis R4) nacheinander auf HIGH. In einer inneren Schleife fragen wir die INPUT-Pins ( C1 bis C4) auf HIGH ab. Hier wird jeweils im 2. Durchlauf der äußeren und der inneren Schleife S6 gefunden.

Zuordnung Arduino-Pins mit den Pins der Taster-Platine Port Pin Arduino Pins Platine PB3 11 C4 PB2 10 C3 PB1 9 C2 PB0 8 C1 PD4 4 R1 PD5 5 R2 PD6 6 R3 PD7 7 R4

Schaltplan Taster-Platine mit LCD

Zu Versuch 1 ALL_TastPlatine_1.ino und functions.ino Beschreibung ALL_TastPlatine1.ino Funktion mit Rückgabewert Beschreibung functions.ino Der Sketch bindet die Library <LiquidCrystal_I2C.h> von dfrobot ein. Initialisierung der Arduino-Pins. In setup() Zuweisung der Modi OUTPUT und INPUT. In loop() Aufruf der Funktion lookforkey(), die im Tab functions programiert ist. Werden Funktionen die mit einem Datentyp deklariert, geben einen Wert an die aufrufende Stelle zurück.: int lookforkey(){. Mit dem Schlüsselwort return wird der Wert zurück gegeben: return keyfound. Dieser Wert kann beim Funktionsaufruf einer Variablen zugewiesen werden. int key = lookforkey() In der äußeren while-schleife werden die Reihen (row) R1 bis R4 durchlaufen. Am Anfang wird der zugehörige Pin auf HIGH, am Schleifenende auf LOW gesetzt. Am Schleifenende wird dann die Reihe um 1. erhöht (z.b. von pinc1 auf pinc2). In der inneren while-schleife werden für die aktuelle Reihe, die Spalten (column) C1 bis C4 durchlaufen. Wird in einer Spalte ein HIGH gefunden (digitalread(column) == HIGH), dann wird die Tastennummer (keycount) in keyfound gespeichert. Danach werden in der inneren Schleife Spalte und Tastennummer um 1. erhöht.

Zu Versuch 2 ALL_TastPlatine_2.ino und functions.ino Bitweise Operatoren Port Register z.b. PORTD s. dazu: http://playground.arduino.cc/code/bitmath Die Kommentare im Sketch erklären die Arbeitsweise. s. dazu: https://www.arduino.cc/en/reference/portmanipulation Die digitalen Pins 0 bis 7 machen 8 Bits in einem Byte aus. z. B. PIND Das Register PIND ersetzt digitalread(). Es enthält den Zustand im INPUT-Modus. Ergibt Serial.println(PIND) B01000000, so ist Bit 6 HIGH (Arduino Pin 6). z.b. PORTD z.b. DDRD Das Register PORTD ersetzt digitalwrite(). PORTD = B00010000; // setzt Bit 4 (Arduino Pin 4 ) auf HIGH Das Register DDRD ersetzt pinmode(). DDRD = B11110000; // setzt Arduino Pins 0 bis 3 als INPUT, Pin 4 bis 7 als OUTPUT DDRD = DDRD B11110000; // wie oben, aber Pin 0 bis 3 bleiben unverändert. In der äußeren while-schleife werden die Reihen (row) R1 bis R4 durchlaufen. Am Anfang wird der zugehörige Bit/Pin über das Port-Register PORTD auf 1, am Schleifenende auf 0 gesetzt. Am Schleifenende wird dann die Reihe um 1. erhöht. Um einen gesetzten Taster in den Spalten (column) C1 bis C4 zu finden führe ich 4 Zuweisungen aus. Der Trick besteht darin, das die Zuweisung eine Bedingung enthält, die TRUE, d.h. 1 wird, wenn ein Bit/Pin (Reihe) auf HIGH steht. Ergibt PINB z.b. B0010, dann ist Bit 1/Pin 9 auf HIGH und die Bedingung (PINB==B0010) wird 1. Damit wird column = (PINB== B0010) * 2 zu column = 2.

Sketch Versuch 1 Taster-Platine // ALL_TastPlatine_1.ino // Library: LiquidCrystal_dfrobot #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); int pinr1 = 4; //Arduino Pin 4 int pinr2 = 5; //Arduino Pin 5 int pinr3 = 6; //Arduino Pin 6 int pinr4 = 7; //Arduino Pin 7 int pinc1 = 8; //Arduino Pin 8 int pinc2 = 9; //Arduino Pin 8 int pinc3 = 10; //Arduino Pin 10 int pinc4 = 11; //Arduino Pin 11 void setup() { lcd.begin(); lcd.print("taster druecken!"); // digitale PIN 4 bis 7 auf OUTPUT pinmode(pinr1, OUTPUT); pinmode(pinr2, OUTPUT); pinmode(pinr3, OUTPUT); pinmode(pinr4, OUTPUT); // digitale PIN 8 bis 11 auf INPUT pinmode(pinc1, INPUT); pinmode(pinc2, INPUT); pinmode(pinc3, INPUT); pinmode(pinc4, INPUT); void loop() { int key = lookforkey(); if (key!= 0) { lcd.clear(); lcd.setcursor(0,0); lcd.print("taster = S"); lcd.print(key); delay(300); // functions.ino int lookforkey(){ int keycount = 1; int keyfound = 0; int row = pinr1; while (row <= pinr4){ digitalwrite(row, HIGH); int column = pinc1; while (column <= pinc4 ){ if (digitalread(column) == HIGH) keyfound = keycount; column = column + 1; keycount = keycount + 1; digitalwrite(row, LOW); row = row + 1; return keyfound;

Sketch Versuch 2 Taster-Platine // ALL_TastPlatine_2.ino // Library: LiquidCrystal_dfrobot #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.begin(); lcd.print("taster druecken!"); DDRD = DDRD B11110000; DDRB = DDRB B11110000; void loop() { int key = lookforkey(); if (key!= 0) { lcd.clear(); lcd.setcursor(0,0); lcd.print("taster = S"); lcd.print(key); delay(300); // functions.ino int lookforkey(){ int portb = 0; int column = 0; int row = 0; // die Reihen R1 (hier row = 0) bis // R4 (hier row = 3) durchlaufen while (row <= 3){ PORTD = B00010000 << row; // anwenden des bitweise "Linksschieben": "<<" // Pin 4 => PD4 => B00010000 << 0 auf HIGH // bis Pin 7 => PD7 => B00010000 << 3 auf HIGH delaymicroseconds(1); portb = PINB; // der Hardware Zeit geben // den Port B auslesen, Ergebnis B0001 bis B0004 und B0000 // die Spalte ermitteln, d.h. column = (portb == B0001) * 1; // (portb == B0001) * 1 bedeuted aus B0001 wird 1 column = column + (portb == B0010) * 2; // (portb == B0010) * 2 bedeuted aus B0010 wird 2 column = column + (portb == B0100) * 3; // (portb == B0100) * 3 bedeuted aus B0100 wird 3 column = column + (portb == B1000) * 4; // (portb == B1000) * 4 bedeuted aus B1000 wird 4 if (column) break; // war eine Spalte (column) HIGH, dann Taster gefunden row = row + 1; return (column!= 0) * ( row * 4 + column); // (column!= 0) wenn TRUE, dann wird aus TRUE die "1" // (column!= 0) wenn FALSE, dann wird aus FALSE die "0" // Beispiel: für die Reihe R3 (row = 2) und column = 3 wird // ( 3!= 0) * ( 2 * 4 + 3) // ( 1 * 11 ) also Taste 11

LCD-Funktionen LiquidCrystal_I2C lcd(0x27, 16, 2) Vor void()-setup einfügen Setzt die Adress des LCD, meist 0x27 Setzt die Anzahl Zeichen Setzt die Anzahl Zeilen Erzeugt ein Objekt der Klasse LiquidCrystal_I2C mit Namen lcd lcd.backlight() lcd.clear() lcd.setcursor(0,0) lcd.setcursor(0,1) lcd.print("led = ") lcd.print( sensorvaluemap ) Hintergrundbeleuchtung an LCD löschen, Cursor oben links Setzt Cursor auf Zeichen 0 in Zeile 0 Setzt Cursor auf Zeichen 0 in Zeile 1 Schreibt die Zeichen LED= ab der Cursorposition Schreibt den Wert sensorvaluemap ab der Cursorposition