Den som flaskan pekar på...
Starta med en svepande hand över panelen (Atlantis-stil)
och flaskan börjar snurra.
Denna kan hälpa dig att rita en
flaska för att ersätta pilen.
#include <LedControl.h>
/*
Experiment med HC-SR04 och Uno R3
Snurra flaska..
HC-SR04
VCC till arduino 5v
GND till arduino GND
Echo till Arduino 9
Trig till Arduino pin 10
En Aktiv ton summer på 85 dB 5V.
Montera summer melllan lång pinne (plus) på pinne 11
och kort pinne på GND
8x8 LED display
För att driva den med en Arduino UNO behöver du
library 'LedControl' finns att ladda ner här:
http://playground.arduino.cc/Main/LedControl#Source
Koppla 5V till VCC på LED
Koppla GND till GND på LED
Koppla 7 till DIN på LED
Koppla 6 till CLK på LED
Koppla 5 till CS på LED
*/
//#define Debug
#define TriggerPinne 10
#define EchoPinne 9
int pinneSummer = 11;
long Distans;
boolean AvstandOK = false;
#define Av 0
#define Snurrar 1
int FlaskaStatus = Av;
int Steg = 10;
int PekarPa = 1;
int SnurrFordrojning = 100;
byte Arrow1[8] = {B00011000, B00111100, B01011010, B00011000, B00011000, B00011000, B00011000, B00011000};
byte Arrow2[8] = {B00011111, B00000111, B00001111, B00011101, B00111001, B01110000, B11100000, B11000000};
byte Arrow3[8] = {B00000000, B00000100, B00000010, B11111111, B11111111, B00000010, B00000100, B00000000};
byte Arrow4[8] = {B11000000, B11100000, B01110000, B00111001, B00011101, B00001111, B00000111, B00011111};
byte Arrow5[8] = {B00011000, B00011000, B00011000, B00011000, B00011000, B01011010, B00111100, B00011000};
byte Arrow6[8] = {B00000011, B00000111, B00001110, B10011100, B10111000, B11110000, B11100000, B11111000};
byte Arrow7[8] = {B00000000, B00100000, B01000000, B11111111, B11111111, B01000000, B00100000, B00000000};
byte Arrow8[8] = {B11111000, B11100000, B11110000, B10111000, B10011100, B00001110, B00000111, B00000011};
LedControl lc=LedControl(7,6,5,1);
void setup() {
#ifdef Debug
Serial.begin(9600);
#endif
pinMode(pinneSummer, OUTPUT);
pinMode(TriggerPinne, OUTPUT);
digitalWrite(TriggerPinne, LOW);
pinMode(EchoPinne, INPUT);
KollaDistans();
randomSeed(Distans);
lc.shutdown(0,false);
lc.setIntensity(0,1);
lc.clearDisplay(0);
}
void loop() {
if(FlaskaStatus == Av ){
KollaDistans();
if(Distans < 20 && AvstandOK){
FlaskaStatus = Snurrar;
SnurrFordrojning = 50;
Steg = random(30, 50);
}
}
if(FlaskaStatus == Snurrar){
pipKort();
switch (PekarPa) {
case 1:
TandLeds(Arrow1);
break;
case 2:
TandLeds(Arrow2);
break;
case 3:
TandLeds(Arrow3);
break;
case 4:
TandLeds(Arrow4);
break;
case 5:
TandLeds(Arrow5);
break;
case 6:
TandLeds(Arrow6);
break;
case 7:
TandLeds(Arrow7);
break;
case 8:
TandLeds(Arrow8);
break;
}
PekarPa = PekarPa + 1;
if(PekarPa == 9){
PekarPa = 1;
}
Steg = Steg -1;
if(Steg < 1){
FlaskaStatus = Av;
delay(2000);
pipKort();
}
delay(SnurrFordrojning);
SnurrFordrojning = SnurrFordrojning + 10;
}
}
void TandLeds(byte Num[8]){
for (int i = 0; i <= 7; i = i + 1) {
byte row = Num[i];
lc.setRow(0,i,row);
}
}
void KollaDistans(){
long varaktighet;
delay(100); //vänta på gamla ekon ska dö ut.
digitalWrite(TriggerPinne, HIGH);
delayMicroseconds(10);
digitalWrite(TriggerPinne, LOW);
varaktighet = pulseIn(EchoPinne, HIGH);
Distans = varaktighet/59;
AvstandOK = true;
if (Distans >= 200 || Distans <= 0){
AvstandOK = false;
}
#ifdef Debug
Serial.println(distance);
#endif
}
//Piper en kort.
void pipKort(){
digitalWrite(pinneSummer, HIGH);
delay(10);
digitalWrite(pinneSummer, LOW);
}