Accelerometer tärningarna med 123D kretsar (4 / 8 steg)
Steg 4: Arduino koden
1) Arduino koden för bakbord version är i 123D kretsar projektet, bara klicka på Arduino klicka sedan på "Arduino kod Editor"
2) Arduino koden för de större mer kraftfull versionen är på denna sida - rulla ned.
Här är en länk till den accelerometer bibliotek. https://code.Google.com/p/mma7361-Library/
#include < AcceleroMMA7361.h > //should vara i dokument/Arduino/bibliotek (på Mac)
Ladda ner det här https://code.google.com/p/mma7361-library/
kartläggning av Arduino styrelsen att det stora 7-segmentet från Sparkfun, bokstaven är segmentet, numret är Aruino Digital utgång
https://www.Sparkfun.com/products/8530
en
f b
g
e c
d
int en = 0;
int b = 6;
int c = 5;
int d = 4;
int e = 3;
int f = 1;
int g = 2;
kartläggning av accelerometer styrelse från sparkfun, är dessa Arduino utgångar
https://www.Sparkfun.com/products/9652
int st = 8. självtest (output från Arduino)
int gsel = 9. g-force sortiment, +-1,5 g och + - 6 g (matas från Arduino)
int zg = 10; noll g (ingång till Arduino)
int slp = 11; sömn (output från Arduino)
AcceleroMMA7361 accelero; accelero objekt skapas
Rutinen installationsprogrammet körs en gång när du trycker på reset-knappen på Arduino eller driva upp:
void setup() {
initiera digital PIN-koden som en utgång.
pinMode (a, utgång);
pinMode (b, produktionen);
pinMode (c, produktionen);
pinMode (d, produktionen);
pinMode (e, produktionen);
pinMode (f, produktionen);
pinMode (g, produktionen);
writeDigit(-1); Stäng av alla segment
Serial.BEGIN(9600); avkommentera raden för felsökning, det kommer annars att röra med siffror!
Accelero.BEGIN (slp, st, zg, gsel, A0, A1, A2); config accelero att använda stift från ovan och läsa analoga värden från A0, A1, A2
accelero.setARefVoltage(5); tala om accelero att AREF spänning 5V (för att få högre upplösning skulle du ställa detta 3.3 och blå-tråd det i styrelsen)
accelero.setSensitivity(LOW); ställer in känsligheten till +-1.5G
Accelero.Calibrate(); Du måste göra detta för bromsljus, förmodligen inte dice.
}
void writeDigit (int tecken) {//calling denna funktion sätter de segment som ska se ut som en intiger 0-9, visar vi aldrig 0 eller 9. -1 är allt bort.
Serial.Print ("siffra:");
Serial.Print(DIGIT);
Serial.Print("\n");
Switch(DIGIT) {
fall 0:
digitalWrite (en, hög);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, hög.
digitalWrite (e, hög).
digitalWrite f, hög.
digitalWrite g, låg.
bryta;
fall 1:
digitalWrite (en, låg);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, låg.
digitalWrite (e, låg).
digitalWrite f, låg.
digitalWrite g, låg.
bryta;
fall 2:
digitalWrite (en, hög);
digitalWrite b, hög.
digitalWrite (c, låg).
digitalWrite d, hög.
digitalWrite (e, hög).
digitalWrite f, låg.
digitalWrite g, hög.
bryta;
fall 3:
digitalWrite (en, hög);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, hög.
digitalWrite (e, låg).
digitalWrite f, låg.
digitalWrite g, hög.
bryta;
fall 4:
digitalWrite (en, låg);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, låg.
digitalWrite (e, låg).
digitalWrite f, hög.
digitalWrite g, hög.
bryta;
fall 5:
digitalWrite (en, hög);
digitalWrite b, låga.
digitalWrite (c, hög).
digitalWrite d, hög.
digitalWrite (e, låg).
digitalWrite f, hög.
digitalWrite g, hög.
bryta;
fall 6:
digitalWrite (en, hög);
digitalWrite b, låga.
digitalWrite (c, hög).
digitalWrite d, hög.
digitalWrite (e, hög).
digitalWrite f, hög.
digitalWrite g, hög.
bryta;
fall 7:
digitalWrite (en, hög);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, låg.
digitalWrite (e, låg).
digitalWrite f, låg.
digitalWrite g, låg.
bryta;
mål 8:
digitalWrite (en, hög);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, hög.
digitalWrite (e, hög).
digitalWrite f, hög.
digitalWrite g, hög.
bryta;
mål 9:
digitalWrite (en, hög);
digitalWrite b, hög.
digitalWrite (c, hög).
digitalWrite d, hög.
digitalWrite (e, låg).
digitalWrite f, hög.
digitalWrite g, hög.
bryta;
fall -1:
digitalWrite (en, låg);
digitalWrite b, låga.
digitalWrite (c, låg).
digitalWrite d, låg.
digitalWrite (e, låg).
digitalWrite f, låg.
digitalWrite g, låg.
bryta;
}
}
int get_g() {//gets längden på g force vektorer
int x = accelero.getXAccel();
int y = accelero.getYAccel();
int z = accelero.getZAccel();
int gf = abs(sqrt(x*x+y*y+z*z)-100); -"100" är ungefär att subtrahera ut gravitation
om (gf > 50) {
Serial.Print ("g:");
Serial.Print(GF);
Serial.Print("\n");
}
returnera gf;
}
int siffra = 0;
int count = 0; räknaren
int count2 = 0; en annan counter
int state = 0;
0 = inaktiv
1 = skaka
2 = show_result
int summa = 0;
int cur = 0;
int res;
loop rutinen körs för evigt om och om igen:
void loop() {
cur = get_g();
summa += cur;
om (summan < 0) summan = 0;
Switch(State) {
fall 0: / / idle stat, om cur är > 70 går sedan till staten 1
om (cur > 70) {
State = 1;
Count = 0;
count2 = 0;
}
bryta;
fall 1: / / aktivt skakar,
om (count2 == 10) {/ / 10 är 100ms
writeDigit (summa % 6 + 1). Visa ett slumpmässigt numrera varje 100ms. Summan är ett slumptal beroende på hur länge koden körs och hur du skakar dör.
count2 = 0;
} annat {
count2 ++;
}
om (cur > 55) {/ / här fram till pausen är det att kontrollera hur lång tid det har varit sedan skakar stannade, om över 250ms utan att se g > 55 gå till staten 2
State = 1;
Count = 0;
} annat {
om (count > 25) {
State = 2;
Count = 0;
} annat {
greve ++;
}
}
bryta;
fall 2: / / visar resultatet, fördröjningstiderna är i ~ hundradels sekunder
om (greve == 0) writeDigit (summa % 6 + 1).
om (greve == 10) writeDigit (summa % 6 + 1).
om (greve == 25) writeDigit (summa % 6 + 1).
om (greve == 45) writeDigit (summa % 6 + 1).
om (greve == 70) writeDigit (summa % 6 + 1).
om (greve == 100) writeDigit (summa % 6 + 1).
om (greve == 135) {/ / från här för att stänga av {} visar det slutliga resultatet, sakta ner som det går
Res = summa % 6 + 1.
writeDigit(res);
}
om (greve == 185) writeDigit(-1);
om (greve == 235) writeDigit(res);
om (greve == 285) writeDigit(-1);
om (greve == 335) {
writeDigit(res);
State = 0;
Count = 0;
}
greve ++;
bryta;
}
Delay(10);
avkommentera ut denna lilla loop att testa att alla segment arbetar. (kommentera ut de övriga "ogiltiga loop"-raderna)
void loop() {
writeDigit(8);
Delay(10);
}