aiuto funzione millis per led e sensore mpu6050
Salve a tutti
sto realizzando un piccolo circuitino basato sul sensore mpu6050 e tre led colorati da mettere sul monoppatino di mia nipote,che verranno azionati durante il movimento; purtroppo sono solo agli inizi con l'arduino ed ora mi sono incastrato con la funzione millis.
Vi spiego meglio il mio circuito: con il sensore mpu6050 controllo l'accensione di tre led ( che poi verrano sostituiti con dei led cob più luminosi e transistr per accenderli) uno blu quando il monopattino accelera, uno rosso quando frena ed uno verde quando cammina "liscio", il circuito dopo un po di settaggi per trovare i giusti valori funziona molto bene, ma ora vorrei impostare una sorta di autospegnimento se il monopattino resta ferma per un tot di secondi e che poi si riattivi appena sente che viene spostato. Girando in rete ho visto che la funzione millis sarebbe la più indicata, ma onestamente non riesco ad implementarla nel mio codicillo... mi potreste dare una mano ?
ecco qui il mio codice:
la parte del sensore mpu6050 l'ho trovata in rete, mentre io ho implementato la sezione dedicata ai led con i riferimenti ai valori del sensore e l'inserimento delle funzioni if.
ciao e grazie a tutti
sto realizzando un piccolo circuitino basato sul sensore mpu6050 e tre led colorati da mettere sul monoppatino di mia nipote,che verranno azionati durante il movimento; purtroppo sono solo agli inizi con l'arduino ed ora mi sono incastrato con la funzione millis.
Vi spiego meglio il mio circuito: con il sensore mpu6050 controllo l'accensione di tre led ( che poi verrano sostituiti con dei led cob più luminosi e transistr per accenderli) uno blu quando il monopattino accelera, uno rosso quando frena ed uno verde quando cammina "liscio", il circuito dopo un po di settaggi per trovare i giusti valori funziona molto bene, ma ora vorrei impostare una sorta di autospegnimento se il monopattino resta ferma per un tot di secondi e che poi si riattivi appena sente che viene spostato. Girando in rete ho visto che la funzione millis sarebbe la più indicata, ma onestamente non riesco ad implementarla nel mio codicillo... mi potreste dare una mano ?
ecco qui il mio codice:
- Codice: Seleziona tutto
#include <SPI.h>
#include <Wire.h>
#define MPU 0x68 // I2C address of the MPU-6050
double AcX,AcY,AcZ;
int Pitch, Roll;
void setup(){
Serial.begin(9600);
init_MPU(); // Inizializzazione MPU6050
pinMode(4, OUTPUT); //led rosso
pinMode(10, OUTPUT); //led blu
pinMode (7, OUTPUT); //led verde
}
void loop()
{
FunctionsMPU(); // Acquisisco assi AcX, AcY, AcZ.
Roll = FunctionsPitchRoll(AcX, AcY, AcZ); //Calcolo angolo Roll
Pitch = FunctionsPitchRoll(AcY, AcX, AcZ); //Calcolo angolo Pitch
Serial.print("Pitch: "); Serial.print(Pitch);
Serial.print("\t");
Serial.print("Roll: "); Serial.print(Roll);
Serial.print("\n");
}
void init_MPU(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
delay(1000);
}
//Funzione per il calcolo degli angoli Pitch e Roll
double FunctionsPitchRoll(double A, double B, double C){
double DatoA, DatoB, Value;
DatoA = A;
DatoB = (B*B) + (C*C);
DatoB = sqrt(DatoB);
Value = atan2(DatoA, DatoB);
Value = Value * 180/3.14;
return (int)Value;
}
//Funzione per l'acquisizione degli assi X,Y,Z del MPU6050
void FunctionsMPU(){
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
if((Pitch) > 20){ //questa funziona determina quando accendere il led
digitalWrite(10, HIGH);
delay(500); //tempo accensione led acceleratore blu
}else{
digitalWrite(10, LOW);
}
if((Pitch) < -15){ //questa funziona determina quando accendere il led
digitalWrite(4, HIGH);
delay(200); //tempo accensione led freno rosso era 100
}else{
digitalWrite(4, LOW);
}
if (((Pitch) >= -10)&&((Pitch) <= 15)) //era -13 e 18
{
digitalWrite(7, HIGH); // accensione led cruise verde
}else{
digitalWrite(7, LOW);
}
}
la parte del sensore mpu6050 l'ho trovata in rete, mentre io ho implementato la sezione dedicata ai led con i riferimenti ai valori del sensore e l'inserimento delle funzioni if.
ciao e grazie a tutti

