avrei bisogno di un cosiglio per migliorare il progetto
di digitalizzazione con arduino di una pista Slotcars artigianale
Sto usando dei moduli rf24 e 2 arduino ,attualmente uno e nano,
un modulo mosfet e un pulsante a resistenze, commerciale slotcars della ninco .
Attualmente il progetto funziona ma vorrei migliorarlo
sia nella parte degli sketch e se fosse possibile nella parte della componentistica.
Qui lo sketch di trasmissione
#include <SPI.h>
#include "RF24.h"
#define BUTTON 4
#define vibrazione 5
RF24 myRadio (7, 8);
byte addresses[][6] = {"0"};
int stato_pulsante = 0;
char b_com[20]="ciao";
struct package
{
int id=1;
};
void setup()
{
pinMode(BUTTON,INPUT);
pinMode(vibrazione,OUTPUT);
Serial.begin(115200);
myRadio.begin();
myRadio.setChannel(115);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate( RF24_250KBPS ) ;
myRadio.openWritingPipe(addresses[0]);
delay(100);
}
typedef struct package Package;
Package Speed;
void loop()
{
int unsigned Speed=0;
Speed = analogRead(A0);
Speed = map(Speed, 0, 580, 0, 500);
Speed = abs(Speed/2);
myRadio.write(&Speed,sizeof(Speed));
Serial.println(Speed);
int stato_pulsante = digitalRead(BUTTON);
if (stato_pulsante == LOW){ Serial.println(b_com);
myRadio.write( &b_com,sizeof(b_com) );
}
if (stato_pulsante == LOW){ digitalWrite(vibrazione,HIGH);}
else digitalWrite(vibrazione,LOW);
delay(100);
}
Qui lo sketch di ricezione
#include <SPI.h>
#include "RF24.h"
#include "HCMotor.h"
#define POT_FWD_MIN (512 + DEADZONE)
#define POT_FWD_MAX 1204
#define MOTOR_PIN 9
HCMotor HCMotor;
RF24 myRadio (7, 8);
byte addresses[][6] = {"0"};
char b_com[20]="";
struct package
{
int id=1;
};
void setup()
{
HCMotor.Init();
// HCMotor.attach(0, DCMOTOR, MOTOR_PIN);
HCMotor.DutyCycle(0, 100);
//myRadio.setAutoAck(1);
//myRadio.setRetries(2,15);
myRadio.begin();
myRadio.setChannel(115);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate( RF24_250KBPS ) ;
myRadio.openReadingPipe(0, addresses[0]);
myRadio.startListening();
delay(100);
Serial.begin(115200);
pinMode(9,OUTPUT);
}
typedef struct package Package;
Package Speed;
void loop()
{
long Speed=0;
int Step=0;
long Value=0;
int bottone=0;
if (myRadio.available())
{
myRadio.read( &Speed, sizeof(Speed) );
if(Speed>=65) Value=10;
if(Speed>=80) Value=20;
if(Speed>=95) Value=30;
if(Speed>=110) Value=50;
if(Speed>=120) Value=70;
if(Speed>=145) Value=90;
if(Speed>=160) Value=120;
if(Speed>=185) Value=170;
if(Speed>=210) Value=200;
if(Speed>=245) Value=255;
if(Speed==0) Value=0;
analogWrite(9,Value);
Serial.println(Speed);
Serial.println(Value);
myRadio.read( &b_com,sizeof(b_com) );
}
bottone = int(b_com);
if ( bottone>0) Serial.println(b_com);
delay(100);
}
Difficoltà riscontrate:
Trasmissione utilizzando 2 canali:
Vorrei trasmettere separatamente il segnale del trigger da quello di un pulsante,
non so come usare i canali della libreria myRadio o se si possono usare a questo scopo.
rimappare in maniera precisa le letture analogiche del trigger
mi sono arrangiato con le iterazioni,
sicuramente il lavoro è grezzo anche se funzionante.
per ora ho lasciato la scrittura nel monitor seriale sia in trasmissione che in ricezione per comodità.
Domande:
Esiste la possibilità di mappare in maniera piu precisa il trigger in modo da programmare l'output
con diverse curve di "potenza" senza usare tutte quelle iterazioni ?
Avete suggerimenti comprensibili per me neofita per migliorare gli sketch ?
Grazie