Cykel norr indikator (6 / 10 steg)
Steg 6: Firmware
Piezo summern surrar automatiskt vid ~ 1Hz. Du kan ladda upp koden nedan om du vill höra den fulla surrande potentialen av summern.
#include < Wire.h >
#define Addr 0x1E / / 7-bitars adress HMC5883 compass
booleska Summer = 0;
lagring variabel för riktning
int x;
int y;
int z;
kalibrera dessa
int xVal =-185;
int yVal = 300;
int zVal =-115;
int tolerans = 90. //adjust att ändra känslighet
void setup() {
Wire.BEGIN();
Serial.BEGIN(9600);
Ställ in läge för kontinuerlig
Wire.beginTransmission(Addr);
Wire.write(byte(0x02));
Wire.write(byte(0x00));
Wire.endTransmission();
pinMode(7,OUTPUT);
}
void loop() {
Serial.Print("X=");
Serial.Print(x);
Serial.Print (", Y =");
Serial.Print(y);
Serial.Print (", Z =");
Serial.println(z);
Initiera kommunikation med kompass
Wire.beginTransmission(Addr);
Wire.write(byte(0x03)); Skicka förfrågan till X MSB register
Wire.endTransmission();
Wire.requestFrom (Addr, 6); Begäran 6 byte. 2 byte per axel
IF(Wire.available() < = 6) {/ / om 6 byte tillgängligt
x = Wire.read() << 8 | Wire.Read();
z = Wire.read() << 8 | Wire.Read();
y = Wire.read() << 8 | Wire.Read();
}
om (abs(xVal-x) < tolerans) {/ /
om (abs(yVal-y) < tolerans) {
om (abs(zVal-z) < tolerans) {
summern = 1;
}
annat {
summern = 0;
}
}
annat {
summern = 0;
}
}
annat {
summern = 0;
}
om (Summer) {
digitalWrite(7,HIGH);
}
annat {
digitalWrite(7,LOW);
}
Delay(500);
}
Jag hittade detta surrande att vara lite mycket så jag pulsade makt på och av att summern att tysta det lite. Se koden nedan:
#include < Wire.h >
#define Addr 0x1E / / 7-bitars adress HMC5883 compass
booleska Summer = 0;
lagring variabel för riktning
int x;
int y;
int z;
kalibrera dessa
int xVal =-185;
int yVal = 300;
int zVal =-115;
int tolerans = 90. //adjust att ändra känslighet
void setup() {
Wire.BEGIN();
Serial.BEGIN(9600);
Ställ in läge för kontinuerlig
Wire.beginTransmission(Addr);
Wire.write(byte(0x02));
Wire.write(byte(0x00));
Wire.endTransmission();
pinMode(7,OUTPUT);
}
void loop() {
Serial.Print("X=");
Serial.Print(x);
Serial.Print (", Y =");
Serial.Print(y);
Serial.Print (", Z =");
Serial.println(z);
Initiera kommunikation med kompass
Wire.beginTransmission(Addr);
Wire.write(byte(0x03)); Skicka förfrågan till X MSB register
Wire.endTransmission();
Wire.requestFrom (Addr, 6); Begäran 6 byte. 2 byte per axel
IF(Wire.available() < = 6) {/ / om 6 byte tillgängligt
x = Wire.read() << 8 | Wire.Read();
z = Wire.read() << 8 | Wire.Read();
y = Wire.read() << 8 | Wire.Read();
}
om (abs(xVal-x) < tolerans) {
om (abs(yVal-y) < tolerans) {
om (abs(zVal-z) < tolerans) {
summern = 1;
}
annat {
summern = 0;
}
}
annat {
summern = 0;
}
}
annat {
summern = 0;
}
om (Summer) {
digitalWrite(7,HIGH);
Delay(100);
digitalWrite(7,LOW);
}
Delay(500);
}