SuperScope: Circuit Simulation through Arduino-Processing Interface

 by supercapacitor

Step 4: Whew... only 94 lines this time

arduino_icon.png

//The Arduino Code:
///////////////////////////////

#include <math.h>

byte chargePin = 9;
byte triggerPin = 8;
byte noninvertingPin = A0;
byte invertingPin = A1;
float constRes = 100;
unsigned long timeStart;
unsigned long timeEnd;
unsigned long timeDelta;
unsigned long capacitance;
unsigned long inductance;
unsigned long resistance;
unsigned long frequency;
String str;
char c;
void setup() {
  Serial.begin(9600);
  pinMode(chargePin, OUTPUT);
  pinMode(triggerPin, INPUT);
  pinMode(noninvertingPin, INPUT);
  pinMode(invertingPin, INPUT);
  str = "";
  c = '\n';
}

void loop() {
 
  while((Serial.available() > 0)) {
  
    c = Serial.read();
    if(!(c=='\n')) {
      str += c;
    }
    else {
    if(str == "requestFarads") {
      testCapacitance();
      Serial.println(capacitance);
    }
    else if(str == "requestHenrys") {
      testInductance();
      Serial.println(inductance);
    }
    else if(str == "requestOhms") {
      testResistance();
      Serial.println(resistance);
    }
    else if(str == "requestHertz") {
      testFrequency();
      Serial.println(frequency);
    }
    str="";
    while(Serial.available()>0) Serial.read();
    }
  }
 
  digitalWrite(chargePin, LOW);
}

void testCapacitance () {
  digitalWrite(chargePin, LOW);
  while(analogRead(noninvertingPin)>1) {}
  timeStart = micros();
  digitalWrite(chargePin, HIGH);
  while(!digitalRead(triggerPin)) {if((micros()-timeStart)>5000000) break;}
  timeEnd = micros();
  timeDelta = timeEnd-timeStart;
  //capacitance in nanoFarads
  capacitance = (-1*((timeDelta*1000)/((log((1000000-(1000000*analogRead(invertingPin)/1024)))-log(1000000))*constRes)));
}

void testInductance () {
  digitalWrite(chargePin, LOW);
  while(analogRead(noninvertingPin)>1) {}
  timeStart = micros();
  digitalWrite(chargePin, HIGH);
  while(digitalRead(triggerPin)) {if((micros()-timeStart)>5000000) break;}
  timeEnd = micros();
  timeDelta = timeEnd-timeStart;
  //inductance in nanoHenrys
  inductance = (-1*((1000*timeDelta*constRes)/(log(1000000*analogRead(invertingPin)/1024)-log(1000000))));
}

void testResistance () {
  digitalWrite(chargePin, HIGH);
  delay(100);
  resistance = (float(analogRead(noninvertingPin))*100)/(1024-float(analogRead(noninvertingPin)));
}

void testFrequency () {
  frequency = pulseIn(triggerPin, HIGH);
  frequency += pulseIn(triggerPin, LOW);
  frequency = 1/frequency;
}

 
Remove these adsRemove these ads by Signing Up
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!