Buongiorno,
chiedo aiuto per un programma che sto creando per il sistema di controllo dell'air ride della mia auto.
praticamente vorrei tramite un sensore analogico di pressione controllare le sospensioni e nel momento in cui premo il pulsante di Blynk mi deve eseguire un controllo del sensore, se ha una pressione inferiore eseguire il relè che comanda il solenoide di pompaggio e se invece ha una pressione superiore eseguire il relè che comanda il solenoide di sgonfiaggio altrimenti se la pressione è uguale a un determinato valore non fare nulla.
ora tutto questo non riesco a farlo tramite l'applicazione blynk perchè devo scrivere il BLYNK_WRITE su void setup e non su void loop... quindi non esegue questo programma...
sapete aiutarmi?
//**{PRESSURE}**//
const int ROADF = 70;
const int ROADR = 50;
const int FULL = 70;
const int EMPTY = 45;
//***************//
#include <Wire.h>
#include <LiquidCrystal.h>
#include <Fishino.h>
#include <SPI.h>
#include <BlynkSimpleFishino.h>
#include "Adafruit_MCP23017.h"
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "wlan-ap";
char pass[] = "xxxxxxxxxxxxxxx";
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Adafruit_MCP23017 mcp;
float mapFloat(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
float volts1, psi1, volts2, psi2, volts3, psi3, volts4, psi4, volts5, psi5;
int FH = 0;
int FL = 1;
int RH = 2;
int RL = 3;
int TANK = 4;
int psiForLCD1;
int psiForLCD2;
int psiForLCD3;
int pinValue;
int pinValue1;
int pinValue2;
int lcd_key = 0;
int adc_key_in = 0;
#define ALTO 0
#define ALZA 1
#define ABBASSA 2
#define BASSO 3
#define ULTRALOW 4
#define btnNONE 5
int read_LCD_buttons() {
adc_key_in = analogRead(0); // read the value from the sensor
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in < 60) return ALTO;
if (adc_key_in < 200) return ALZA;
if (adc_key_in < 400) return ABBASSA;
if (adc_key_in < 600) return BASSO;
if (adc_key_in < 800) return ULTRALOW;
return btnNONE; // when all others fail, return this...
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(5, 0);
lcd.print("AVVIO");
lcd.setCursor(3, 1);
lcd.print("AIR.LEVEL");
delay(3000);
lcd.clear();
mcp.begin(0x27);
mcp.pinMode(FH, OUTPUT);
mcp.pinMode(FL, OUTPUT);
mcp.pinMode(RH, OUTPUT);
mcp.pinMode(RL, OUTPUT);
mcp.pinMode(TANK, OUTPUT);
mcp.digitalWrite(FH, LOW);
mcp.digitalWrite(FL, LOW);
mcp.digitalWrite(RH, LOW);
mcp.digitalWrite(RL, LOW);
mcp.digitalWrite(TANK, LOW);
Blynk.begin(auth, ssid, pass);
}
BLYNK_WRITE(V3) {
if (param.asInt()) {
mcp.digitalWrite(FH, HIGH);
} else {
mcp.digitalWrite(FH, LOW);
}
}
BLYNK_WRITE(V4) {
if (param.asInt()) {
mcp.digitalWrite(FL, HIGH);
} else {
mcp.digitalWrite(FL, LOW);
}
}
BLYNK_WRITE(V5) {
if (param.asInt()) {
mcp.digitalWrite(RH, HIGH);
} else {
mcp.digitalWrite(RH, LOW);
}
}
BLYNK_WRITE(V6) {
if (param.asInt()) {
mcp.digitalWrite(RL, HIGH);
} else {
mcp.digitalWrite(RL, LOW);
}
}
BLYNK_WRITE(V1) {
}
BLYNK_WRITE(V7)
{
pinValue = param.asInt();
}
BLYNK_WRITE(V8)
{
pinValue1 = param.asInt();
}
BLYNK_WRITE(V9)
{
pinValue2 = param.asInt();
}
void loop() {
Blynk.run();
if (psiForLCD3 < EMPTY) {
mcp.digitalWrite(TANK, HIGH);
} else if (psiForLCD3 >= FULL) {
mcp.digitalWrite(TANK, LOW);
}
//Manca il tasto di selezione su blynk
if (psiForLCD1 < ROADF) {
mcp.digitalWrite(FH, HIGH);
mcp.digitalWrite(FL, LOW);
} else if (psiForLCD1 > ROADF) {
mcp.digitalWrite(FH, LOW);
mcp.digitalWrite(FL, HIGH);
} else if (psiForLCD1 == ROADF) {
mcp.digitalWrite(FL, LOW);
mcp.digitalWrite(FH, LOW);
}
//Manca il tasto di selezione su Blynk
if (psiForLCD2 < ROADR) {
mcp.digitalWrite(RH, HIGH);
mcp.digitalWrite(RL, LOW);
} else if (psiForLCD2 > ROADR) {
mcp.digitalWrite(RH, LOW);
mcp.digitalWrite(RL, HIGH);
} else if (psiForLCD2 == ROADR) {
mcp.digitalWrite(RL, LOW);
mcp.digitalWrite(RH, LOW);
}
//Displaying Values to LCD
int reading1 = pinValue;
int reading2 = pinValue1;
int reading3 = pinValue2;
volts1 = mapFloat(reading1, 0, 1023, 0, 5);
psi1 = mapFloat(volts1, 0.42, 4.5, 0, 200);
volts2 = mapFloat(reading2, 0, 1023, 0, 5);
psi2 = mapFloat(volts2, 0.42, 4.5, 0, 200);
volts3 = mapFloat(reading3, 0, 1023, 0, 5);
psi3 = mapFloat(volts3, 0.42, 4.5, 0, 100);
psiForLCD1 = psi1;
psiForLCD2 = psi2;
psiForLCD3 = psi3;
lcd.setCursor(0, 0);
lcd.print("FRONT");
lcd.setCursor(6, 0);
lcd.print(psiForLCD1);
lcd.setCursor(0, 1);
lcd.print("REAR");
lcd.setCursor(6, 1);
lcd.print(psiForLCD2);
lcd.setCursor(12, 0);
lcd.print("TANK");
lcd.setCursor(12, 1);
lcd.print(psiForLCD3);
delay(300);
lcd.clear();
}
--- magari se eviti di mettere in chiaro le tue chiavi Blynk e la password della tua rete è meglio
Ho corretto io - gpb01