Help with air ride code....
fair warning first code have written. when load code on arduino , have running through lcd runs fine little bit, of sudden seems jumps out of loop , starts doing whatever wants. did miss in code. help/input great. thank in advance. haven't hooked wires arduino yet, lcd serial wires.
code: [select]
//read air pressure in air bags, 4 air pressure sensors on analog pins 0-3
//2 tank sensors connected analog pins 4,5
//air ride control unit attached digital pin 13-6
//2 push buttons connected digital pins 2,3 interrupt , clear display upper , lower tank
//2 push buttons connected digital pins 5,4 set ride heights
//uses moderndevice 20x4 lcd screen
const int psisensor1 = 0; //set lf bag sensor input on analog port 0
const int psisensor2 = 1; //set rf bag sensor input on analog port 1
const int psisensor3 = 2; //set lr bag sensor input on analog port 2
const int psisensor4 = 3; //set rr bag sensor input on analog port 3
const int tank1sensor = 4; //set upper tank sensor input on analog port 4
const int tank2sensor = 5; //set lower tank sensor input on analog port 5
int sensor1val = 0; //set lf bag sensor 0 value
int sensor2val = 0; //set rf bag sensor 0 value
int sensor3val = 0; //set lr bag sensor 0 value
int sensor4val = 0; //set rr bag sensor 0 value
int tank1val = 0; //set upper tank sensor value 0
int tank2val = 0; //set lower tank sensor value 0
int press1 = 0;
int press2 = 0;
int press3 = 0;
int press4 = 0;
volatile int tank1pres = 0; //set tank 1 pressure 0
volatile int tank2pres = 0; //set tank 2 pressure 0
const int lfuppin = 13; //lf bag fill solenoid digital pin 13
const int lfdownpin = 12; //lf bag release solenoid digital pin 12
const int rfuppin = 11; //rf bag fill solenoid digial pin 11
const int rfdownpin = 10; //rf bag release solenoid digital pin 10
const int lruppin = 9; //lr bag fill solenoid digital pin 9
const int lrdownpin = 8; //lr bag release solenoid digital pin 8
const int rruppin = 7; //rr bag fill solenoid digital pin 7
const int rrdownpin = 6; //rr bag release solenoid digital pin 4
const int upbuttonpin = 5; //push button put car @ highes level on digital pin 5
const int ridebuttonpin = 4; //push button put car @ ride height on digital pin 4
int upbuttonstate = low; // current state of output pin
int button1state; // current reading input pin
int lastbutton1state = high; // previous reading input pin
int ridebuttonstate = low;
int button2state;
int lastbutton2state = high;
long lastdebouncetime = 0;
long debouncedelay = 50;
void setup()
{
serial.begin(9600);
attachinterrupt(0, tank1, change);
attachinterrupt(1, tank2, change);
pinmode (lfuppin, output);
pinmode (lfdownpin, output);
pinmode (rfuppin, output);
pinmode (rfdownpin, output);
pinmode (lruppin, output);
pinmode (lrdownpin, output);
pinmode (rruppin, output);
pinmode (rrdownpin, output);
pinmode (upbuttonpin, input);
pinmode (ridebuttonpin, input);
serial.print("?f"); //clear lcd per lcd117 command
serial.print("?x05?y1rhodes caddy"); //print @ column 6, row 2
serial.print("?x06?y31950 cadillac"); //print @ column 7, row 4
delay (2000);
serial.print("?f"); //clear lcd per lcd117 command
serial.print("?x02?y0lf psi:"); // print @ column 4, row 1
serial.print("?x12?y0rf psi:"); //print @ column 13, row 1
serial.print("?x02?y2lr psi:"); //print @ column 4, row 3
serial.print("?x12?y2rr psi:"); //print @ column 13, row 3
}
void loop()
{
sensor1val = analogread(psisensor1); //reads pressures in 4 bags
sensor2val = analogread(psisensor2);
sensor3val = analogread(psisensor3);
sensor4val = analogread(psisensor4);
press1 = ((sensor1val)*35.0877-9.4737); //calculates pressure in bags voltage
press2 = ((sensor2val)*35.0877-9.4737);
press3 = ((sensor3val)*35.0877-9.4737);
press4 = ((sensor4val)*35.0877-9.4737);
serial.write(press1);
serial.print("?x03?y1");
serial.print(press1);
serial.write(press2);
serial.print("?x13?y1");
serial.print(press2);
serial.write(press3);
serial.print("?x03?y3");
serial.print(press3);
serial.write(press4);
serial.print("?x13?y3");
serial.print(press4);
delay(200);
if (digitalread(upbuttonpin)== high)
{
if (press1 < 116);
{
delay(50);
digitalwrite(lfuppin, high);
if (press1 >115);
{
delay(50);
digitalwrite(lfdownpin, high);
}
}
if (press2 < 116);
{
delay(50);
digitalwrite(rfuppin, high);
if (press2 > 115);
{
delay(50);
digitalwrite(rfdownpin, high);
}
}
if (press3 < 116);
{
delay(50);
digitalwrite (lruppin, high);
if (press3 > 115);
{
delay(50);
digitalwrite (lrdownpin, high);
}
}
if (press4 < 116);
{
delay(50);
digitalwrite(rruppin, high);
if (press4 > 115);
{
delay(50);
digitalwrite(rrdownpin, high);
}
}
return;
}
if (digitalread(ridebuttonpin) == high)
{
if (press1 < 80);
{
delay(50);
digitalwrite (lfuppin, high);
if (press1 > 80);
{
delay(50);
digitalwrite (lfdownpin, high);
}
}
if (press2 < 80);
{
delay(50);
digitalwrite(rfuppin, high);
if (press2 > 80);
{
delay(50);
digitalwrite(rfdownpin, high);
}
}
if (press3 < 80);
{
delay(50);
digitalwrite(lruppin, high);
if (press3 > 80);
{
delay(50);
digitalwrite(lrdownpin, high);
}
}
if (press4 < 80);
{
delay(50);
digitalwrite(rruppin, high);
if (press4 > 80);
{
delay(50);
digitalwrite(rrdownpin, high);
}
}
return;
}
int reading1 = digitalread(upbuttonpin);
if (reading1 != lastbutton1state)
{
lastdebouncetime = millis();
}
if ((millis() - lastdebouncetime) > debouncedelay)
{
button1state = reading1;
}
digitalwrite(upbuttonpin, button1state);
lastbutton1state = reading1;
int reading2 = digitalread(ridebuttonpin);
if (reading2 != lastbutton2state)
{
lastdebouncetime = millis();
}
if ((millis() - lastdebouncetime) > debouncedelay)
{
button2state = reading2;
}
digitalwrite(ridebuttonpin, button2state);
lastbutton2state = reading2;
}
void tank1() //interrupt button on digital pin 2 show tank 1 pressure
{
serial.print("?x5?y0");
serial.print("upper tank psi:");
tank1val = analogread(tank1sensor);
tank1pres =((tank1val)*35.0877-9.4737);
serial.print("?x08?y1");
serial.write(tank1pres);
serial.print(tank1pres);
}
void tank2() //interrupt button on digital pin 3 show tank 2 pressure
{
serial.print("?x05?y2");
serial.print("lower tank psi:");
tank2val = analogread(tank2sensor);
tank2pres =((tank2val)*35.0877-9.4737);
serial.print("?x08?y3");
serial.write(tank2pres);
serial.print(tank2pres);
}
hi,
it not idea write seril port function loop , interrupt procedure. writing loop can interrupted serial print of interrupt function , strange things may happen! set global flag inside interrupt function , place printing in loop function this:
mike
it not idea write seril port function loop , interrupt procedure. writing loop can interrupted serial print of interrupt function , strange things may happen! set global flag inside interrupt function , place printing in loop function this:
code: [select]
bool tank1_print, tank2_print;
void setup()
{
serial.begin(9600);
attachinterrupt(0, tank1, change);
attachinterrupt(1, tank2, change);
pinmode (lfuppin, output);
pinmode (lfdownpin, output);
pinmode (rfuppin, output);
pinmode (rfdownpin, output);
pinmode (lruppin, output);
pinmode (lrdownpin, output);
pinmode (rruppin, output);
pinmode (rrdownpin, output);
pinmode (upbuttonpin, input);
pinmode (ridebuttonpin, input);
serial.print("?f"); //clear lcd per lcd117 command
serial.print("?x05?y1rhodes caddy"); //print @ column 6, row 2
serial.print("?x06?y31950 cadillac"); //print @ column 7, row 4
delay (2000);
serial.print("?f"); //clear lcd per lcd117 command
serial.print("?x02?y0lf psi:"); // print @ column 4, row 1
serial.print("?x12?y0rf psi:"); //print @ column 13, row 1
serial.print("?x02?y2lr psi:"); //print @ column 4, row 3
serial.print("?x12?y2rr psi:"); //print @ column 13, row 3
}
void loop()
{
sensor1val = analogread(psisensor1); //reads pressures in 4 bags
sensor2val = analogread(psisensor2);
sensor3val = analogread(psisensor3);
sensor4val = analogread(psisensor4);
press1 = ((sensor1val)*35.0877-9.4737); //calculates pressure in bags voltage
press2 = ((sensor2val)*35.0877-9.4737);
press3 = ((sensor3val)*35.0877-9.4737);
press4 = ((sensor4val)*35.0877-9.4737);
serial.write(press1);
serial.print("?x03?y1");
serial.print(press1);
serial.write(press2);
serial.print("?x13?y1");
serial.print(press2);
serial.write(press3);
serial.print("?x03?y3");
serial.print(press3);
serial.write(press4);
serial.print("?x13?y3");
serial.print(press4);
delay(200);
if (tank1_print) {
serial.print("?x5?y0");
serial.print("upper tank psi:");
tank1val = analogread(tank1sensor);
tank1pres =((tank1val)*35.0877-9.4737);
serial.print("?x08?y1");
serial.write(tank1pres);
serial.print(tank1pres);
tank1_print = false:
}
if (tank2_print) {
serial.print("?x05?y2");
serial.print("lower tank psi:");
tank2val = analogread(tank2sensor);
tank2pres =((tank2val)*35.0877-9.4737);
serial.print("?x08?y3");
serial.write(tank2pres);
serial.print(tank2pres);
tank2_print = false;
}
if (digitalread(upbuttonpin)== high)
{
if (press1 < 116);
{
delay(50);
digitalwrite(lfuppin, high);
if (press1 >115);
{
delay(50);
digitalwrite(lfdownpin, high);
}
}
if (press2 < 116);
{
delay(50);
digitalwrite(rfuppin, high);
if (press2 > 115);
{
delay(50);
digitalwrite(rfdownpin, high);
}
}
if (press3 < 116);
{
delay(50);
digitalwrite (lruppin, high);
if (press3 > 115);
{
delay(50);
digitalwrite (lrdownpin, high);
}
}
if (press4 < 116);
{
delay(50);
digitalwrite(rruppin, high);
if (press4 > 115);
{
delay(50);
digitalwrite(rrdownpin, high);
}
}
return;
}
if (digitalread(ridebuttonpin) == high)
{
if (press1 < 80);
{
delay(50);
digitalwrite (lfuppin, high);
if (press1 > 80);
{
delay(50);
digitalwrite (lfdownpin, high);
}
}
if (press2 < 80);
{
delay(50);
digitalwrite(rfuppin, high);
if (press2 > 80);
{
delay(50);
digitalwrite(rfdownpin, high);
}
}
if (press3 < 80);
{
delay(50);
digitalwrite(lruppin, high);
if (press3 > 80);
{
delay(50);
digitalwrite(lrdownpin, high);
}
}
if (press4 < 80);
{
delay(50);
digitalwrite(rruppin, high);
if (press4 > 80);
{
delay(50);
digitalwrite(rrdownpin, high);
}
}
return;
}
int reading1 = digitalread(upbuttonpin);
if (reading1 != lastbutton1state)
{
lastdebouncetime = millis();
}
if ((millis() - lastdebouncetime) > debouncedelay)
{
button1state = reading1;
}
digitalwrite(upbuttonpin, button1state);
lastbutton1state = reading1;
int reading2 = digitalread(ridebuttonpin);
if (reading2 != lastbutton2state)
{
lastdebouncetime = millis();
}
if ((millis() - lastdebouncetime) > debouncedelay)
{
button2state = reading2;
}
digitalwrite(ridebuttonpin, button2state);
lastbutton2state = reading2;
}
void tank1() //interrupt button on digital pin 2 show tank 1 pressure
{
tank_print = true;
}
void tank2() //interrupt button on digital pin 3 show tank 2 pressure
{
tank2_print = true;
}mike
Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > Help with air ride code....
arduino
Comments
Post a Comment