buona sera a tutti, chiedo un enorme aiuto in quanto sono ad una settimana che ci provo ma non mi esce il risultato che voglio.
in poche parole ho creato un dispositivo avente un arduino nano, un sensore a ultrasuoni hc-sr04, 2 sensori e18-d80nk e 5 led.
3 led sono dedicati al sensore di cui misura la distanza di pellet che ho nella cassa.. gli altri 2 sono collegati ai sensori che ho predisposto a metà e fine cassa.
il mio intento è
sensore 1 HIGH && sensore 2 LOW -> led1 spento, led 2 acceso lampeggiante
sensore 2 HIGH -> sensore 2 HIGH -> led 1 acceso - led 2 spento
sensore 1 LOW && sensore 2 LOW -> led 1 spento - led 2 spento
//programma lettura pellet nel silos
#define TRIG_PIN 15 // ingresso A1 di arduino nano utilizzato come ingresso digitale
#define ECHO_PIN 14 // ingresso A0 di arduino nano utilizzato come ingresso digitale
#include <SR04.h>
SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN); //inseriamo un oggetto di tipo SRO4, lo chiamiamo sr04 e gli diamo come parametri i pin utilizzati per TRIG ed ECHO
#include "SevSegShift.h"
#define SHIFT_PIN_SHCP 4
#define SHIFT_PIN_STCP 5
#define SHIFT_PIN_DS 6
SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP);
#define ledGreen 9
#define ledYellow 8
#define ledRed 7
#define LedYellowSens 10
#define LedRedSens 11
#define SensMezzo 2
#define SensFine 3
int pellet;
void setup() {
pinMode (ledGreen, OUTPUT);
pinMode (ledYellow, OUTPUT);
pinMode (ledRed, OUTPUT);
pinMode (LedYellowSens, OUTPUT);
pinMode (LedRedSens, OUTPUT);
pinMode (SensMezzo, INPUT);
pinMode (SensFine, INPUT);
// impostiamo la libreia sevseg con i relativi parametri.
byte numDigits = 4;
byte digitPins[] = {1, 2, 3, 4}; // of ShiftRegister(s) | 8+x (2nd Register)
byte segmentPins[] = {8 + 0, 8 + 1, 8 + 2, 8 + 3, 8 + 4, 8 + 5, 8 + 6, 8 + 7}; // of Shiftregister(s) | 8+x (2nd Register)
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_CATHODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = true; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
Serial.begin(9600);
}
void loop() {
static unsigned long timer = millis();
if (millis() - timer >= 1000) { //sfruttando la funzione millis facciamo in modo che ogni 1000 ms dal reset della scheda
timer += 1000; //(o dall'avvio) avvenga una lettura del sensore di distanza
pellet = sr04.Distance();
}
sevseg.setNumber(pellet);
Serial.print(pellet);
Serial.println("cm");
sevseg.refreshDisplay();
if (pellet < 40) { // accendiamo il primo led se la misura è sotto i 50 cm
digitalWrite (ledGreen, HIGH);
digitalWrite (ledYellow, LOW);
digitalWrite (ledRed, LOW);
}
else if (pellet <= 41 && pellet >= 64) { // tra i 50 e i 95 cm facciamo accendere il secondo led
digitalWrite (ledGreen, LOW);
digitalWrite (ledYellow, HIGH);
digitalWrite (ledRed, LOW);
}
else if (pellet > 65) { //dopo i 100 cm facciamo accendere il terzo led
digitalWrite (ledGreen, LOW);
digitalWrite (ledYellow, LOW);
digitalWrite (ledRed, HIGH);
}
if ( digitalRead(SensMezzo) == LOW ) {
digitalWrite (LedYellowSens, HIGH);
} else {
digitalWrite (LedYellowSens, LOW );
}
if ( digitalRead(SensFine) == LOW) {
digitalWrite (LedRedSens, HIGH);
} else {
digitalWrite (LedRedSens, LOW );
}
}
fin qui ci sono arrivato e mo non riesco ad andare più avanti.
grazie in anticipo