Salve a tutti popolo della community.
Vi scrivo per chiedervi aiuto in merito ad un progettino che starei cercando di realizzare.
Partendo dal codice che seguirà (preso da internet), il mio obiettivo è realizzare un dispositivo che mi permetta di leggere l'umidità del terreno che è stato già realizzato con il codice che segue.
// configurazione Blynk
#define BLYNK_TEMPLATE_ID "xxxxx"
#define BLYNK_TEMPLATE_NAME "Sensori"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG
#include "BlynkEdgent.h"
// configurazione sensori di temperatura
#include "DHT.h"
#define DHTPIN_A 2
#define DHTTYPE_A DHT11
DHT dhtA(DHTPIN_A, DHTTYPE_A);
#define DHTPIN_B 1
#define DHTTYPE_B DHT11
DHT dhtB(DHTPIN_B, DHTTYPE_B);
// configurazione Blynk
BlynkTimer timer;
// variabili
int alimentazione;
int sensoreUmidita1;
int sensoreUmidita2;
int sensoreUmidita3;
int sensoreUmidita4;
int sensoreUmidita5;
float temperatura1;
float umidita1;
float temperatura2;
float umidita2;
float velocitaVento;
void setup()
{
Serial.begin(115200);
delay(2000);
BlynkEdgent.begin();
//pin alimentazione
pinMode(8, INPUT); //feedback
//sens. temperatura
dhtA.begin();
dhtB.begin();
//timer
timer.setInterval(2000L, trasmissioneDati);
}
void trasmissioneDati(){
// lettura sensori
sensoreUmidita1 = analogRead(A1);
sensoreUmidita2 = analogRead(A2);
sensoreUmidita3 = analogRead(A3);
sensoreUmidita4 = analogRead(A4);
sensoreUmidita5 = analogRead(A5);
// lettura temperatura
temperatura1 = dhtA.readTemperature();
umidita1 = dhtA.readHumidity();
temperatura2 = dhtB.readTemperature();
umidita2 = dhtB.readHumidity();
// trasmissione dati sensori
Blynk.virtualWrite(V1, 100 - (sensoreUmidita1/10));
Blynk.virtualWrite(V2, 100 - (sensoreUmidita2/10));
Blynk.virtualWrite(V3, 100 - (sensoreUmidita3/10));
Blynk.virtualWrite(V4, 100 - (sensoreUmidita4/10));
Blynk.virtualWrite(V5, 100 - (sensoreUmidita5/10));
Blynk.virtualWrite(V6, temperatura1);
Blynk.virtualWrite(V8, umidita1);
Blynk.virtualWrite(V7, temperatura2);
Blynk.virtualWrite(V9, umidita2);
}
BLYNK_CONNECTED() {
Blynk.syncAll();
}
BLYNK_WRITE(V10)
{
}
void loop() {
BlynkEdgent.run();
timer.run();
}
Ora fin qua tutto ok, il codice funziona e anche in ottimo modo. Sorge però una problematica ovvero che sull'MKR 1010 posso sfruttare al massimo 5 input analogici.
Per ovviare al problema ho deciso di acquistare un multiplexer che come ben sappiamo tutti sfrutta 1 input analogico e 4 digitali ( più nello specifico Modulo multiplexer analogico 16 74HC4067 CD74HC4067). Il mio problema sta in sostanza nel mettere in collegamento l'MKR e il multiplexer e fargli capire che da un certo sensore in poi deve ricevere dati dal multiplexer e poi mandarmi il tutto su un cloud ( nel mio caso utilizzo blynk).
Di seguito il codice:
// configurazione Blynk
#define BLYNK_TEMPLATE_ID "xxxxx"
#define BLYNK_TEMPLATE_NAME "Sensori"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG
#include "BlynkEdgent.h"
// configurazione sensori di temperatura
#include "DHT.h"
#define DHTPIN_A 2
#define DHTTYPE_A DHT11
DHT dhtA(DHTPIN_A, DHTTYPE_A);
#define DHTPIN_B 1
#define DHTTYPE_B DHT11
DHT dhtB(DHTPIN_B, DHTTYPE_B);
// configurazione Blynk
BlynkTimer timer;
// variabili
int alimentazione;
int canale;
int sensoreUmidita1;
int sensoreUmidita2;
int sensoreUmidita3;
int sensoreUmidita4;
int sensoreUmidita5;
int sensoreUmidita6;
int sensoreUmidita7;
int sensoreUmidita8;
int sensoreUmidita9;
int sensoreUmidita10;
int sensoreUmidita11;
int sensoreUmidita12;
int sensoreUmidita13;
int sensoreUmidita14;
int sensoreUmidita15;
int sensoreUmidita16;
int sensoreUmidita17;
int sensoreUmidita18;
int sensoreUmidita19;
int sensoreUmidita20;
int sensoreUmidita21;
int sensoreUmidita22;
float temperatura1;
float umidita1;
float temperatura2;
float umidita2;
float velocitaVento;
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;
int sig = 0;
int multiplexer[16][4] = { {0,0,0,0}, //canale 0
{0,0,0,1}, //canale 1
{0,0,1,0}, //canale 2
{0,0,1,1}, //canale 3
{0,1,0,0}, //canale 4
{0,1,0,1}, //canale 5
{0,1,1,0}, //canale 6
{0,1,1,1}, //canale 7
{1,0,0,0}, //canale 8
{1,0,0,1}, //canale 9
{1,0,1,0}, //canale 10
{1,0,1,1}, //canale 11
{1,1,0,0}, //canale 12
{1,1,0,1}, //canale 13
{1,1,1,0}, //canale 14
{1,1,1,1} //canale 15
};
void multi() {
canale(0);
Serial.read();
canale(1);
Serial.read();
canale(2);
Serial.read();
canale(3);
Serial.read();
canale(4);
Serial.read();
canale(5);
Serial.read();
canale(6);
Serial.read();
canale(7);
Serial.read();
canale(8);
Serial.read();
canale(9);
Serial.read();
canale(10);
Serial.read();
canale(11);
Serial.read();
canale(12);
Serial.read();
canale(13);
Serial.read();
canale(14);
Serial.read();
canale(15);
Serial.read();
}
void setup() {
// put your setup code here, to run once:
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
Serial.begin(9600);
Serial.begin(115200);
delay(2000);
BlynkEdgent.begin();
//pin alimentazione
pinMode(8, INPUT); //feedback
//sens. temperatura
dhtA.begin();
dhtB.begin();
//timer
timer.setInterval(2000L, trasmissioneDati);
}
void trasmissioneDati(){
// lettura sensori
sensoreUmidita1 = analogRead(A1);
sensoreUmidita2 = analogRead(A2);
sensoreUmidita3 = analogRead(A3);
sensoreUmidita4 = analogRead(A4);
sensoreUmidita5 = analogRead(A5);
sensoreUmidita6 = analogRead(A6);
sensoreUmidita7 = analogRead(canale(0),Serial.read());
sensoreUmidita8 = analogRead(canale(1),Serial.read());
sensoreUmidita9 = analogRead(canale(2),Serial.read());
sensoreUmidita10 = analogRead(canale(3),Serial.read());
sensoreUmidita11 = analogRead(canale(4),Serial.read());
sensoreUmidita12 = analogRead(canale(5),Serial.read());
sensoreUmidita13 = analogRead(canale(6),Serial.read());
sensoreUmidita14 = analogRead(canale(7),Serial.read());
sensoreUmidita15 = analogRead(canale(8),Serial.read());
sensoreUmidita16 = analogRead(canale(9),Serial.read());
sensoreUmidita17 = analogRead(canale(10),Serial.read());
sensoreUmidita18 = analogRead(canale(11),Serial.read());
sensoreUmidita19 = analogRead(canale(12),Serial.read());
sensoreUmidita20 = analogRead(canale(13),Serial.read());
sensoreUmidita21 = analogRead(canale(14),Serial.read());
sensoreUmidita22 = analogRead(canale(15),Serial.read());
// lettura temperatura
temperatura1 = dhtA.readTemperature();
umidita1 = dhtA.readHumidity();
temperatura2 = dhtB.readTemperature();
umidita2 = dhtB.readHumidity();
// trasmissione dati sensori
Blynk.virtualWrite(V1, 100 - (sensoreUmidita1/10));
Blynk.virtualWrite(V2, 100 - (sensoreUmidita2/10));
Blynk.virtualWrite(V3, 100 - (sensoreUmidita3/10));
Blynk.virtualWrite(V4, 100 - (sensoreUmidita4/10));
Blynk.virtualWrite(V5, 100 - (sensoreUmidita5/10));
Blynk.virtualWrite(V6, 100 - (sensoreUmidita6/10));
Blynk.virtualWrite(V7, 100 - (sensoreUmidita7/10));
Blynk.virtualWrite(V8, 100 - (sensoreUmidita8/10));
Blynk.virtualWrite(V9, 100 - (sensoreUmidita9/10));
Blynk.virtualWrite(V10, 100 - (sensoreUmidita10/10));
Blynk.virtualWrite(V11, 100 - (sensoreUmidita11/10));
Blynk.virtualWrite(V12, 100 - (sensoreUmidita12/10));
Blynk.virtualWrite(V13, 100 - (sensoreUmidita13/10));
Blynk.virtualWrite(V14, 100 - (sensoreUmidita14/10));
Blynk.virtualWrite(V15, 100 - (sensoreUmidita15/10));
Blynk.virtualWrite(V16, 100 - (sensoreUmidita16/10));
Blynk.virtualWrite(V17, 100 - (sensoreUmidita17/10));
Blynk.virtualWrite(V18, 100 - (sensoreUmidita18/10));
Blynk.virtualWrite(V19, 100 - (sensoreUmidita19/10));
Blynk.virtualWrite(V20, 100 - (sensoreUmidita20/10));
Blynk.virtualWrite(V21, 100 - (sensoreUmidita21/10));
Blynk.virtualWrite(V22, 100 - (sensoreUmidita22/10));
Blynk.virtualWrite(V23, temperatura1);
Blynk.virtualWrite(V24, umidita1);
Blynk.virtualWrite(V25, temperatura2);
Blynk.virtualWrite(V26, umidita2);
}
BLYNK_CONNECTED() {
Blynk.syncAll();
}
void loop() {
// put your main code here, to run repeatedly:
BlynkEdgent.run();
timer.run();
}
Dopo aver scritto il tutto, l'IDE mi restituisce come errore il seguente:
In function 'void multi()':
Edgent_MKR1010:95:11: error: 'canale' cannot be used as a function
canale(0);
questo errore me lo riporta per tutti i canali definiti nel void multi.
Grazie a chiunque possa aiutarmi e/o darmi qualche dritta.