En animering inuti en vatten droppe Physalia (7 / 11 steg)
Steg 7: Arduino programmering
För att testa teorin vi sköt ett antal bilder med samma dröjsmål och de var alla väldigt lika. Vi insåg också att, genom att bli av potentiometern och all kommunikation med den bärbara datorn, bilderna var mer liknande som två droppar vatten!
För att testa teorin vi sköt ett antal bilder med samma dröjsmål och de var alla väldigt lika. Vi insåg också att, genom att bli av potentiometern och all kommunikation med den bärbara datorn, bilderna var mer liknande som två droppar vatten! Vi rensade koden och lagt till några idéer för att göra systemet mer trovärdig, som att lägga till en millisekund efter varje 1000 mikrosekunder att hjälpa Arduino hantera så stora mängder av siffror.
KOD:
"Entropi Machine" för IDN Magazine av Physalia. Kodad av Jordi Planas & Pablo Barquin
#include < Servo.h >
int flash1 = 9; Stift del Flash 1 pin 9
int flash2 = 12. Stift del Flash 2 stift 11
int laser = 2; PIN-del fotodiodo
int camara = 3; PIN-del optoacoplador donde se conecta la camara
int boton1 = 7. Boton de disparo de foto
int boton2 = 13. Boton de repeticion de foto (ingen incrementar)
booleska clic1 = false; Buleano para el boton 1
booleska clic2 = false; Buleano para el boton 2
booleska laserState = false; Buleano del laser
int jag = 1; Variabel que cuenta las gotas (primera o segunda)
Servo servo1; Crea FN heta servo
int f = 0; Numero de fotos para DEBUG
////////////////////////// TIEMPOS //////////////////////////////////////////////////////////////////////////////
int delai = 0; Espera sv milisegundos para la primera foto
int delaim = 0; Dröjsmål inicial al que se le suma el l'incremento
int l'incremento = 250; L'incremento en microsegundos
int guardarfoto = 4000; Espera de la camara para guardar la foto
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.BEGIN(9600); Activar para hacer DEBUG
pinMode (flash1, produktionen);
pinMode (flash2, produktionen);
pinMode (laser, indata);
pinMode (camara, produktionen);
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
servo1.attach(6);
servo1.write(0); Posicion inicial del servo
}
void loop() {
botones();
om (clic1 == true) {//Si el boton esta pulsado
lecturalaser(); Ejecutamos la funcion lecturalaser
}
{//Si el boton ingen esta pulsado
} //No ocurre nada
}
void lecturalaser() {
laserState = digitalRead(laser);
om (laserState == hög) {//Si el laser ingen esta interrumpido
} //No ocurre nada
annat {//Si el laser se interrumpe (låg)
Foto(); Se ejecuta la funcion foto
}
}
void botones() {
int dclic1 = digitalRead(boton1);
int dclic2 = digitalRead(boton2);
IF(dclic1==High) {
clic1 = sant;
}
IF(dclic2==High) {
clic2 = sant;
}
}
void foto() {
om (jag == 1) {//Si solo ha pasado una gota por el laser
Delay(20); Debounce del laser
digitalWrite (camara, hög); Empezamos en obturar con la camara
jag = jag ++; Sumamos 1 jag para que dispare a la segunda gota
}
annat {//Si jag = 2
disparo(); Ejecutamos la funcion disparo
Jag = 1; Jag vuelver en valer 1
}
}
void disparo() {
om (clic2 == true) {//Si el boton 2 ha sido pulsado
Delay(DELAI); Esperamos "delai"
delayMicroseconds(delaim); Esperamos el l'incremento sv Microsegundos
flasheo(); Ejecutamos flasheo
}
annat {//Si el boton 2 nr ha sido pulsado
incrementar(); Incrementamos la espera ejecutando la funcion incrementar
Delay(DELAI); Esperamos "delai"
delayMicroseconds(delaim); Esperamos el l'incremento sv Microsegundos
flasheo(); Ejecutamos flasheo
Motion(); Movemos la rörelse
}
}
void flasheo() {
digitalWrite (flash1, hög); Disparamos el flash 1
digitalWrite (flash2, hög); Disparamos el flash 2
Delay(10); Le Reginas tiempo al flash mientras recibe un Impulse
digitalWrite (camara, låg);
digitalWrite (flash1, låg); Apagamos el flash 1
digitalWrite (flash2, låg);
clic1 = false; Quitar si queremos las gotas automaticas
clic2 = false;
/*f = f++;
Serial.println ("fördröja Inicial:"); DEBUG
Serial.println(DELAI);
Serial.println ("fördröja Microsegundos:");
Serial.println(delaim);
Serial.println ("Numero de fotos:");
Serial.println(f); */
}
void motion() {
Delay(300);
servo1.write(90);
Delay(100);
servo1.write(0);
/*
Serial.println("Motion"); DEBUG
Serial.println("Esperando");
Delay(guardarfoto); Esperamos en que la camara guarde la foto
Serial.println("listo!!!"); */
}
void incrementar() {
delaim += l'incremento;
om (delaim > 1000) {
delaim = delaim-1000;
DELAI = delai ++;
}
}