30
Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. 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); } PWM

Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Embed Size (px)

Citation preview

Page 1: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Ausgabe von analogen Werten

int ledPin = 9; pinMode(ledPin, OUTPUT);Output von 0 - 255

PWM-Ausgänge: 3, 5, 6, 9, 10, and 11..

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);                            }

PWM

Page 2: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

value = EEPROM.read(address); //lesen

#include <EEPROM.h>

EEPROM.write(addr, 0); //löschen

EEPROM.write(addr, val); //schreiben

EEPROM

Das EEPROM des Arduino ist ein 512 Byte großer Speicher, den manbeschreiben und auslesen kann. Der Speicherinhalt bleibt beim ausschaltenerhalten. Das EEPROM kann ca. 100.000 mal beschrieben werden!

Page 3: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

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(); } }

Page 4: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

http://code.google.com/p/arduino-timerone/downloads/list

#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}

Timer 1

Der Arduino hat 3 Timer. Jeder Timer hat verschiedene FunktionenSo kann periodisch ein Programm aufgerufen werden. Z.B. kann manso 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.

Der Initialisierungswert ist in MikrosekundenFunktioniert nur mit Pin 9 oder 10

Timer1

Page 5: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

#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 } }

Infrarot-Dekoder (RC5-Code)

Wir benötigen eine zusätzliche Library:Library: http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.htmlDie Library muss in den Ordner „Arduino/Library“ kopiert werden.

Ausgeben des Codes auf dem Monitor

outMinus

Plus

IR1

Page 6: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Infrarot-Dekoder (RC5-Code)

#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"); break; case 3: Serial.println ("Drei"); break; }

irrecv.resume(); // Receive the next value }}

Bei Betätigen der Ziffern 1,2,3- … werdenauf dem Monitor die Schriftfolgen „Eins,Zwei, Drei…“ ausgegeben

TSOP 31236

Wichtige Daten der IR-Empfänger-Module:36 KHz950nm

Hier wie Anschlüsse der 2 bekanntesten Typen:

IR2

Page 7: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Infrarot-Sender

LD274 SFH415

#include <IRremote.h> IRsend irsend;

void setup() { Serial.begin(9600); }

void loop() { irsend.sendSony(01, 12); delay(100); }

Infrarot senden

Library findet sich unter:http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

IR3

Page 8: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Infrarot-Datenübertragung

#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); } }

#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_rcv.ino

ir_send_ser.ino

Im Monitor eingegeben Zeichen werden zum Empfängerübertragen und auf dem LCD dargestellt. Das Löschendes LCD geschieht mit dem #.

Empfamgsprogramm

Sendeprogramm

Page 9: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Reflektor-Koppler

A0

Page 10: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

int sensorValue; void setup() { Serial.begin(9600); }

void loop() { sensorValue = analogRead(0); Serial.println(sensorValue, DEC); delay(100);}

Reflektor-Koppler

Gelesene digitale Werteausgeben.

Einfacher Test des Reflekor-Kopplers

CNY1

#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

CNY2 (mit Servo)

Page 11: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Infrarot „TV-Go“

Sketch:http://www.arcfn.com/2010/11/improved-arduino-tv-b-gone.html

Page 12: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Gleichstrommotor

//0 = aus, 1-5 = Geschwindigkeitvoid 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 break; case 50: analogWrite (9,100); break; case 51: analogWrite (9,150); break; case 52: analogWrite (9,200); break; case 53: analogWrite (9,255); //volle Geschwindigkeit break; }}}

Regelung eines Gleichstrommotors durch PWM

weite

Motor2Funktion des Programms: Eingabe von 0-5 im Monitor Damit wird die Geschwindigkeit in 5 Stufen eingestellt.

Spannung je nach Motor!!!Bei den kleinen Solarmotoren mit +5Vvom Arduino verbinden.

Motor2

Page 13: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Gleichstrommotor

Drehrichtungsumkehr mit H-Brücke

Page 14: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Gleichstrommotor

Page 15: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

int EN1 = 8; //enableint IN1 = 9; //1Aint 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 (EN1,true); digitalWrite (IN1,true); digitalWrite (IN2,false); break; case 's': Serial.println("stop"); digitalWrite (EN1,true); digitalWrite (IN1,false); digitalWrite (IN2,false); break; } } } }

Gleichstrommotor regeln

H293_1

Page 16: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

#include <IRremote.h>int RECV_PIN = 11;IRrecv irrecv(RECV_PIN);decode_results results;int EN1 = 8; //enableint IN1 = 9; //1Aint 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 (EN1,true); digitalWrite (IN1,true); digitalWrite (IN2,false); break; case '3': Serial.println("stop"); digitalWrite (EN1,true); digitalWrite (IN1,false); digitalWrite (IN2,false); break; } } }

Gleichstrommotor über Infrarot steuern

1 = rechtsrun2 = linksrum3 = stop

H293_2

Page 17: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Servo ansteuern

#include <Servo.h> Servo myservo; // Objekt erzeugenint 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 stellendelay(15); }

Mit einem Potentiometer die Position des Servos steuern

Anschlüsse:schwarz: GND (Minus)Rot: + 5VGelb: Signal (Pin 2)

Servo1

Page 18: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Servo ansteuern

Mit der IR-Fernsteuerung den Servo steuern

#include <Servo.h> #include <IRremote.h>int RECV_PIN = 11;IRrecv irrecv(RECV_PIN);decode_results results;Servo myservo; // Objekt erzeugenint potipin = 0; // Poti an A0 int val = 90; //Mittelstellung anfahren

void setup() { myservo.attach(2); // Zugriff zum Servo an Pin 2irrecv.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); break; } }}

Servo2

Page 19: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

#include <Servo.h> Servo myservo;

void setup() { myservo.attach(2); }

void loop() { int randNumber = random(180); myservo.write(randNumber); delay (300); }

Fährt zufällige Positionen an

#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);}}

Fährt immer hin und her

servo.attach(pin, min, max)servo.write(angle); servo.read() servo.attached() servo.detach()

#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); } }}

Eingabe von „1“ dreht den Servo weiter

Page 21: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Schrittmotor

#include <Stepper.h>

const int stepsPerRevolution = 200Stepper 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); } }

Stepper1

Page 22: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

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);}

595-Port

Page 23: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Porterweiterung mit Shift-Register HC595

Taktung

Page 24: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

http://cjparish.blogspot.com/2010/01/controlling-lcd-display-with-shift.html

Library hierzu:

Shift-Register

Mit nur 3 Verbindungen das LCD bedienenBenötigt wird eine spezielle Library

#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);}

595-LCD

Page 25: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Library holen von der Seite:www.arduino.cc/playground/Code/LCDi2c unter PCF8574-HD44780

LCD über I2C-Bus anschließen

#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(){}

I2C-LCD

Page 26: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Uhr mit PCF8583 an I2C-Bus

Library: https://github.com/edebill/PCF8583

Den Widerstand an Pin 7 (int) nicht vergessen!

Page 27: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

#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);}

Uhr mit PCF8583 I2CBeispiel

I2C-Uhr

Page 28: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Uhr mit PCF8583 mit Batterie I2C

Schaltung für die Uhr mit Gangreserve

Page 29: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

Eeprom an I2C-Bus anschließen

#include <Wire.h> //I2C library

Page 30: Ausgabe von analogen Werten int ledPin = 9; pinMode(ledPin, OUTPUT); Output von 0 - 255 PWM-Ausgänge: 3, 5, 6, 9, 10, and 11.. int brightness = 0; int

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);}

Visualisierung mit Procesing

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();}