» »

arduino, bluetooth, l293d "break" ukaz

arduino, bluetooth, l293d "break" ukaz

geodet MD ::

Zdravo
izdelujem daljinski avto. Uporabljam arduino unor3, hc05 bluetooth modul, in l293d čip. ko povežem dela skoraj vse kot sem si zamislil samo, ko dam ukaz za naprej arduino motor vrti v nedogled, dokler ga jaz z drugim ukazom ne prekinem. Jaz pa bi rad, da dokler držim tipko za naprej, se naj motor vrti naprej, drugače pa se naj ustavi. kako bi to vključil v kodo, ki jo uporabljam?

Hvala za pomoč



int LED=13;
volatile int state = LOW;
char getstr;
int in1=6;
int in2=5;
int in3=4;
int in4=3;
int ENA=7;
int ENB=2;
int ABS=135;

void _mForward()
{
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
//digitalWrite(in3,LOW);
//digitalWrite(in4,HIGH);
Serial.println("go forward!");
}
void _mBack()
{
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
//digitalWrite(in3,HIGH);
//digitalWrite(in4,LOW);
Serial.println("go back!");
}
void _mleft()
{
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
//digitalWrite(in1,LOW);
//digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
Serial.println("go left!");
}
void _mright()
{
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
//digitalWrite(in1,HIGH);
//digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
Serial.println("go right!");
}
void _mStop()
{
//digitalWrite(ENA,HIGH);
//digitalWrite(ENB,HIGH);
digitalWrite(in1,LOW); //jaz dodal - drugače tevrstice ni
digitalWrite(in2,LOW); //jaz dodal - drugače tevrstice ni
digitalWrite(in3,LOW); //jaz dodal - drugače tevrstice ni
digitalWrite(in4,LOW); //jaz dodal - drugače tevrstice ni
Serial.println("Stop!");
}
void _mStopFB()
{
//digitalWrite(ENA,HIGH);
//digitalWrite(ENB,HIGH);
digitalWrite(in1,LOW); //jaz dodal - drugače tevrstice ni
digitalWrite(in2,LOW); //jaz dodal - drugače tevrstice ni
//digitalWrite(in3,LOW); //jaz dodal - drugače tevrstice ni
//digitalWrite(in4,LOW); //jaz dodal - drugače tevrstice ni
Serial.println("Stop!");
}
void _mStopLR()
{
//digitalWrite(ENA,HIGH);
//digitalWrite(ENB,HIGH);
//digitalWrite(in1,LOW); //jaz dodal - drugače tevrstice ni
//digitalWrite(in2,LOW); //jaz dodal - drugače tevrstice ni
digitalWrite(in3,LOW); //jaz dodal - drugače tevrstice ni
digitalWrite(in4,LOW); //jaz dodal - drugače tevrstice ni
Serial.println("Stop!");
}
void stateChange()
{
state = !state;
digitalWrite(LED, state);
}
void setup()
{
pinMode(LED, OUTPUT);
Serial.begin(9600);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
//_mStop();
}
void loop()
{
getstr=Serial.read();
if(getstr=='F')
{
_mForward();
//delay(30);
}
else if(getstr=='B')
{
_mBack();
//delay(25);
}
else if(getstr=='L')
{
_mleft();
// delay(25);
}
else if(getstr=='R')
{
_mright();
//delay(25);
}
// else if(getstr=='G')
// {
// _mForward();
// _mleft ();
// //delay(25);
// }
// else if(getstr=='I')
// {
// _mForward();
// _mright();
// //delay(25);
// }
// else if(getstr=='H')
// {
// _mBack();
// _mleft();
// //delay(25);
// }
// else if(getstr=='J')
// {
// _mBack();
// _mright();
// //delay(25);
// }
else if(getstr=='A')
{
stateChange();
}
else if(getstr=='W' or getstr=='w')
{
_mStopFB();
}
else if(getstr=='U' or getstr=='u')
{
_mStopLR();
}
else if(getstr=='V' or getstr=='v')
{
_mStop();
}
}

KraitPay ::

Nikjer ne "resetiraš" motorčkov. Ko pritisneš tipko F, greš naprej, ko jo spustiš, imaš motorčke še vedno prižgane. Najenostavneje je da v main dodaš še periodično izkapljanje motorčkov. Torej recimo, da vsake 250ms, resetiraš vse motorče, torej kličeš _mSTOP().

Drugače pa lahko rešiš tudi z while() stavkom in znotraj stavka, ko spustiš tipko, kličeš _mStop().

}

geodet MD ::

Hvala javim zvečer če sem uspel. Zaenkrat bom probal z while(). V čem je razlika med if () oz. else if () v kodi ki jo uporabljam. Zakaj ne morejo vsi stavki bit enostavno if (). Koliko je moje razumevanje programiranja (zelo zelo na osnovni ravni) če imam stavek if() pomeni, če imam nekaj naredi to. Če imam stavek esle if () pomeni, če imam nekaj naredi to, drugače naredi nekaj drugega. zakaj ne morem stop funcije klicat z else if().

if(getstr=='L')
{
_mleft();
// delay(25);
}
else if ()
{
_mStop();
// delay(25);
}

geodet MD ::

Z funkcijo while() nisem uspel rešit zadeve. Dodal sem
if(getstr=='L')
{
_mleft();
// delay(25);
}
while(getstr !='L')
{
_mStopLR();
}
in sedaj samo šiba ukaza za _mStopLR ()
"Najenostavneje je da v main dodaš še periodično izkapljanje motorčkov" to niti ne vem kaj naj naredim. prosim za pomoč.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Merjenje prevodnosti vode?

Oddelek: Elektrotehnika in elektronika
193024 (2179) Ribič
»

Arduino kot časovni rele

Oddelek: Pomoč in nasveti
81608 (1194) davor92
»

Pomoč C++

Oddelek: Pomoč in nasveti
71350 (1069) samo111
»

Arduino in luči (strani: 1 2 )

Oddelek: Elektrotehnika in elektronika
9812072 (9698) FX6300B
»

Arduino "leteče luči"

Oddelek: Elektrotehnika in elektronika
132999 (1876) zrataj4201

Več podobnih tem