I think this is a little closer. I should have fixed the stuff that yall mentioned. I still do not have my arduino (its in the mail). As soon as its in, I will start working though tutorials and learning more so i can hopefully finish this.
int rawValue;
int oldValue;
byte potPercentage;
byte oldPercentage;
// Hall sensor Code
int fdriverHall = 2; // Front driver set up
volatile byte fdriver counter;
unsigned int fdriver rpm;
unsigned long fdriver passedtime;
int fpassengerHall = 3; // Front passenger set up
volatile byte fpassenger counter;
unsigned int fpassenger rpm;
unsigned long fpassenger passedtime;
int rdriverHall = 18; // Rear driver set up
volatile byte rdriver counter;
unsigned int rdriver rpm;
unsigned long rdriver passedtime;
int rpassengerHall = 19; // rear passenger setup
volatile byte rpassenger counter;
unsigned int rpassenger rpm;
unsigned long rpassenger passedtime;
cylinder1 = 4
cylinder2 = 5
cylinder3 = 6
cylinder4 = 7
cylinder5 = 8
cylinder6 = 9
cylinder7 = 10
cylinder8 = 11
void setup() {
Serial.begin(115200); // set serial monitor to this value, or change the value
pinMode (A0, INPUT); // set Pot pin A0 to input
// Cylinder control output setup
pinMode ( cylinder 1, OUTPUT); // pin mode cylinder 1
pinMode ( cylinder 2, OUTPUT); // pin mode cylinder 2
pinMode ( cylinder 3, OUTPUT); // pin mode cylinder 3
pinMode ( cylinder 4, OUTPUT); // pin mode cylinder 4
pinMode ( cylinder 5, OUTPUT); // pin mode cylinder 5
pinMode ( cylinder 6, OUTPUT); // pin mode cylinder 6
pinMode ( cylinder 7, OUTPUT); // pin mode cylinder 7
pinMode ( cylinder 8, OUTPUT); // pin mode cylinder 8
pinMode (fdriverHall, INPUT); // Hall sensor Driver front input
attachInterrupt(fdriverHall, isr, RISING); //Interrupt for front driver Hall sensor
fdriver counter = 0;
fdriver rpm = 0;
fdriver passedtime = 0; //Initialise the values
pinMode (fpassengerHall, INPUT); // Hall sensor Passenger front input
attachInterrupt(fpassengerHall, isr, RISING); //Interrupt for front passenger Hall sensor
fpassenger counter = 0;
fpassenger rpm = 0;
fpassenger passedtime = 0; //Initialise the values
pinMode (rdriverHall, INPUT); // Hall sensor Driver rear input
attachInterrupt(rdriverHall, isr, RISING); //Interrupt for rear driver Hall sensor
rdriver counter = 0;
rdriver rpm = 0;
rdriver passedtime = 0; //Initialise the values
pinMode (rpassengerHall, INPUT); // Hall sensor Passenger rear input
attachInterrupt(rpassengerHall, isr, RISING); //Interrupt for rear passenger Hall sensor
rpassenger counter = 0;
rpassenger rpm = 0;
rpassenger passedtime = 0; //Initialise the values
}
void loop() {
// front driver wheel RPM calculator
fdriver rpm = 60*1000/(millis() - fdriver passedtime)*fdriver counter;
fdriver passedtime = millis();
fdriver counter = 0;
// front passenger wheel RPM calculator
fpassenger rpm = 60*1000/(millis() - fpassenger passedtime)*fpassenger counter;
fpassenger passedtime = millis();
fpassenger counter = 0;
// rear driver wheel RPM calculator
rdriver rpm = 60*1000/(millis() - rdriver passedtime)*rdriver counter;
rdriver passedtime = millis();
rdriver counter = 0;
// rear passenger wheel RPM calculator
rpassenger rpm = 60*1000/(millis() - rpassenger passedtime)*rpassenger counter;
rpassenger passedtime = millis();
rpassenger counter = 0;
// pot code
// converts the position of a 10k lin(B) pot to 0-100%
// pot connected to A0, 5volt and ground
rawValue = analogRead(A0); // read input twice
rawValue = analogRead(A0); // ignore bad hop-on region of a pot by removing 8 values at both extremes
rawValue = constrain(rawValue, 8, 1015); // add some deadband
if (rawValue < (oldValue - 4) || rawValue > (oldValue + 4)) oldValue = rawValue; // convert to percentage
potPercentage = map(oldValue, 8, 1008, 0, 100); // Only print if %value changes
if (oldPercentage != potPercentage) oldPercentage = potPercentage;
// Math for calculating slip in wheel speed or loss of traction
// 5% loss of traction. I am hoping 5% will acount for rpm differance in wheel RPM while turning. If not, I can change it to 3 or higher... havent done the math on this yet.
if (((fdriver rpm/fpassenger rpm)*100) <= (potPercentage-5) || ((rdriver rpm/rpassenger rpm)*100) <= (potPercentage-5) || ((fdriver rpm/rdriver rpm)*100) <= (potPercentage-5) || ((fpassenger rpm/rpassenger rpm)*100) <= (potPercentage-5)) digitalWrite (cylinder1, LOW);
else digitalWrite (cylinder1, HIGH);
// 10% loss of traction below required or pot set
if (((fdriver rpm/fpassenger rpm)*100) <= (potPercentage-10) || ((rdriver rpm/rpassenger rpm)*100) <= (potPercentage-10) || ((fdriver rpm/rdriver rpm)*100) <= (potPercentage-10) || ((fpassenger rpm/rpassenger rpm)*100) <= (potPercentage-10)) digitalWrite (cylinder2, LOW);
else digitalWrite (cylinder2, HIGH);
// 15% loss of traction below required or pot set
if (((fdriver rpm/fpassenger rpm)*100) <= (potPercentage-15) || ((rdriver rpm/rpassenger rpm)*100) <= (potPercentage-15) || ((fdriver rpm/rdriver rpm)*100) <= (potPercentage-15) || ((fpassenger rpm/rpassenger rpm)*100) <= (potPercentage-15)) digitalWrite (cylinder3, LOW);
else digitalWrite (cylinder3, HIGH);
// 20% loss of traction below required or pot set
if (((fdriver rpm/fpassenger rpm)*100) <= (potPercentage-20) || ((rdriver rpm/rpassenger rpm)*100) <= (potPercentage-20) || ((fdriver rpm/rdriver rpm)*100) <= (potPercentage-20) || ((fpassenger rpm/rpassenger rpm)*100) <= (potPercentage-20)) digitalWrite (cylinder4, LOW);
else digitalWrite (cylinder4, HIGH);
// 25% loss of traction below required or pot set
if (((fdriver rpm/fpassenger rpm)*100) <= (potPercentage-25) || ((rdriver rpm/rpassenger rpm)*100) <= (potPercentage-25) || ((fdriver rpm/rdriver rpm)*100) <= (potPercentage-25) || ((fpassenger rpm/rpassenger rpm)*100) <= (potPercentage-25)) digitalWrite (cylinder5, LOW);
else digitalWrite (cylinder5, HIGH);
// 30% loss of traction below required or pot set
if (((fdriver rpm/fpassenger rpm)*100) <= (potPercentage-30) || ((rdriver rpm/rpassenger rpm)*100) <= (potPercentage-30) || ((fdriver rpm/rdriver rpm)*100) <= (potPercentage-30) || ((fpassenger rpm/rpassenger rpm)*100) <= (potPercentage-30)) digitalWrite (cylinder 5, LOW);
else digitalWrite (cylinder 5, HIGH);