ACHTUNG!
Zur Schaltung geht es nur, wenn Sie bei TINKERCAD angemeldet sind!
Hier melden Sie sich an:
Die PDF-Dateien zum Ausdrucken als Schüler-Arbeitsblätter
sind auf Technik-online verfügbar.
#include <Servo.h>
#include <EEPROM.h>//used to store recorded values
Servo myServo;
float resolution = 1000;//MUST be less than EEPROM.length() (check serial monitor)
float recordTime = 5; //delay time
bool recording = false;
void setup() {
pinMode(13, OUTPUT); //status led
pinMode(2, OUTPUT);
myServo.attach(3);
Serial.begin(9600);
digitalWrite(2, HIGH);
//Serial.println(EEPROM.length());
}
void loop() {
if (recording == true) {//record
for (int i = 1; i <= resolution; i++) {
digitalWrite(13, HIGH); //light status led
int val = map(analogRead(A0), 0, 1023, 0, 180);
EEPROM.write(i, val);
//Serial.println(EEPROM.read(i));
myServo.write(val);
delay(recordTime);
}
digitalWrite(13, LOW); //turn off status led
delay(1000);//give time for person
recording = false;
}
else {
for (int i = 1; i <= resolution; i++) {//playback
if (digitalRead(2) == 0) {//stop playback and record new values
recording = true;
break;
}
//int val = map(analogRead(A0), 0, 1023, 0, 180);
int readval = EEPROM.read(i);
myServo.write(readval);
//Serial.println(readval);
delay(recordTime);
}
digitalWrite(13, HIGH); //show a new repeat
delay(50);
digitalWrite(13, LOW);
}
}
#include <Servo.h>
#include <EEPROM.h>//verwendet, um aufgezeichnete Werte zu speichern
Servo myServo;
float resolution = 1000;//MUSS kleiner als EEPROM.length() sein (überprüfen Sie den seriellen Monitor)
float recordTime = 5; //Verzögerungszeit
bool recording = false;
void setup() {
pinMode(13, OUTPUT); //Status-LED
pinMode(2, OUTPUT);
myServo.attach(3);
Serial.begin(9600);
digitalWrite(2, HIGH);
//Serial.println (EEPROM.länge());
}
void loop() {
if (recording == true) {//record
for (int i = 1; i <= resolution; i++) {
digitalWrite(13, HIGH); //light status led
int val = map(analogRead(A0), 0, 1023, 0, 180);
EEPROM.write(i, val);
//Serial.println(EEPROM.read(i));
myServo.write(val);
delay(recordTime);
}
digitalWrite(13, LOW); //turn off status led
delay(1000);//give time for person
recording = false;
}
else {
for (int i = 1; i <= resolution; i++) {//playback
if (digitalRead(2) == 0) {//stop playback and record new values
recording = true;
break;
}
//int val = map(analogRead(A0), 0, 1023, 0, 180);
int readval = EEPROM.read(i);
myServo.write(readval);
//Serial.println(readval);
delay(recordTime);
}
digitalWrite(13, HIGH); //zeige eine neue Wiederholung
delay(50);
digitalWrite(13, LOW);
}
}