Ausgabe von analogen Werten

Slides:



Advertisements
Ähnliche Präsentationen
Organisatorisches Die * bzw. ** Aufgaben müssen gelöst werden, da sie später wieder gebraucht werden. Musterlösungen werden zwei Wochen nach den Übungsblättern.
Advertisements

LCDisplay Anschluss des LCDisplays Aufbau der LCDisplay-Platine
Forschungszentrum caesar
Objektorientierter Entwurf
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
SWITCH - Anweisung.
Konstruktoren.
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
DVG Einführung in Java1 Einführung in JAVA.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Medienverarbeitung I, WS 99/00 Simon Barkow, Gunnar Kiesel
Steuerung externer Komponenten über ein USB-Interface.
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Kontrollstrukturen Verwendung: Steuerung des Ablaufs.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Elektronischer Würfel
Dynamische Datentypen
Lindenmayer-Systeme: Fraktale rekursiv zeichnen
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Arduino Kurs Abend 2.
Objectives Verstehen was unterDelegate verstanden wird
Μ Version 1.0Seite 1µVision Start Debugger Set Breakpoint µVision Debugger.
LEGO NXT Roboter in Java programmieren
BMEVIEEA100 Grundlagen der Programmierung
Programmiervorkurs WS 2014 Referenzdatentypen
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Bussysteme WS 05/06 Dominik Fehrenbach EN5:
Basis Informationen, die man für Anfang braucht ! Hassan Tagharobi Dez 2007.
RC-5-Code.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Arduino Mikrocontrollerkurs
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Entfernungsmessung mit Ultraschall
Human Plant Interfaces Arduino: Capacitive Sensor MPR121
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Markus Heller, M.A. (DL8RDS)Datum: Folie Nummer 1 File: Einsatz von Mikrocontrollern in Amateurfunkprojekten Microcontroller in Selbstbauprojekten.
Der Mikrokontroller – Arduino Uno Rev 3
Ausgabe von analogen Werten
C / C++ für das Internet der Dinge und Hausautomatisierung Arduino Uno / Nano / … Input, Interrupts, Timer, Sleepmode Hochschule Fulda – FB AI Sommersemester.
LCDisplay Anschluss des LCDisplays Aufbau der LCDisplay-Platine
I2C beim Attiny Was ist I2C? I2C-Befehle Das PCF8574-Modul
Programmieren in C / C++ Software Serial, Bluetooth
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Projektmodul DM Kurze Einführung Arduino und Arduino-Programmierung
Struktogramme.
X Verwendungshinweise:
Stoppuhr-Karten Stoppuhr-Karten
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Der Mikrokontroller – Arduino Uno Rev 3
Implementieren von Klassen
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Ausgabe von analogen Werten PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM int brightness = 0;   int fadeAmount = 5;   void setup()  { pinMode(9, OUTPUT); } void loop()  {   analogWrite(9, brightness);     brightness = brightness + fadeAmount;   if (brightness == 0 || brightness == 255) {     fadeAmount = -fadeAmount ;   }       delay(30);                             }

EEPROM Das EEPROM des Arduino ist ein 512 Byte großer Speicher, den man beschreiben und auslesen kann. Der Speicherinhalt bleibt beim ausschalten erhalten. Das EEPROM kann ca. 100.000 mal beschrieben werden! #include <EEPROM.h> value = EEPROM.read(address); //lesen EEPROM.write(addr, 0); //löschen EEPROM.write(addr, val); //schreiben

Einfacher Timer Installiert einen einfachen Timer, der alle 7 Sekunden eine Nachricht erzeugt unsigned long previousTime = 0; void setup() { Serial.begin(9600); previousTime = millis(); // millis gibt den Wert seit Einschalten des Arduino an } void loop() if ((millis() - previousTime) >= 7000 ) Serial.println(„7 Sekunden sin vorbei"); previousTime = millis();

Timer 1 Der Arduino hat 3 Timer. Jeder Timer hat verschiedene Funktionen So kann periodisch ein Programm aufgerufen werden. Z.B. kann man so eine LED blinken lassen, ohne dass das eigentliche Programm beeinflußt wird. Am besten lädt man sich eine Library, wo die wichtigsten Teile schon definiert sind. http://code.google.com/p/arduino-timerone/downloads/list Timer1 #include "TimerOne.h"   void setup() {   pinMode(10, OUTPUT);   Timer1.initialize(500000);         // Timer 1 initialisieren und auf 0,5 sek setzen   Timer1.attachInterrupt(LED);  // ruft „LED“ auf, wenn Zeit abgelaufen ist }  void LED()   digitalWrite(10, digitalRead(10) ^ 1); //Toggle LED void loop()   // irgendein Programm Der Initialisierungswert ist in Mikrosekunden Funktioniert nur mit Pin 9 oder 10

Infrarot-Dekoder (RC5-Code) Wir benötigen eine zusätzliche Library: Library: http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html Die Library muss in den Ordner „Arduino/Library“ kopiert werden. Ausgeben des Codes auf dem Monitor IR1 #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() if (irrecv.decode(&results)) Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value Plus Minus out

Hier wie Anschlüsse der 2 bekanntesten Typen: Infrarot-Dekoder (RC5-Code) IR2 #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { int i = (results.value); switch (i) { case 1: Serial.println ("Eins"); break; case 2: Serial.println ("Zwei"); case 3: Serial.println ("Drei"); irrecv.resume(); // Receive the next value Bei Betätigen der Ziffern 1,2,3- … werden auf dem Monitor die Schriftfolgen „Eins, Zwei, Drei…“ ausgegeben Hier wie Anschlüsse der 2 bekanntesten Typen: Wichtige Daten der IR-Empfänger-Module: 36 KHz 950nm TSOP 31236 6

Infrarot-Sender Infrarot senden LD274 SFH415 IR3 #include <IRremote.h> IRsend irsend; void setup() { Serial.begin(9600); } void loop() { irsend.sendSony(01, 12); delay(100); Library findet sich unter: http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

Infrarot-Datenübertragung Im Monitor eingegeben Zeichen werden zum Empfänger übertragen und auf dem LCD dargestellt. Das Löschen des LCD geschieht mit dem #. Empfamgsprogramm ir_rcv.ino Sendeprogramm #include <IRremote.h> #include <LiquidCrystal.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; LiquidCrystal lcd(7,6,2,3,4,5); void setup() { irrecv.enableIRIn(); lcd.begin(16, 2); } void loop() if (irrecv.decode(&results)) char zeichen = results.value; if (zeichen == 35) //wenn # dann löschen lcd.clear();} else { lcd.print(zeichen); irrecv.resume(); // Receive the next value ir_send_ser.ino #include <IRremote.h> IRsend irsend; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { char zeichen = Serial.read(); irsend.sendRC5(zeichen, 12); delay(4);

Reflektor-Koppler A0

Reflektor-Koppler Einfacher Test des Reflekor-Kopplers CNY1 int sensorValue; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(0); Serial.println(sensorValue, DEC); delay(100); Gelesene digitale Werte ausgeben. CNY2 (mit Servo) #include <SoftwareServo.h> SoftwareServo myservo; int cny = 0; int val; int cny = 0; void setup() { myservo.attach(2); } void loop() val = analogRead(cny); if (val < 400) {myservo.write(0); } else {myservo.write(180); } delay(15); SoftwareServo::refresh(); Hell, dann drehe nach links, sonst drehe nach rechts

Infrarot „TV-Go“ Sketch: http://www.arcfn.com/2010/11/improved-arduino-tv-b-gone.html

Gleichstrommotor Spannung je nach Motor!!! Bei den kleinen Solarmotoren mit +5V vom Arduino verbinden. Motor2 Funktion des Programms: Eingabe von 0-5 im Monitor Damit wird die Geschwindigkeit in 5 Stufen eingestellt. Regelung eines Gleichstrommotors durch PWM Motor2 //0 = aus, 1-5 = Geschwindigkeit void setup() { pinMode(9, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int a = Serial.read(); Serial.print (a); switch (a) { case 48: analogWrite (9,0); //48 = Ascii für 0 break; case 49: analogWrite (9,50); // sehr langsam case 50: analogWrite (9,100); case 51: analogWrite (9,150); case 52: analogWrite (9,200); case 53: analogWrite (9,255); //volle Geschwindigkeit weite

Gleichstrommotor Drehrichtungsumkehr mit H-Brücke

Gleichstrommotor

Gleichstrommotor regeln int EN1 = 8; //enable int IN1 = 9; //1A int IN2 = 10; //2A void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); Serial.begin(9600); } void loop() char val; while(1) val = Serial.read(); if(val!=-1) switch(val) case 'r': Serial.println("rechts"); digitalWrite (EN1,true); digitalWrite (IN1,false); digitalWrite (IN2,true); break; case 'l': Serial.println("links"); digitalWrite (IN1,true); digitalWrite (IN2,false); case 's': Serial.println("stop");

Gleichstrommotor über Infrarot steuern #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; int EN1 = 8; //enable int IN1 = 9; //1A int IN2 = 10; //2A void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); } void loop() if (irrecv.decode(&results)) { int val = (results.value); switch(val) case '1': Serial.println("rechts"); digitalWrite (EN1,true); digitalWrite (IN1,false); digitalWrite (IN2,true); break; case '2': Serial.println("links"); digitalWrite (IN1,true); digitalWrite (IN2,false); case '3': Serial.println("stop"); 1 = rechtsrun 2 = linksrum 3 = stop

Servo ansteuern Anschlüsse: schwarz: GND (Minus) Rot: + 5V Gelb: Signal (Pin 2) Mit einem Potentiometer die Position des Servos steuern Servo1 #include <Servo.h> Servo myservo; // Objekt erzeugen int potipin = 0; // Poti an A0 int val; void setup() { myservo.attach(2); // Zugriff zum Servo an Pin 2 } void loop() val = analogRead(potipin); // liest Potentiometer (Werte zwischen 0 and 1023) val = map(val, 0, 1023, 0, 179); // Skalieren myservo.write(val); // Servo stellen delay(15);

Servo ansteuern Mit der IR-Fernsteuerung den Servo steuern Servo2 #include <Servo.h> #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; Servo myservo; // Objekt erzeugen int potipin = 0; // Poti an A0 int val = 90; //Mittelstellung anfahren void setup() { myservo.attach(2); // Zugriff zum Servo an Pin 2 irrecv.enableIRIn(); } void loop() if (irrecv.decode(&results)) { int val = (results.value); switch (val) case '1': myservo.write(val += 10); break; case ‚2': myservo.write(val -= 10);

Fährt zufällige Positionen an #include <Servo.h> Servo myservo; void setup() { myservo.attach(2); } void loop() int randNumber = random(180); myservo.write(randNumber); delay (300); Fährt immer hin und her #include <Servo.h> Servo myservo; int pos = 0; void setup() { myservo.attach(2); } void loop() { for(pos = 0; pos < 180; pos += 1) { myservo.write(pos); delay(15); } for(pos = 179; pos>=0; pos-=1) { myservo.write(pos); delay(15);} } Eingabe von „1“ dreht den Servo weiter #include <Servo.h> Servo Theodor; int wert; int wertneu; void setup() { Theodor.attach(2); Serial.begin(9600); } void loop() if (Serial.available() > 0) wert = Serial.read(); if (wert==49) // 49 = ASCII „1““ position = position + 1; Theodor.write(position); servo.attach(pin, min, max) servo.write(angle); servo.read() servo.attached() servo.detach()

Schrittmotor

Schrittmotor Stepper1 #include <Stepper.h> const int stepsPerRevolution = 200 Stepper myStepper(stepsPerRevolution, 2,3,4,5); int stepCount = 0; void setup() { Serial.begin(9600); } void loop() { int sensorReading = analogRead(A0); int motorSpeed = map(sensorReading, 0, 1023, 0, 100); if (motorSpeed > 0) { myStepper.setSpeed(motorSpeed); myStepper.step(stepsPerRevolution/100);

Porterweiterung mit Shift-Register HC595 int taktPin = 8; int speicherPin = 9; int datenPin = 10; byte wert = B10101010; //zu übertragender Wert Binär void setup(){ pinMode(taktPin, OUTPUT); pinMode(speicherPin, OUTPUT); pinMode(datenPin, OUTPUT); } void loop(){ digitalWrite(speicherPin, LOW); shiftOut(datenPin, taktPin, MSBFIRST, wert); digitalWrite(speicherPin, HIGH); delay(20);

Porterweiterung mit Shift-Register HC595 Taktung

Shift-Register Mit nur 3 Verbindungen das LCD bedienen Benötigt wird eine spezielle Library Library hierzu: http://cjparish.blogspot.com/2010/01/controlling-lcd-display-with-shift.html 595-LCD #include <ShiftLCD.h> ShiftLCD lcd(2, 4, 3); void setup() { lcd.begin(16, 2); lcd.print("Hello, World!"); } void loop() { lcd.setCursor(0, 1); lcd.print(millis()/1000); }

LCD über I2C-Bus anschließen Library holen von der Seite: www.arduino.cc/playground/Code/LCDi2c unter PCF8574-HD44780 I2C-LCD #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x38,16,2); //Adresse 0x38 für I2C void setup() { lcd.init(); lcd.print(„Halloele!“) } void loop()

Uhr mit PCF8583 an I2C-Bus Library: https://github.com/edebill/PCF8583 Den Widerstand an Pin 7 (int) nicht vergessen!

Uhr mit PCF8583 I2C Beispiel I2C-Uhr #include <Wire.h> // necessary, or the application won't build properly #include <stdio.h> #include <PCF8583.h> /***************************************************************************** * read/write serial interface to PCF8583 RTC via I2C interface * Arduino analog input 5 - I2C SCL (PCF8583 pin 6) * Arduino analog input 4 - I2C SDA (PCF8583 pin 5) * You can set the type by sending it YYMMddhhmmss; * the semicolon on the end tells it you're done... ******************************************************************************/ int correct_address = 0; PCF8583 p (0xA0); void setup(void){   Serial.begin(9600);   Serial.print("booting...");   Serial.println(" done"); } void loop(void){   if(Serial.available() > 0){        p.year= (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48)) + 2000;        p.month = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));        p.day = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));        p.hour = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));        p.minute = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));        p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); // Use of (byte) type casting and ascii math to achieve result.        if(Serial.read() == ';'){          Serial.println("setting date"); p.set_time();        }   }  p.get_time();   char time[50];   sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d", p.year, p.month, p.day, p.hour, p.minute, p.second);   Serial.println(time); delay(3000);

Schaltung für die Uhr mit Gangreserve Uhr mit PCF8583 mit Batterie I2C Schaltung für die Uhr mit Gangreserve

Eeprom an I2C-Bus anschließen #include <Wire.h> //I2C library

Visualisierung mit Procesing Arduino-Teil – erzeugen von analogen Messwerten mittels Poti int Messwert; int Spannung; void setup() { Serial.begin(9600); } void loop() { Messwert=analogRead(5); Serial.println(Messwert); delay(10); Processing-Teil: Werte als veränderlicher Kreis darstellen import processing.serial.*; int valPoti; float valFloat; int linefeed = 10; Serial serport; void setup () { size(600, 600); serport = new Serial(this, Serial.list()[Serial.list().length-1], 9600); } void draw() { while (serport.available() > 0) { String valString = serport.readStringUntil(linefeed); if (valString != null) { print(valString); valFloat=float(valString); valPoti=int(valFloat); background(153); fill(255,200,0); ellipse(200,200,valPoti,valPoti); serport.clear();