salve a tutti,arrivo dritto al dunque il mio programma ha lo scopo di comandare un auto radiocomandata (direzione, velocità, luci, frecce, clacson, mod.automatica).
il mio nuovo obiettivo era quello di aggiungere altre 3 funzioni.
1-display lcd 16x2 IIC (semplice, ma non necessario)
2-sensore di temperatura (nulla di piu semplice)
3-modulo ethernet.
sul 3° punto ho bisogno del vostro aiuto. avevo intenzione di usare il modulo ENC28J60
l'idea è questa: tramite il modulo inviare al pc determinati risultati, come la temperatura o la velocità digitale dell auto, la direzione seguita ecc..., che verranno visualizzati anche su un eventuale modulo LCD (al momento non lo prevedo)
questo risultato verrà poi visualizzato all interno di una pagina web (la grafica è secondaria), ma cosa importante DEVE ESSERE IN TEMPO REALE (o quasi massimo qualche secondo di ritardo).
quello che vorrei sapere è:
il modulo è quello giusto?
poi, è fattibile? (specifico che ho 7 pin disponibili tra analogici e digitali)
grazie mille a tutti
questo è il programma (il codice del sensore di temperatura non c è e non badate alla disposizione dei pin)
#include <SoftwareSerial.h>
#include <Servo.h>
#define echoPin 2 // Pin to receive echo pulse
#define trigPin 3
SoftwareSerial BluetoothSerial = SoftwareSerial(0, 1); //si richiama il modulo bluetooth
Servo myservo;
const int input1m1 = 9; //input1 per il motore 1
const int input2m1 = 10;//input2 per il motore 2
const int enablem1 = 11;//regolatore motore 1
char marcia;
int velmotore = 0;
int i;
void setup() {
Serial.begin(9600);
BluetoothSerial.begin(9600); //si stabliscono le variabii generali
pinMode(echoPin, INPUT);// set echopin input
pinMode(trigPin, OUTPUT); // set pin trigger output
pinMode(input1m1, OUTPUT);
pinMode(input2m1, OUTPUT);
pinMode(enablem1, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
myservo.attach(13); // attaches the servo on pin 9 to the servo object
myservo.write(120);
}
void loop() {
if (BluetoothSerial.available()){
marcia=BluetoothSerial.read(); //vengono lette le marce e di conseguenza la velocità
if(marcia=='1'){
velmotore = 25;
}
if(marcia=='2'){
velmotore = 51;
}
if(marcia=='3'){
velmotore = 76;
}
if(marcia=='4'){
velmotore = 102;
}
if(marcia=='5'){
velmotore = 127;
}
if(marcia=='6'){
velmotore = 153;
}
if(marcia=='7'){
velmotore = 178;
}
if(marcia=='8'){
velmotore = 204;
}
if(marcia=='9'){
velmotore = 229;
}
if(marcia=='q'){
velmotore = 254;
}
if(marcia== 'U'){
do
{
digitalWrite(trigPin, LOW);// si imposta il trigpin spento per 2 microsecondi
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);//invia per 10 microsecondi un segnale
delayMicroseconds(10);
digitalWrite(trigPin, LOW);// si spegne il trigpin
int distance = pulseIn(echoPin, HIGH); // si legge il segnale (distanza in tempo <x>)
distance= distance/58;
if((distance>30)&&(distance!=0)){ // a volte arrivano degli zeri e quelli non li devo prendere in considerazione
digitalWrite(input1m1,HIGH); // accendo il motore
digitalWrite(input2m1,LOW);
analogWrite(enablem1, 200);
}
if((distance<30)&&(distance!=0)){
analogWrite(enablem1, 0); //il motore si ferma e indica col cicalino l'arresto
digitalWrite(7,HIGH);
delay(500);
digitalWrite(7,LOW);
delay(500);
}
if(BluetoothSerial.available() && BluetoothSerial.read()=='u') {goto fuori;}
} while(marcia=='U');
}
fuori:
if(marcia=='W'){ //luci
digitalWrite(6,HIGH);
}
if(marcia=='w'){
digitalWrite(6,LOW);
}
if(marcia=='V'){ //clacson
digitalWrite(7,HIGH);
}
if(marcia=='v'){
digitalWrite(7,LOW);
}
if(marcia=='X'){ //4 frecce
do{
digitalWrite(8,HIGH);
delay(750);
digitalWrite(8,LOW);
delay(750);
if(BluetoothSerial.available() && BluetoothSerial.read()=='x') {digitalWrite(8,LOW);}
}while(marcia=='X');
}
if(marcia=='F'){
digitalWrite(input1m1, HIGH); //vengono impostati i valori per i quali il motore va avanti
digitalWrite(input2m1, LOW);
analogWrite(enablem1, velmotore); //si imposta la velocità grazie al pin PWM
Serial.print("avanti");
}
else{
analogWrite(enablem1, 0); //senza comando il motore si ferma
}
if(marcia=='B'){
digitalWrite(input1m1, LOW); //vengono impostati i valori per i quali il motore va indietro
digitalWrite(input2m1, HIGH);
analogWrite(enablem1, velmotore); //si imposta la velocità grazie al pin PWM
}
if(marcia=='L'){
myservo.write(70);
}
else{
myservo.write(120);
}
if(marcia=='R'){
myservo.write(190);
}
if(marcia=='G'){ //AVANTI A SINISTRA
digitalWrite(input1m1, HIGH); //vengono impostati i valori per i quali il motore va avanti
digitalWrite(input2m1, LOW);
analogWrite(enablem1, velmotore); //si imposta la velocità grazie al pin PWM
myservo.write(70);
}
if(marcia=='I'){ //AVANTI A DESTRA
digitalWrite(input1m1, HIGH); //vengono impostati i valori per i quali il motore va avanti
digitalWrite(input2m1, LOW);
analogWrite(enablem1, velmotore); //si imposta la velocità grazie al pin PWM
myservo.write(190);
}
if(marcia=='H'){ //DIETRO A SINISTRA
digitalWrite(input1m1, LOW); //vengono impostati i valori per i quali il motore va indietro
digitalWrite(input2m1, HIGH);
analogWrite(enablem1, velmotore); //si imposta la velocità grazie al pin PWM
myservo.write(190);
}
if(marcia=='J'){
digitalWrite(input1m1, LOW); //vengono impostati i valori per i quali il motore va indietro
digitalWrite(input2m1, HIGH);
analogWrite(enablem1, velmotore); //si imposta la velocità grazie al pin PWM
myservo.write(70);
}
}
}