ciao a tutti, sono nuovo quindi mi presento. sono alcatrak e sono alle prime armi con arduino.
è tutto il pomeriggio che sto impazzendo con un progetto, si tratta di un radar ove il motore è uno stepper motor e il display è formato da quattro led rossi e quattro verdi. funziona cosi il motore gira per circa un angolo di 45 gradi ove si alternano 4 funzioni, uno per un led. completato il giro torna indietro e si alternato le funzioni inverse, ma niente non funziona, il motore si muove sempre in un'unica direzione e i led si accendono di rosso. aiuto!!
//other
int val = 0;
//motor
#include <Stepper.h>
#define STEPS 80
Stepper myStepper(STEPS, 2, 3, 4, 5);
//sensore
const int TRIG_PIN = 6;
const int ECHO_PIN = 7;
//led
const int ledv1 = 8;
const int ledv2 = 9;
const int ledv3 = 10;
const int ledv4 = 11;
const int ledr1 = 14;
const int ledr2 = 15;
const int ledr3 = 13;
const int ledr4 = 12;
//funzioni
void f1() {
if(val = HIGH){
long durata, distanza;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
durata = pulseIn(ECHO_PIN,HIGH);
distanza = durata / 29.1 / 2 ;
if(distanza <= 15) {
digitalWrite(ledv1,HIGH);
digitalWrite(ledr1,LOW);
}
else if(distanza >= 35) {
digitalWrite(ledv1,HIGH);
digitalWrite(ledr1,LOW);
}
else{
digitalWrite(ledv1,LOW);
digitalWrite(ledr1,HIGH);
}
}
else{
digitalWrite(ledv1,HIGH);
digitalWrite(ledr1,LOW);
}
}
void f2() {
if(val = HIGH){
long durata, distanza;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
durata = pulseIn(ECHO_PIN,HIGH);
distanza = durata / 29.1 / 2 ;
if(distanza <= 15) {
digitalWrite(ledv2,HIGH);
digitalWrite(ledr2,LOW);
}
else if(distanza >= 35) {
digitalWrite(ledv2,HIGH);
digitalWrite(ledr2,LOW);
}
else{
digitalWrite(ledv2,LOW);
digitalWrite(ledr2,HIGH);
}
}
else{
digitalWrite(ledv2,HIGH);
digitalWrite(ledr2,LOW);
}
}
void f3() {
if(val = HIGH){
long durata, distanza;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
durata = pulseIn(ECHO_PIN,HIGH);
distanza = durata / 29.1 / 2 ;
if(distanza <= 15) {
digitalWrite(ledv3,HIGH);
digitalWrite(ledr3,LOW);
}
else if(distanza >= 35) {
digitalWrite(ledv3,HIGH);
digitalWrite(ledr3,LOW);
}
else{
digitalWrite(ledv3,LOW);
digitalWrite(ledr3,HIGH);
}
}
else{
digitalWrite(ledv3,HIGH);
digitalWrite(ledr3,LOW);
}
}
void f4() {
if(val = HIGH){
long durata, distanza;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
durata = pulseIn(ECHO_PIN,HIGH);
distanza = durata / 29.1 / 2 ;
if(distanza <= 15) {
digitalWrite(ledv4,HIGH);
digitalWrite(ledr4,LOW);
}
else if(distanza >= 35) {
digitalWrite(ledv4,HIGH);
digitalWrite(ledr4,LOW);
}
else{
digitalWrite(ledv4,LOW);
digitalWrite(ledr4,HIGH);
}
}
else{
digitalWrite(ledv4,HIGH);
digitalWrite(ledr4,LOW);
}
}
//
void setup() {
//sensore
pinMode(TRIG_PIN,OUTPUT);
pinMode(ECHO_PIN,INPUT);
//led
pinMode(ledv1, OUTPUT);
pinMode(ledv2, OUTPUT);
pinMode(ledv3, OUTPUT);
pinMode(ledv4, OUTPUT);
pinMode(ledr1, OUTPUT);
pinMode(ledr2, OUTPUT);
pinMode(ledr3, OUTPUT);
pinMode(ledr4, OUTPUT);
}
void loop() {
myStepper.step(5);
val = digitalRead(myStepper);
f1();
delay(1);
myStepper.step(5);
f2();
delay(1);
myStepper.step(5);
f3();
delay(1);
myStepper.step(5);
f4();
delay(1);
myStepper.step(-5);
f4();
delay(1);
myStepper.step(-5);
f3();
delay(1);
myStepper.step(-5);
f2();
delay(1);
myStepper.step(-5);
f1();
}