Sie sind auf Seite 1von 75

CURSO BSICO DE

ARDUINO

Filosofa Arduino
La filosofa Arduino se fundamenta en la idea de crear prototipos en lugar de solo
hablar de ideas!

Prototipo

Mezclar

Reusar

Crear lo antes
posible un demo
de la idea a
desarrollar

Podra utilizar
este proyecto
para este otro

Esta aparato ya
no sirve, pero el
ventilador lo
podra usar en

Explorar

Modificar

Colaborar

Que pasa si se
hago esto?
Como se vera si
estos dos objetos
se unen?

El juguete solo
dice una palabra,
podra agregar
mas ?

Juan puede
prender leds, tal
vez el pueda
ayudarme a

INTRODUCCIN
Un sistema embebido es un
sistema electrnico que cumple
solo determinadas funciones. Su
Hardware no es modificable, su
software s.

PARTES DE UN SISTEMA EMBEBIDO:


ENTRADAS
Son los datos que traemos de
nuestro entorno, de la vida real
para poder realizar un actividad
nuestro Arduino.
Anlogo: miles de nmeros.
Digital: 1 o 0

PARTES DE UN SISTEMA EMBEBIDO:


UNIDAD CENTRAL DE PROCESAMIENTO
Recibe las seales de las
entradas y las procesa para
generar algn tipo de respuesta.
Es el lugar donde se almacena
nuestra programacin.

PARTES DE UN SISTEMA EMBEBIDO:


SALIDAS
Son las formas auditivas, visuales,
etc. que generan las respuestas de
la
unidad
central
de
procesamiento

ELEMENTOS ELECTRNICOS A USAR:

ELEMENTOS ELECTRNICOS A USAR:

PROTEUS
Es un programa de simulacin que
nos permite comprobar el
funcionamiento
de
nuestro
sistema antes de implementarlo
en la realidad.

IDE DE ARDUINO
El programa que no permite dar el
funcionamiento
a
nuestro
sistema, cdigo abierto.

ARMADO DE CIRCUITOS
Funcionamiento del protoboard.

SIMULANDO ARMADO DE CIRCUITOS

Simular la configuracin
astable en fritzing

555

PREGUNTAS

PARTES DEL PROGRAMA


1.

2.
3.

4.

5.

Barra de Navegacin: Permite al usuario


acceder a programas, ejemplos y
principalmente seleccionar el Arduino a
usar y el puerto de acceso.
Cuadro de trabajo: Donde programamos
al Arduino.
Cuadro de compilacin: Nos indica el
proceso de compilacin y la ubicacin de
archivo temporal .hex
Barra de Acceso: Permite compilar al
Arduino y cargar el programa.
Barra de Ubicacin: Observaremos el
tipo de Arduino conectado y el puerto de
comunicacin.

PARTES DEL SKETCH


Libreras: Son lneas de cdigo ya construidas para el uso de
ciertos aspectos de Arduino para una mayor facilidad y se
llaman a estos subprogramas como mtodos o subrutinas.
Variables: Es un espacio de memoria donde se almacenan
datos, se forma temporal o fija, dependiendo del tipo de dato
se debe elegir la variable a usar, adems de ellos es necesario
primero declarar la variable con un nombre que la
represente, pero si puede tener varios datos contenidos en
una misma variable.
Void Setup: Es el lugar donde configuramos al Arduino sobre
que pines y como vamos a usar, en cada tema de
programacin observamos la forma de configurar
correctamente.

Void Loop: Es un espacio de programa que se repetir


infinitas veces hasta que alguna variable cambie de estado o
se desconecte de la fuente, es donde ir el programa que
dar el accionamiento al Arduino.

PREGUNTAS

PROGRAMACIN CON ARDUINO


PUERTOS COMO SALIDA
Al definir como salida, es decir que
enviamos voltajes a los pines de Arduino,
en este caso 0v o 5v.

void setup() {
pinMode(8,OUTPUT); // declarado como
salida
}
void loop() {
digitalWrite(8,HIGH);
delay(500);

// enviar 5v
// tiempo de led
//encendido
digitalWrite(8,LOW); //enviar 0v
delay(500);
//tiempo de led
//apagado
}

MANEJO DE VARIABLES DE NMEROS

Las variables son espacios de


memoria
del
micro
para
almacenar datos temporales y
permanentes.

PROGRAMACIN CON ARDUINO


PUERTOS COMO SALIDA
Realizar el mismo programa pero
usando variables en los pines.

int led=8;
// inicializacion de variable
void setup() {
pinMode(led,OUTPUT); // Pin declarado
como salida
}
void loop() {
digitalWrite(led,HIGH); //enciende led
delay(500);
//tiempo de espera
digitalWrite(led,LOW); //apaga led
delay(500);
//tiempo de espera
}

PROGRAMACIN CON ARDUINO


PUERTOS COMO SALIDA
Realizar un programa que encienda dos leds de
manera simultnea, alternada

int led_rojo=9;
int led_verde=8;

// variable para led 1


// variable para led 2

void setup() {

pinMode(led_rojo,OUTPUT);

// pin declarado como salida

pinMode(led_verde,OUTPUT);

//pin declarado como sala

void loop() {
digitalWrite(led_rojo,HIGH);

//encender led 1

digitalWrite(led_verde,HIGH);

//encender led 2

delay(1000); //delay
digitalWrite(led_rojo,LOW);

// apagar led 1

digitalWrite(led_verde,LOW);

// apagar led 2

delay(1000);

//delay

PARTE PRACTICA
Realizar un sistema que se enciendan 3
alternadamente. Programa, Simulacin y Armado

leds

Realizar un sistema con leds que tengan 3 diferentes


juegos. Programa, Simulacin y Armado

PROGRAMACIN CON ARDUINO


PUERTOS COMO ENTRADA
Se consideran entradas digital en
el momento que nosotros
recibimos 0 lgico o 1 lgico del
exterior, sea desde un sensor, un
switch, un botn, etc.
0 lgico : 0 voltios y 1,8 voltios
1 lgico: 2,1 voltios y 5 voltios

PARTE PRACTICA
Simular en Fritzing las configuraciones pull up y pull down.

ESTRUCTURA DE CONTROL IF ELSE


IF (Condicin){
(Bloque de sentencias 1)
}
ELSE {
(Bloque de sentencias 2)
}

if(digitalRead(pin a usar)==HIGH){
(Bloque de sentencias 1)
}
else
{
(Bloque de sentencias 2)
}

PROGRAMACIN CON ARDUINO


PUERTOS COMO ENTRADA
Realizar un programa donde mediante un pin declarado como
entrada encienda un led declarado como salida.

void setup()
{
pinMode( 8 , INPUT);

pinMode( 9 , OUTPUT);
}
void loop()

{
if (digitalRead(8))
{
digitalWrite( 9 , HIGH );
}
else
{
digitalWrite( 9 , LOW );
}
}

PROGRAMACIN CON ARDUINO


PUERTOS COMO ENTRADA

Realizar un programa donde al


presionar un botn se enciendan
un led, al volver a presionar se
apague

PROGRAMACIN CON ARDUINO


PUERTOS COMO ENTRADA
int dato = 0 ;
void setup()
{
pinMode( 8 , INPUT);
// pin como entrada
pinMode( 9 , OUTPUT); // pin como salida
}
void loop()
{
if (digitalRead(8))
// condicin de pin de entrada
{
}
else
{
delay( 300 );
// delay anti rebotes
dato =1-dato ;
// variable de dos estados
}
if (dato == 1 )
// condicin de encendido
{
digitalWrite( 9 , HIGH ); // led en alto
}
else
{
digitalWrite( 9 , LOW ); // led en bajo
}
}

Cambio de estado de variable entre


1 y 0.
Segn la condicin de la
variable, el led se enciende o se
apaga

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL

Es una parte de hardware que


permite comunicarse hacia otro
dispositivos sea con medio fsicos
o con medios inalmbricos.

PREGUNTAS

PARTE PRACTICA
Realizar un sistema al accionar un Switch y se tenga 3
juegos de leds diferentes. Programa, Simulacin y Armado

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL
void setup()
{
Serial.begin(9600);

// configuracin de
comunicacin

void loop()
{
Serial.print("hola");
delay(5000);
Serial.print('A');
delay(5000);
};

// envio de frase
//retardo
// envio de letra
//retardo

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL
En la recepcin de datos por
comunicacin
serial
es
fundamental verificar que el
puerto est disponible y tenga un
dato en la entrada

if (Serial.available()>0)

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL
void setup() {
Serial.begin(9600);
// configuracion de cx
pinMode(8,OUTPUT); // pin como salida
}
void loop() {
if (Serial.available()>0){ //puerto recibe dato
if(Serial.read()=='A'){ // si recibimos letra A
digitalWrite(8,HIGH); // encender led
}
else
{
digitalWrite(8,LOW); //caso contrario apagar led
}
}
}

Encender un led mediante comunicacin serial, al


recibir le letra A se apague, caso contrario se apague.

ESTRUCTURA DE CONTROL SWITCH CASE


Esta sentencia permite ejecutar una
de entre varias acciones en funcin
del valor de una expresin. Se evala
la expresin, dando como resultado
un nmero.

"Case" dentro de la estructura


buscando que el nmero coincida
con uno de los valores.
Es necesario que coincidan todos
sus valores.
Cuando se encuentra la primera
coincidencia, se ejecuta el bloque
de sentencias correspondiente y se
sale de la estructura..
Si no se encuentra ninguna
coincidencia con ningn valor, se
ejecuta el bloque de sentencias de
la seccin Default.

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL
Realizar un programa donde al
digitar diferentes letras se
enciendan diferentes leds.

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL
char dato;

int led_rojo=8;

int led_verde=9;
int led_amarillo=10;

case 'B':

void setup() {
Serial.begin(9600);// configuracion de cx
pinMode(led_rojo,OUTPUT);

// pin como salida

pinMode(led_verde,OUTPUT);

// pin como salida

pinMode(led_amarillo,OUTPUT);

void loop() {
dato=Serial.read();

// variable llena

switch(dato){

// control

//encender led

digitalWrite(led_verde,LOW);

//apagar led

digitalWrite(led_amarillo,LOW);

//encender led

digitalWrite(led_amarillo,LOW);

//apagar led

digitalWrite(led_rojo,LOW);

//apagar led

digitalWrite(led_verde,LOW);

//apagar led

digitalWrite(led_amarillo,HIGH);

//encender led

break;

default:

case 'A':
digitalWrite(led_rojo,HIGH);

digitalWrite(led_verde,HIGH);

case 'C':

//puerto recibe dato

//apagar led

break;

// pin como salida

if (Serial.available()>0){

digitalWrite(led_rojo,LOW);

digitalWrite(led_rojo,LOW);

//apagar led

digitalWrite(led_verde,LOW);

//apagar led

digitalWrite(led_amarillo,LOW);

//apagar led

//apagar led

break;

break;

}
}
}

PROGRAMACIN CON ARDUINO


COMUNICACIN SERIAL
Arduino permite trabajar la
comunicacin serial desde el
mismo programa para la revisin
de la recepcin y envo de
mensajes.

PARTE PRACTICA
Realizar un sistema al ingresar diferentes letras por la
computadora haya juegos diferentes con leds. Programa,
Simulacin y Armado.

PREGUNTAS

PROGRAMACIN CON ARDUINO


CONVERSIN ANLOGA DIGITAL
Son pines destinados de Arduino
para recibir referencias de
voltaje de 0 a 1023 en relacin a
sonido, ruido, humedad, luz, etc.
Generalmente los sensores ms
usados son de este tipo de
datos.

PROGRAMACIN CON ARDUINO


CONVERSIN ANLOGA DIGITAL
Realizar un programa que reciba datos anlogos
desde un potencimetro y se visualice dicho int valor_analogo;
dato en la comunicacin serial.
void setup() {
Serial.begin(9600);
}

// inicizalicion de variable
// configuracion de cx serial

void loop() {
valor_analogo=analogRead(0);
//lectura de
// conversor en un canal
Serial.println(valor_analogo);
//recibe el valor
//analogico
delay(1000);
//tiempo de espera
}

PROGRAMACIN CON ARDUINO


CONVERSIN ANLOGA DIGITAL
Mediante leds se darn nuevas referencias,
quiere decir que un led se encender cuando el
conversor tenga un valor de 1 a 255, dos leds de
256 a 512, tres leds de 516 a 750 y 4 leds de 7
leds a 1023.

PROGRAMACIN CON ARDUINO


CONVERSIN ANLOGA DIGITAL
Dentro del nuevo programa
observamos que podemos dentro
una estructura de control como lo
es if else podemos aadir ms de
una condicin con operadores
lgicos.

Nombre

Operador

Uso

Y (AND)

&&

SI A Y B cumplen una condicin

O (OR)

II

Si A O B cumple la condicin

Mayor

>

Si A>B

Menor

<

A<B

Igual

==

A=B

No es igual

!=

A!=B

Mayor o igual

>=

A>=B

Menor o igual

<=

A<=B

PROGRAMACIN CON ARDUINO


CONVERSIN ANLOGA DIGITAL
int valor_analogo;

// inicizalicion de variable

int led_rojo=8;

// inicizalicion de variable

void loop() {
valor_analogo=analogRead(0);//lectura de conversor

int led_verde=9;

// inicizalicion de variable

if(valor_analogo<5){

int led_amarillo=10;

// inicizalicion de variable

digitalWrite(led_rojo,LOW);

int led_azul=11;

// inicizalicion de variable

digitalWrite(led_verde,LOW);
digitalWrite(led_amarillo,LOW);

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

digitalWrite(led_azul,LOW);
// configuracion de cx serial

pinMode(led_rojo,OUTPUT);

if(valor_analogo>5&&valor_analogo<255){

pinMode(led_verde,OUTPUT);

digitalWrite(led_rojo,HIGH);

pinMode(led_amarillo,OUTPUT);

digitalWrite(led_verde,LOW);

pinMode(led_azul,OUTPUT);

digitalWrite(led_amarillo,LOW);

digitalWrite(led_azul,LOW);
}
}

PARTE PRACTICA
Cambiar la velocidad de un motor DC mediante un
potencimetro. Programa, Simulacin, y Armado.

Mover los 180 grados del servo con un potencimetro.


Programa, Simulacin, y Armado

PARTE PRACTICA
Realizar un sistema que indique las referencias entre 3
leds del conversor anlogo digital. Programa, Simulacin
y Programa.
De 0 a 350 un led
De 356 a 750 dos leds
Mayor a 750 3 leds.

PREGUNTAS

PROGRAMACIN CON ARDUINO


PWM
La conversin anloga digital
permite traer valores anlogos al
Arduino con una referencia de 0 a
255, el control de ancho de pulso
permite enviar esa referencia por
un pin determinado, lo que
hacemos es modificar un pulso
elctrico el tiempo que se
mantenga en 1 lgico.

PROGRAMACIN CON ARDUINO


PWM
El programa a continuacin controlaremos la velocidad
de un motor observando el valor anlogo en la
comunicacin serial mediante un potencimetro por
ende debemos al valor anlogo dividirlo para 4 para
tener una referencia hasta 255

int valor_analogo;//inicializacin de variable


void setup() {
pinMode(10,OUTPUT); // pin declarado como salida
Serial.begin(9600); // configuracin de cx serial
}

void loop() {
valor_analogo=analogRead(0);

// lectura de
canal anlogo

analogWrite(10,valor_analogo/4); //enviar a pin digital /4


Serial.println(valor_analogo/4);
}

// imprimir mensaje

PROGRAMACIN CON ARDUINO


PWM
El programa cambiar la velocidad
del motor dependiendo cuantas
veces se presiona la letra A, y
bajara su velocidad cuando se
presione la letra B, con un mximo
de 5 veces cada una.

PROGRAMACIN CON ARDUINO


PWM
char val;

if(val=='A'){ // condicin de dato de entrada

int valor_pwm=0;

if(valor_pwm<250)

int motor=7;

void setup() {

valor_pwm=valor_pwm+50;
vez en 10%

// incrementar velocidad cada

analogWrite(motor,valor_pwm);

//enviar al pin dicho valor

pinMode(22,OUTPUT);
pinMode(motor,OUTPUT);

Serial1.begin(9600);

if(val=='B'){

void loop() {

if (Serial1.available()>0){

val=Serial1.read();

//condicin de velocidad

//puerto recibe dato


// lee el dato de la cx serial

if(valor_pwm>=50){

//condicin de dato de entrada


// condicin de velocidad

valor_pwm=valor_pwm-50;

// decremento de velocidad en
10%

analogWrite(motor,valor_pwm);

// enviar dicho valor al pin

}
}
}

PROGRAMACIN CON ARDUINO


SERVO MOTOR
El servo motor su funcionalidad es que no gira
360 grados libremente como un motor normal,
es un motor con engranes para que tengan
mayor fuerza y se pueda girar dependiendo de
las necesidades del usuario, generalmente se
usa el HS-311 ya que es el ms comn
comercialmente.

PROGRAMACIN CON ARDUINO


SERVO MOTOR
Realizar un programa que al
presionar un switch el servo
motor gire los 180 grados, caso
contrario vuelva a su posicin
inicial

PROGRAMACIN CON ARDUINO


SERVO MOTOR
#include <Servo.h> // libreria del servo motor pueda
girar
Servo miservo;
// variable de servo motor
int dato=0;

void loop() {
if(digitalRead(8)==HIGH){
miservo.write(180);

void setup() {

delay(15);

// GIRO DE
180
//TIEMPO
DE ESPERA

}
else{
miservo.write(1);
//PRIMER
SERVO VUELVA A POSICIN
INICIAL
delay(15);
// TIEMPO
}

miservo.attach(9); //selecion de pin


para el servo
pinMode(8,INPUT);
}

PREGUNTAS

PARTE PRACTICA
Cambiar la velocidad de un motor DC mediante un
potencimetro. Programa, Simulacin y Armado.

Mover los 180 grados del servo con un potencimetro.


Programa, Simulacin y Armado

PROGRAMACIN CON ARDUINO


LCD
Las pantallas LCD tienen una
interfaz paralela, lo que significa
que el microcontrolador tiene que
manipular varios pines de interfaz
a la vez para controlar la
visualizacin.
#include <LiquidCrystal.h> .

PROGRAMACIN CON ARDUINO


LCD
El programa enviar dos mensajes en la pantalla borrando cada
mensaje antes que aparezca el siguiente.
No olvidar estructuras.
Lcd.begin(c,f)
Lcd.setCursor(c,f)

Lcd.clear()

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {

lcd.begin(16, 2);

// configuracin de lcd

}
void loop() {

lcd.setCursor(0, 0);

Lcd.print(cualquier tipo de dato)

// selection de ubicacin

// print the number of seconds since reset:


lcd.print("HOLA AMIGOS!");
delay(1000);

// retardo

lcd.clear();

// borrado de lcd

lcd.setCursor(0, 1);

// selection de ubicacin

lcd.print("HOLA EJOBS!");

// imprimir mensaje

delay(1000);
lcd.clear();
}

// imprimir mensaje

// retardo
// borrado de lcd

PROGRAMACIN CON ARDUINO


LCD

PREGUNTAS

PARTE PRACTICA
Realizar un sistema que se observe en una LCD el
porcentaje de uso del conversor anlogo digital.
Programa, Simulacin y Armado.
Realizar un sistema que se observe la tecla presionada en
la computadora en la LCD. Programa, Simulacin y
Armado.

PROGRAMACIN CON ARDUINO


TECLADO MATRICIAL
Programacin: Para el uso de teclado
matricial es necesario descargar la
librera keypad.h para el rpido
manejo, cabe recalcar que existen
muchas formas de manejar teclados,
todo depende de la funcionalidad
que se le quiera dar y cuantas teclas
posee, en nuestro caso es el teclado
que se tiene en los telfonos, todos
los nmeros del 0 al 9 ms los signos
de numeral y asterisco.

El entender el manejo del teclado es


algo dificultoso, lo simplificaremos
haciendo referencia que nuestro
teclado es una matriz y al presionar
cada tecla nos dar una ubicacin
de fila y columna, donde la
podemos hacer relacin a un
nmero o letra

MANEJO DE ARRAYS (VECTORES)

Un vector es un agrupacin de datos del


mismo tipo con un orden establecido

Aunque el tamao del vector sea de 5 posiciones, se


accede desde la posicin cero, de esa forma el ltimo
espacio solo tendremos hasta la posicin 4 como indica la
figura.

PROGRAMACIN CON ARDUINO


TECLADO MATRICIAL
El programa siguiente es la
validacin de una contrasea
digitada por medio del teclado
matricial.

PROGRAMACIN CON ARDUINO


TECLADO MATRICIAL
#include <Keypad.h>

const byte ROWS = 4; //four rows

void loop(){

const byte COLS = 3; //three columns

char key = keypad.getKey();

char keys[ROWS][COLS] = {

if (key != NO_KEY){

{'1','2','3'},
{'4','5','6'},

switch(j){

{'7','8','9'},

case 0:

{'#','0','*'}

vect[j]=key;

};
int j =0;

Serial.println(vect[j]);

char vect [3];

j++;

byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad

break;

byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
pinMode(9,OUTPUT);
}

case 1:
vect[j]=key;
Serial.println(vect[j]);
j++;

break;

PROGRAMACIN CON ARDUINO


TECLADO MATRICIAL
case 2:
vect[j]=key;
Serial.println(vect[j]);
j=0;
if(vect[0]=='4'&&vect[1]=='5'&&vect[2]=='6'){
digitalWrite(9,HIGH);
Serial.println("CONTRASENA CORRECTA");
}

else{
digitalWrite(9,LOW);
Serial.println("CONTRASENA
INCORRECTA");
}
break;
}
}
}

PREGUNTAS

PARTE PRACTICA
Realizar el programa anterior donde sea una contrasea
de 4 letras. Programa y Simulacin.

PROGRAMACIN CON ARDUINO


SUBRUTINAS
El uso de subrutinas es la
optimizacin de ciclos mquina
del Arduino, adems del ahorro de
lneas de cdigo ya que pueden
ser reutilizada las veces que se
desee, originalmente se llama
programacin orientada a objetos,
en el caso de interactuar es una
programacin
orientada
a
eventos.

Proceso 1

Subrutina

Proceso 2

Proceso 3

PROGRAMACIN CON ARDUINO


SUBRUTINAS
En la programacin es necesario
definir algunos parmetros para
que funcione adecuadamente.
Void enceder_led (void){
}

El primer void significa si retorna


algn dato la subrutina, es decir si
enviamos un nmero, una letra,
etc.

El segundo void identifica si


necesita parmetros para que
pueda funcionar.

PROGRAMACIN CON ARDUINO


SUBRUTINAS
Funcin sin parmetros.

Funcin con retorno de variable


int dato=8;

int led=8;

int total;

void setup() {

void setup() {

pinMode(led,OUTPUT);
}

void loop() {
encender_led();

pinMode(dato,INPUT);

Llamado de
subrutina

void loop() {
if(digitalRead(dato));

total=suma();

void encender_led (void){

digitalWrite(led,HIGH);

subrutina

Variable de control

int suma (void){

delay(200);

int numero;

digitalWrite(led,LOW);

numero=numero+10;

delay(200);

return numero;

Variable llena
con subrutina
Se pueden declarar
variables locales
Retorna dato

PROGRAMACIN CON ARDUINO


SUBRUTINAS
Funcin con parmetros de entrada

int dato=8,resultado;
int num1=8;
int num2=9;

void setup() {
pinMode(dato,INPUT);
}

void loop() {
if(digitalRead(dato));

Llamado de
subrutina

resultado=suma(num1,num2);

}
int suma (int numero1, int numero2){
int total;
total=numero1+numero2;
return total;
}

Creacin de
subrutina
Retorno de variable

PREGUNTAS

PARTE PRACTICA
Realizar un programa donde el uso de leds y Switch
trabajen con comunicacin serial pero todo con
subrutinas.

PROGRAMACIN CON ARDUINO


PROYECTO
Realizar un sistema de domtica a su
eleccin usando todos los conocimientos
del curso.

Das könnte Ihnen auch gefallen