SuperScope: Kretssimulering via Arduino-Processing gränssnitt (4 / 5 steg)
Steg 4: Usch... bara 94 rader denna gång
Arduino koden:
///////////////////////////////
#include < math.h >
byte chargePin = 9;
byte triggerPin = 8;
byte noninvertingPin = A0;
byte invertingPin = A1;
flyta constRes = 100;
osignerade långa timeStart;
osignerade långa timeEnd;
osignerade långa timeDelta;
osignerade långa kapacitans;
osignerade långa induktans;
osignerade långa motstånd;
osignerade långa frekvens;
Strängen str;
char c;
void setup() {
Serial.BEGIN(9600);
pinMode (chargePin, produktionen);
pinMode (triggerPin, ingång);
pinMode (noninvertingPin, ingång);
pinMode (invertingPin, ingång);
Str = "";
c = "\n";
}
void loop() {
While((Serial.available() > 0)) {
c = Serial.read();
om (! () c=='\n')) {
Str += c;
}
annat {
om (str == "requestFarads") {
testCapacitance();
Serial.println(Capacitance);
}
annars om (str == "requestHenrys") {
testInductance();
Serial.println(inductance);
}
annars om (str == "requestOhms") {
testResistance();
Serial.println(Resistance);
}
annars om (str == "requestHertz") {
testFrequency();
Serial.println(Frequency);
}
Str = "";
While(Serial.available() > 0) Serial.read();
}
}
digitalWrite (chargePin, låg);
}
void testCapacitance () {
digitalWrite (chargePin, låg);
While(analogRead(noninvertingPin) > 1) {}
timeStart = micros();
digitalWrite (chargePin, hög);
While(!digitalRead(triggerPin)) {if((micros()-timeStart)>5000000) bryta;}
timeEnd = micros();
timeDelta = timeEnd-timeStart;
Kapacitans i nanoFarads
kapacitans = (-1*((timeDelta*1000)/((log((1000000-(1000000*analogRead(invertingPin)/1024)))-log(1000000))*constRes)));
}
void testInductance () {
digitalWrite (chargePin, låg);
While(analogRead(noninvertingPin) > 1) {}
timeStart = micros();
digitalWrite (chargePin, hög);
While(digitalRead(triggerPin)) {if((micros()-timeStart)>5000000) bryta;}
timeEnd = micros();
timeDelta = timeEnd-timeStart;
induktans i nanoHenrys
induktans = (-1*((1000*timeDelta*constRes)/(log(1000000*analogRead(invertingPin)/1024)-log(1000000)));
}
void testResistance () {
digitalWrite (chargePin, hög);
Delay(100);
motstånd = (float(analogRead(noninvertingPin))*100)/(1024-float(analogRead(noninvertingPin)));
}
void testFrequency () {
frekvens = pulseIn (triggerPin, hög);
frekvens += pulseIn (triggerPin, låg);
frekvens = 1/frekvens;
}