Throwduino básico - sensibles a la luz que destella Throwie con 1 parte de agregado - ahora con código Morse (3 / 7 paso)

Paso 3: Programar el Chip

Este es el boceto original - para el bosquejo de código Morse, consulte el paso 7

Después de haber configurado el programador en el ultimo paso, cargar el bosquejo básico de Throwduino del IDE. Ha pegado por debajo y también adjunto.

Editar - puede haber un error en el código:

umbral = (total >> 5); Ajuste el umbral a medio punto (dividir total de 128).

probablemente debe ser:

umbral = (total >> 7); Ajuste el umbral a medio punto (dividir total de 128).

Ha trabajado para mí como era pero esto podría causar problemas con el sensor de luz.  Comprobar y corregir si es necesario.

Si desea cambiar la secuencia de destello de tu thowie ahora es el momento.  Asegúrese de que su código quepan en la memoria del chip que tienes.  No es probable que sea un problema para cualquier cosa más grande que un ATtiny25.  El bosquejo a continuación lleva no mucho más que 1K.  El código siguiente muestra el "1-4-3" conocida secuencia de destellos.  Esto puede, por supuesto, no ser tuyo, tan lejos de hack.

La secuencia flash se lleva a cabo en la matriz y es simplemente una lista de números de flashes.  Éstos se reproducirán con una breve pausa entre cada uno, seguidos de una pausa de 2 segundos antes de repetir.  Por ejemplo, para:

Las fotorresistencias parpadeará una vez, pausa, flash 4 veces, pausa, flash 3 veces, pausa de 2 segundos y repita.

Una vez que el dibujo esté listo, seleccione ATtiny85 1Mz (o sea ATtiny) de la lista de tablas en el IDE.  Si no selecciona la Junta correcta obtendrá un error de compilación (XXXX no definido en este ámbito).  Si consigues esto, compruebe que ha seleccionado un ATtinyX5.

Golpe "upload" en el IDE.  El Arduino Tiny utiliza el ISP de Arduino por defecto.  Debería ver el pin13 condujo en su parpadeo de Arduino como se transfiere el dibujo.

¿Cómo funciona el bosquejo?

Tenemos unas funciones definidas que hacen cosas útiles y quizá quieras usar en hacking:

vacío flash(byte) - parpadea en los tiempos de "Bytes" de LED.
int lightLevel() - devuelve un int que contiene la medición de nivel de luz desde el LED contra el 2.56v interno ref.
vacío setup_watchdog(int) - establece el temporizador de vigilante en valor "int". 10 valores de 0 a 9 corresponden a 16, 32, 64, 128, 250, 500, 1000, 2000, 4000 y 8000 ms.
vacío system_sleep() - pone el sistema a dormir por el tiempo ajustado en la configuración del guardián.

Para empezar nos meter en unos registros para configurar cosas y minimizar el desperdicio de energía.  Luego en configuración de flash 3 veces y mídase el nivel de luz de la 148.  Desechar los primeros 20 y media los 128 restantes.  Esto fija el umbral por el que nos juzgará cuando está oscuro.  Nos flash el LED ese número de umbral antes de continuar.  Esto es más para la depuración de lo útil.

En el bucle principal medir el nivel de luz y comparar el valor de umbral.  Si su bajo valor entonces flash el LED por nuestro patrón preestablecido.  Si el nivel de luz es alta entonces dormimos durante 8 segundos (la más larga que puede) antes de probar otra vez.

Mi agradecimiento a InsideGadgets por este artículo que formó el punto de partida para el código de sueño.  Vale si lo que necesita para restablecer la bandera de interrupción habilitar cada vez que el WDT expira usas o el chip restablecerá la próxima vez.

Bosquejo (esto debería compilar alrededor 1262 bytes):

Throwduino básica
Esofagogastroduodenal 2012
Licencia MIT
Escrito en ATtiny25/45/85 usando Arduino Tiny core - http://code.google.com/p/arduino-tiny/
No compilará para otros Arduinos (ATMega168, ATMega328 etc.)
Asegúrese de que selecciona la Junta correcta antes de compilar.

Ref:
Pines del ADC:
ADC1 = PB2
ADC2 = PB4
ADC3 = PB3

Si desea cambiar el patrón de iluminación, hazlo aquí.
valor por defecto es:
//
flashSeq byte const [3] = {1,4,3};  Patrón de iluminación
//
Esto da 1 flash, pausa, cuatro destellos, pausa, tres destellos, pausa.
Si desea una pausa más larga, utilice 0 para cada 500ms.
Después de la secuencia, esperamos 2s antes de repetir.

flashSeq byte const [3] = {1,4,3};  Patrón de iluminación.  Editar esto.

Cuántas entradas en el patrón de iluminación.
const seqLength bytes = sizeof(flashSeq);

Ahora vamos a hacer un fotorresistencias para esa secuencia...

const int LEDpin = 4; Aunque esto está en una constante, hay un acceso directo del puerto
No trato de cambiar esto sin ir throu' el código entero.

umbral de unsigned int = 10; Esto instalaremos correctamente durante la instalación

Esto establece algunas librerías y definiciones para el uso con el temporizador para dormir
#include < avr/sleep.h >
#include < avr/wdt.h >
#ifndef cbi
#define cbi (sfr, bits) (_SFR_BYTE(sfr) & = ~_BV(bit))
#endif
#ifndef OSE
#define OSE (sfr, bits) (_SFR_BYTE(sfr) | = _BV(bit))
#endif

ISR(WDT_vect) {WDTCR| = B01000000;} / / reset Watchdog Timer al modo de interrupción de cada vez.

Metas con algunos registros para desactivar cosas y referencias.
void setup() {}
ADCSRB & = B10111111; desactivar comparitor
ACSR | = B10000000; Apague comparitor
ADCSRA | = B10000000; / / enciende ADC
DDRB & = B11100000; Set todo para entrada
DDRB| = B00011010; Set 1, 3 y 4 como salida
PORTB & = B11110111; Set PB3 baja - esto era para la fase de prueba.  Probablemente puede ser caído ahora.
PRR y = B11111110; claro ADC disable bit Reg de reducción de potencia
analogReference(6); 2.56v interno de referencia con sin bypass - INTERNAL2v56NB-

Mostrar que estamos despiertos:
Flash(3);  Tres destellos - estamos ya en funcionamiento.


Establecer el umbral para la detección de luz durante los primeros 40 segundos.
Tomar 148 medidas, bin los primeros 20 y media entonces la siguiente 128.
unsigned int total = 0;
para (rep byte = 0; rep < 148; rep ++) {}
int value=lightLevel();
int valor = 10;
if(REP>19) {}
total += valor; tatke total de 128 lecturas
}
Flash(Value);

DDRB & = B11100000; Set todo para entrada
setup_watchdog(4);
system_sleep(); / / sueño de barrio segundo
DDRB| = B00011010; Establecer 1, 3 y 4 como salida
PORTB & = B1110000; Todo bajo
}
umbral = (total >> 7); Ajuste el umbral a medio punto (dividir total de 128).

Flash(THRESHOLD); Esto es principalmente para propósitos de depuración.
}

Bucle principal
Medimos el nivel de luz.  Si es bajo entonces nos flash nuestra secuencia entonces sueño de 2s.
Si luz nivel alto, dormimos para 8s.
void loop() {}
analogReference(6); 2.56v interno de referencia con sin bypass

Medir el nivel de luz y si es lo suficientemente baja, mostrar nuestra secuencia flash
Si (lightLevel() < umbral) {}
para (secuencia de bytes = 0; secuencia < seqLength; secuencia ++)
Flash(flashSeq[Sequence]);
Si nosotros nos parpadea, ahora dormimos de 2s
DDRB & = B11100000; Set todo para entrada
setup_watchdog(7);
system_sleep(); / / sleep durante 2 segundos
DDRB| = B00011010; Set 1, 3 y 4 como salida
PORTB & = B11110111; Pb3 baja.
}
Else {}
Si nosotros no nos parpadea entonces dormimos para 8s
DDRB & = B11100000; Set todo para entrada
setup_watchdog(9);
system_sleep(); / / sleep durante 2 segundos
DDRB| = B00011010; Set 1, 3 y 4 como salida
PORTB & = B11110111; Pb3 baja.
}

} / / fin de bucle principal

Medir el nivel de luz mirando el voltaje generado por el LED conectado a D4 (A2) en pin 3 del chip.
Salida y bajo para comenzar a descargar cualquier tipo de carga - no estoy seguro si necesitamos esto
int lightLevel() {}
pinMode (LEDpin, salida);
digitalWrite (LEDpin, LOW);
delayMicroseconds(50);
pinMode (LEDpin, entrada);
delayMicroseconds(100); Deje que se estabilice como entrada otra vez
unsigned int valor = analogRead(A2);
devolver valor;
}

Flash rutina - 70ms, 250 ms off
Repetir cierto número de veces y luego pausa 500ms
void flash(byte No) {}
pinMode (LEDpin, salida);

if (!. No) {/ / si recibimos un cero, simplemente pausa.
DDRB & = B11100000; Set todo para entrada
setup_watchdog(5);
system_sleep(); / / sleep durante 500 ms
DDRB| = B00011010; Set 1, 3 y 4 como salida
PORTB & = B11110111; Pb3 baja.
}

Si tenemos un número distinto de cero de los flashes, les haremos ahora
para (rep byte = 0; rep < No; rep ++) {}
DDRB| = B00011010; Set 1, 3 y 4 como salida
PORTB & = B11110111; Pb3 baja.
PORTB| = B00010000; PB4 alta
digitalWrite (LEDpin, alto);
Delay(70);
PORTB & = B11101111; PB4 baja.
DDRB & = B11100000; Set todo para entrada
digitalWrite(LEDpin,LOW);
setup_watchdog(4); WDT 3 = 128MS
system_sleep();
}

Pausa (sueño)
DDRB & = B11100000; Set todo para entrada
setup_watchdog(5); WDT 5 = 500MS
system_sleep(); / / dormir
DDRB| = B00011010; Set 1 y 3 como salida
PORTB & = B11110111; Pb3 baja.
}

Configuración del temporizador perro guardián
Esto es específico a ATTiny85 (+ tiny45 & tiny25) y no compila para ATMega328, etc..
0 = 16ms, 1 = 32ms, 2 = 64ms, 3 = 128ms, 4 = 250ms, 5 = 500ms
6 = 1 sec, 7 = 2 seg, 8 = 4 seg, 9 = 8 seg.
void setup_watchdog (int periodo) {}

valor del octeto;
Si período (período > 9) = 9;
valor = período & B111;
Si value| (período > 7) = (1 << 5);
Value| = (1 << WDCE);

MCUSR & = ~ (1 << WDRF);
Iniciar secuencia de tiempo de ciclo de reloj 4
WDTCR | = (1 << WDCE) | (1 << WDE);
definir el nuevo valor de tiempo de espera vigilante
WDTCR = valor;
WDTCR | = _BV(WDIE);
}

del sistema en el estado de sueño
sistema se despierta cuando está agotado wtchdog
void system_sleep() {}
CBI(ADCSRA,Aden);                    interruptor análogo a Digitalconverter

set_sleep_mode(SLEEP_MODE_PWR_DOWN); modo de reposo se encuentra aquí
sleep_enable();

sleep_mode();                        Sistema duerme aquí

sleep_disable();                     Sistema continúa ejecución aquí cuando agotado el tiempo de vigilancia
SBI(ADCSRA,Aden);                    interruptor analógico on Digitalconverter
PRR y = B11111110; claro ADC disable bit Reg de reducción de potencia
}

Artículos Relacionados

Bola que destella LED con agua salina

Bola que destella LED con agua salina

La bola de LED es un proyecto basado en la propiedad eléctrica de agua salina. Primero poner el cátodo del LED en una taza con agua salada, conecta el ánodo al polo positivo de una batería y también conectar un cable al polo negativo de la batería. S
Arduino + WiFi, música sensible accesorio de luz LED

Arduino + WiFi, música sensible accesorio de luz LED

este instructable le da instrucciones para construir un Saiko5 WiFi activado LED luminaria basada en la plataforma de Arduino aficionado. Incluye instrucciones paso a paso desde el diseño de la Junta a soldar para integración de caso, así como las in
Luz que brilla intensamente de la bicicleta

Luz que brilla intensamente de la bicicleta

mi hijo le encanta la película "Tron" y quería la moto de luz que está en la película. Ya... Hacen, pero... Es de 50 + gran manera que no va a suceder, lo siento amigo.  Por cierto este es mi primer instructivo, así que por favor sea paciente. Q
Dr que TARDIS diadema con intermitente efecto luz y sonido

Dr que TARDIS diadema con intermitente efecto luz y sonido

Así, mi amigo es un gran que fan (como soy). Ella tiene el vestido de la TARDIS y los calcetines y todo. Dijo que también venden una diadema TARDIS con un poco de luz en la parte superior. Sin embargo, la luz es solo plástico y no se enciende. Era un
Tira de la energía en el día y la noche!: toma de corriente sensible A la luz

Tira de la energía en el día y la noche!: toma de corriente sensible A la luz

día y noche tira de la energía es un poder capaz de cambiar su producción dependiendo de la luz que recibe en su superficie. Sus sensores son LDRs que son resistencias básicamente variables que cambian dependiendo de la intensidad de la luz que recib
Panel de la puerta de luz de Navidad que destella

Panel de la puerta de luz de Navidad que destella

Se trata de un panel de la puerta de luz de Navidad que hice para una concurso de decoración de la puerta. Perdí.  De todos modos, pensé que sería postearlo aquí.  Mina adapta a las dimensiones de la puerta, pero podría hacerlo en cualquier tamaño y
Hacer una luz de noche LED con estrella

Hacer una luz de noche LED con estrella

Esta luz nocturna LED cuenta con un patrón de estrella y se ilumina una habitación oscura en una forma mágica. He utilizado ipe para la madera, sin embargo todo oscuro, o MDF pintado por ejemplo se trabajaría bien. Este es un muy divertido proyecto y
Controlar cualquier aparato luz o eléctrico con tablet o smartphone (wifi)

Controlar cualquier aparato luz o eléctrico con tablet o smartphone (wifi)

Controlar cualquier aparato ligero o eléctrico con tablet o smartphone (wifi) usando arduino, blynk y un wemos / Junta de ESP8266En este tutorial vamos a hacer algo pido un wifi controlado interruptor de CA. (Pero también funciona para las aplicacion
¿Qué es la luz? Sondeo alrededor con mi DIY espectroscopio

¿Qué es la luz? Sondeo alrededor con mi DIY espectroscopio

Recientemente conseguí un kit de escritorio espectroscopia de publiclab! Realmente tuve muy divertido edificio y sondeo de fuentes de luz con su infierno. Su un juego impresionante con todos los elementos necesarios para conseguir tu propio espectros
Switch luz de Wi-Fi con frambuesa Pi

Switch luz de Wi-Fi con frambuesa Pi

¡ Hola! En este instructable, voy a mostrarte cómo construí mi interruptor de la luz de Wi-Fi con una Raspberry Pi y algunos componentes básicos. Tenga en cuenta que este es mi primer instructivo y no soy muy bueno en explicar las cosas, así que voy
Señal de tráfico / luz de freno cables con controlador Arduino

Señal de tráfico / luz de freno cables con controlador Arduino

siempre ha querido una vieja señal de tráfico y finalmente consiguió uno recientemente.  Sin embargo, fue muy simple cableado para que todas las luces estaban fijos en.  ¿Qué divertido es esto?  También quería probar un controlador Arduino y pensé qu
Reparación de un montaje de luz de la bici con la impresión 3D

Reparación de un montaje de luz de la bici con la impresión 3D

impresoras 3D tienen increíbles posibilidades para hacer nuestro mundo mejor, pero desafortunadamente muchas de las cosas que la gente imprime ellos tienen poco o ningún valor útil.  Desde una perspectiva ambiental, impresión 3D está lejos de ser per
ESPECTÁCULO de luz cristal motorizado LED con VIDEO

ESPECTÁCULO de luz cristal motorizado LED con VIDEO

este instructable le dará un conocimiento medio sobre cómo hacer un espectáculo de luces de cristal motorizadas. Es muy hermosa y por favor voten por él en el haz del LED hacia fuera COMP. Tampoco soy bueno en dibujo esquemas:). También perdón por no
Construir un cambio de color, luz de noche LED con pilas

Construir un cambio de color, luz de noche LED con pilas

un pequeño pero poderoso con pilas luz de la noche.  Seleccione de modos diferentes de color sólido o disco modo llamativo!  También haría una luz excelente bicicleta.  Construido a partir de 7 LEDs de color y un dot-it.Encontré estos LEDs comprando