Arduino mikro elektronisk bubblan (4 / 5 steg)
Steg 4: Koden för att göra det gå!
Koden för denna lilla projekt det ganska enkelt också.
Eftersom sensorn utgångar det är signaler som X och Y-värden. Allt vi egentligen behöver göra är läsa värdena och konvertera dem till något "verkliga världen" som vi kan visa på vår 5110 LCD.
Koden ställer in 5110 displayen. Ritar en liten tjurar öga och sedan börjar läsa x, y data från memsic.
Det gör då ett par mappningar till konvertera 3000 till 6000(ish) utgång till 2 värden.
Etapp ett kartor memsic produktionen till en skala för att visa både x och y (0-48) och (0-84) så vi kan visa och animera bubblan runt displayen.
Det finns också en seriell utgång som skickar rådata till usb. du behöver inte använda den. men den finns där om det behövs.
Den andra etappen kartläggning sedan skalar display skalorna till -90 till 90 för X ad Y textetiketter på displayen i vinklar. (detta är en ungefärlig vinkel display) vi inte är oroande om noggrannhet utan nivå. Vi vill bara ha en allmän uppfattning!
Här är koden...
#include < SPI.h >
Arduino micro ledde visuellt hänseende
#include < Adafruit_GFX.h >
#include < Adafruit_PCD8544.h >
Adafruit_PCD8544 display = Adafruit_PCD8544 (5, 6, 7, 8, 9);
stift 2 - seriell klocka ut (SCLK) 5
stift 3 - seriell data ut (DIN) 6
stift 4 - Data/kommandot Välj (D/C) 7
stift 12 - LCD chip Välj (CS) 8
stift 11 - LCD reset (RST) 9
CONST int X = A4; X stift på m2125
CONST int Y = A5; Y stift på m2125
int jag = 0;
int dist, inv = 0;
booleska stan = 0;
void setup() {
Ställ in följetong
Serial.BEGIN(9600);
pinMode (X, indata);
pinMode (Y, indata);
display.BEGIN();
display.setContrast(50);
display.clearDisplay();
}
void loop() {
Läs i puls data
int pulseX, pulseY;
int angleX, angleY;
int accelerationX, accelerationY;
pulseX = pulseIn(X,HIGH);
pulseY = pulseIn(Y,HIGH);
karta data för displayen i nokia
accelerationX = karta (pulseX, 3740 6286, 48, 0);
accelerationY = karta (pulseY, 3740, 6370, 84, 0);
kartdata till rå vinklar
angleX = map(accelerationX,48,0,-90,90);
angleY = map(accelerationY,0,84,-90,90);
display.drawRect(0,0,84,48,BLACK);
display.drawLine (42, 0, 42, 48, svart);
display.drawLine (0, 84, 24, 24, svart);
display.drawCircle(42,24,10,BLACK);
Visa bubbla
display.fillCircle(accelerationY,(accelerationX),4,BLACK);
display.setCursor(4,4);
display.println ("X:" + String(angleX));
display.setCursor(4,38);
display.println ("y" + String(angleY));
display.display();
display.clearDisplay();
Skicka data till seriella ifall vi skulle vilja se vad rapporteras och
möjliga pc-användning senare
Serial.Print("X");
Serial.Print(pulseX);
Serial.Print("Y");
Serial.Print(pulseY);
Serial.println("");
fördröja en data-feed att vi inte överskridit seriella
Delay(90);
}