Stap 4: De Code
De Code:Hier is de eerste versie van de code, veel verbetering nodig. Er zijn sommige bibliotheken i´m niet gebruiken op de hoofdlus, maar kan worden gebruikt voor het wijzigen van het gedrag van de lamp.
Dus geniet van! ;-)
/ * Gemaakt door voor de wedstrijd SeeedStudio Toy Hack
Base don de voorbeelden van de bewegingssensor, begrip sensor, knop servo en anderen.
www.arduinoarts.com * /
#include < Servo.h >
Const int buttonPin = 4; schakelaar staat
int buttonState = 0; variabele voor het lezen van de drukknop status
Servo Setup
Servo myservo2;
Servo myservo; maken van servo-object om te bepalen van een servo
int pos = 0; variabele op te slaan van de servo positie
int pos2 = 0; variabele op te slaan van de servo positie
int val1;
int val2;
LED SETUP
Const int ledPin2 = 5; //Base licht
Const int ledPin = 12; //Lamp licht
int countlamp2 = 0; aantal lussen op de servo
Geluid installatie
Const int thresholdvalue = 300; //The drempel lawaai reactie
Versnellingsmeter SETUP
int ystate;
int xstate;
#include < Wire.h >
#define MMA7660addr 0x4c
#define MMA7660_X 0x00
#define MMA7660_Y 0x01
#define MMA7660_Z 0x02
#define MMA7660_TILT 0x03
#define MMA7660_SRST 0x04
#define MMA7660_SPCNT 0x05
#define MMA7660_INTSU 0x06
#define MMA7660_MODE 0x07
#define MMA7660_SR 0x08
#define MMA7660_PDET 0x09
#define MMA7660_PD 0x0A
klasse versnelling
{
publiek:
char x;
char y;
char z;
};
char index;
char controle;
char staat;
int audiodelay = 1000;
VOID mma7660_init(void)
{
Wire.begin();
Wire.beginTransmission (MMA7660addr);
Wire.send(MMA7660_MODE);
Wire.send(0x00);
Wire.endTransmission();
Wire.beginTransmission (MMA7660addr);
Wire.send(MMA7660_SR);
Wire.send(0x07); Monsters/seconde actief en Auto-slaap-modus
Wire.endTransmission();
Wire.beginTransmission (MMA7660addr);
Wire.send(MMA7660_MODE);
Wire.send (0x01); //active-modus
Wire.endTransmission();
}
VOID Setup
{
mma7660_init(); Join i2c bus (adres facultatief voor master)
Serial.begin(9600);
Bewegingssensor
pinMode (6, INPUT); //Use pin 2 om het signaal door de module output
Lamp licht en basis licht
pinMode (ledPin, OUTPUT);
pinMode (ledPin2, OUTPUT);
SERVO 'S
AUDIO
DDRD | = 0X0C; D2 en D3 in schrijfmodus;
PORTD & = 0xF3; D2 en D3 is ingesteld op laag;
Lawaai sensor op analoge 0
SCHAKELAAR
pinMode (buttonPin, INPUT);
}
VOID rec_2_begin()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
}
VOID rec_2_stop()
{
PORTD & = 0xF3;
}
VOID play_2()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
delay(audiodelay);
PORTD & = 0xF3;
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
functie voor het bepalen van de segment_3
VOID rec_3_begin()
{
PORTD = (PORTD | 0b00001000) & 0b11111011;
}
VOID rec_3_stop()
{
PORTD & = 0xF3;
}
VOID play_3()
{
PORTD = (PORTD | 0b00001000) & 0b11111011;
delay(audiodelay);
PORTD & = 0xF3;
}
/////////////////////////////////////////////////////
////////////////////////////////////////////////
functie voor het bepalen van de segment_4;
VOID rec_4_begin()
{
PORTD = PORTD | 0b00001100;
}
VOID rec_4_stop()
{
PORTD & = 0xF3;
}
VOID play_4()
{
PORTD = PORTD | 0b00001100;
delay(audiodelay);
PORTD & = 0xF3;
}
//////////////////////
VOID check_move()
{
int sensorValue = digitalRead(6);
if(sensorValue==1)
{
digitalWrite(ledPin,HIGH);
Serial.println (sensorValue, DEC); //Print de stand van het signaal via de seriële monitor.
servo1();
}
anders
{
digitalWrite(ledPin,LOW);
Serial.println (sensorValue, DEC); //Print de stand van het signaal via de seriële monitor.
Servo2();
}
}
VOID servo1_right()
{
myservo.attach(9);
voor (pos = 90; pos < 180; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
/ * play_2();
delay(1000);
voor (pos = 180; pos > = 90; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}*/
}
VOID servo1_left()
{
myservo.attach(9);
voor (pos = 90; pos > 1; pos-= 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}/*
play_2();
delay(1000);
voor (pos 1; = pos < = 90; pos += 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}*/
}
VOID servo1_return()
{
myservo.attach(9);
int posact = myservo.read();
Als (myservo.read() > 90) {}
voor (pos = posact; pos > 90; pos-= 1) / / terug naar 90
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
}
else {}
voor (pos posact; = pos < = 90; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
}
}
VOID servo2_right()
{
myservo2.attach(10);
voor (pos = 90; pos < 120; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo2.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
/ * play_2();
delay(1000);
voor (pos = 180; pos > = 90; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}*/
}
VOID servo2_left()
{
myservo2.attach(10);
voor (pos = 90; pos > 60; pos-= 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo2.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}/*
play_2();
delay(1000);
voor (pos 1; = pos < = 90; pos += 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}*/
}
VOID servo2_return()
{
myservo2.attach(10);
int posact = myservo2.read();
Als (myservo2.read() > 90) {}
voor (pos = posact; pos > 90; pos-= 1) / / terug naar 90
{/ / in stappen van 1 graad
myservo2.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
}
else {}
voor (pos posact; = pos < = 90; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo2.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
}
}
VOID servo1_no()
{
myservo.attach(9);
voor (pos = 90; pos < 120; pos += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 120; pos > = 90; pos-= 1) / / gaat van 180 graden tot 0 graden
{
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(10); wacht 15ms voor de servo te bereiken de positie
}
}
VOID servo2()
{
myservo2.attach(10);
voor (pos2 = 110; pos2 < 140; pos2 += 1) / / gaat van 0 graden tot 180 graden
{/ / in stappen van 1 graad
myservo2.write(pos2); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
}
VOID servo1R()
{
myservo.write(90);
myservo.Detach();
}
VOID servo2R()
{
myservo2.write(90);
myservo2.Detach();
}
VOID lampblink()
{
int sensorValue = digitalRead(6);
Als (sensorValue = 1) {}
digitalWrite(ledPin,HIGH);
vertraging (1);
digitalWrite(ledPin,LOW);
vertraging (1);
//}
anders
digitalWrite(ledPin,LOW);
}
VOID lamptest()
{
for (int i = 0; ik < 100; i ++)
{
digitalWrite (12, hoge);
delay(50);
digitalWrite (12, laag);
delay(50);
}
}
VOID lampoff()
{
vertraging (2000);
digitalWrite (ledPin, laag);
}
versnellingsmeter
VOID Ecom()
{
unsigned char val [3];
int count = 0;
Val [0] = val [1] = val [2] = 64;
Wire.requestFrom(0x4c, 3); 3 bytes voor aanvragen vanaf slave apparaat 0x4c
while(Wire.available())
{
if(count < 3)
terwijl (val [graaf] > 63) / / herladen ding het is slecht
{
Val [graaf] = Wire.receive();
}
Graaf ++;
}
transformatie de 7 bit nummer aangemeld met een 8 bit nummer ondertekend.
Versnelling ret;
Ret.x = ((char) (val [0] << 2)) / 4;
Ret.y = ((char) (val [1] << 2)) / 4;
Ret.z = ((char) (val [2] << 2)) / 4;
ystate = ret.y;
xstate = ret.x;
Serial.Print ("x =");
Serial.println(Ret.x,DEC); afdrukken van de lezing
Serial.Print ("y =");
Serial.println(Ret.y,DEC); afdrukken van de lezing
Serial.Print ("z =");
Serial.println(Ret.z,DEC); afdrukken de lezing * /
}
lezing char = 0;
void loop
{
Ecom(); staat van de versnellingsmeter controleren
digitalWrite(ledPin2,HIGH);
buttonState = digitalRead(buttonPin); Lees de stand van de schakelaar
Als (buttonState == HIGH)
{
lampblink(); / / LED inschakelen:
myservo.attach(9); de servo op pin 9 hecht aan de servo-object
myservo2.attach(10); de servo op pin 9 hecht aan de servo-object
val1 = ystate; leest de waarde van de potentiometer (waarde tussen 0 en 1023)
val1 = kaart (val1, 30 -30, 0, 179); schaal om het te gebruiken met de servo (waarde tussen 0 en 180)
myservo2.write(val1); stelt u de positie van de servo volgens de geschaalde waarde
val2 = xstate; leest de waarde van de potentiometer (waarde tussen 0 en 1023)
val2 = kaart (val2, 179, -30, 30, 0); schaal om het te gebruiken met de servo (waarde tussen 0 en 180)
myservo.write(val2); stelt u de positie van de servo volgens de geschaalde waarde
Als (ystate < -15) {}
play_3();
}
}
else {}
geluid zoeken
int sensorValue2 = analogRead (A0); //noise sensor
Serial.println(sensorValue2);
if(sensorValue2>thresholdvalue)
{
Serial.println("Yes");
digitalWrite(ledNoise,HIGH);
play_4();
lampoff();
lampblink();
servo1_no();
servo1_no();
servo1R();
delay(1000);
}
anders
{
lampoff();
}
zoeken naar beweging
int sensorValue = digitalRead(6); bewegingssensor
if(sensorValue==1)
{
Serial.println("Move");
movestate = 1;
lampblink();
Servo2();
servo2_right();
servo1_right();
play_2();
vertraging (1000);
servo2_return();
servo1_return();
servo1_left();
servo2_left();
play_2();
vertraging (1000);
servo2_return();
servo1_return();
delay(1000);
}
anders
{
digitalWrite(ledNoise,LOW);
Servo2();
servo1R();
servo2R();
lampoff();
play_2();
movestate = 0;
}
}
}