Cer ajutor. Nou pe forum si in arduino

Buna ziua tuturor!
Sunt Andrei si sunt incepator in programare si nou pe forum.
Am inceput de nu demult sa studiez Arduino, si intalnesc foarte multe neclaritati asupra diferitor teme.
As fi bucuros daca cineva ar fi dispus sa ma ajute.

Am urmamtorul exercitiu de rezolvat:

Creați un nou program Arduino. Definiți pinii 10 și 11 ca ieșire și conectați-le la semnalele motorului A1 și A2.(pentru A1=HIGH inainte, pentru A2=HIGH inapoi)
Adăugați o nouă funcție „setMotorSpeed” la programul dvs. Acest lucru este menit ca parametru de a
obține o valoare de adevăr (booleană) „forward”. Apoi implementați funcția următoare : Dacă functia „forward” are valoarea adevărată, motorul ar trebui să se rotească înainte, de altfel
înapoi. Pentru a face acest lucru, generați semnale de control adecvate pentru motor.

Am un Arduino Pro, cu cinci butoane de intrare. De pe fiecare buton se poate citi valoare lui analoga (este diferita pentru fiecare buton) si converti de la 0 la 1023.

void loop() {

boolean Vw=analogValue>800&analogValue<900;
boolean Rw=analogValue>600&analogValue<700;

analogValue = analogRead(A0);

if(Vw){digitalWrite(10, 1, digitalWrite(11, 0);
if(Rw){digitalWrite(11, 1, digitalWrite(10, 0,);

 }

Am realizat aceasta si functioneaza, dar cum ast putea sa realizez ceva ceea ce seamana cu

setMotorSpeed(boolean forward, int)
{
digitalWrite(PIN, forward);
digitalWrite(DIN, !forward);

 }

adica ca noua functie creata sa fie accesata in loop.

Ideea e ca urmatorul exercitiu va accesa aceasta functie de de setare a directiei, si va trebui la fiecare apasare a butonului sa pot mari viteza de rotatie, iar setarea directiei sa fie independenta de setarea vitezei.

Va multumesc anticipat!

Mie mi se pare că nici loop-ul nu e corect implementat. Tu prima dată evaluezi variabila “analogValue” şi abia apoi o citeşti. N-are niciun sens. E ca şi cum prima data ţi-ai da cu părerea şi abia apoi te-ai documenta :slight_smile:

Ca să putem să te ajutăm, dă mai multe detalii. De exemplu ce face funcţia digitalWrite? Cred că ai şi erori de sintaxă pe acolo, acoladele de la “if” nu sunt inchise.

https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/

Aha, am înţeles, face parte din API-ul Arduino. Well, în cazul ăsta iniţiatorul topicului probabil vrea ceva de genul ăsta

void setMotorDirection(bool forward)
{
    digitalWrite(10, forward);
    digitalWrite(11, !forward);
}


void loop()
{
    int analogValue = analogRead(A0);

    if(analogValue > 600 && analogValue < 700)
        setMotorDirection(true);
    else if(analogValue > 800 && analogValue < 900)
        setMotorDirection(false);
}

Buna ziua !
De cateva zile nu am intrat pe forum, dar sunt bucuros de raspunsurile postate.

Ceea ce am postat mai sus e doar o parte din cod, am vrut sa fac o schita.

In sfarsit vreau sa postez codul intreg. Va multumesc mult de ajutor.

#define PIN 10
#define DIN 11

int analogValue;

void setup() {

pinMode(PIN, OUTPUT);
pinMode(DIN, OUTPUT);

}

void loop() {
analogValue = analogRead(A0);

if(int Vw=analogValue<100){
setMotorSpeed(analogValue, true);
}

if (int Vw=analogValue>200&analogValue<300){
setMotorSpeed(analogValue, false);
}
}

void setMotorSpeed(int analogValue, boolean forward)
{
if(forward) {
digitalWrite(PIN, 1);
digitalWrite(7, 1); // LED verde
digitalWrite(8, 0); //LED orange
digitalWrite(12, 0); //LED rosu
digitalWrite(DIN, 0);
}

if(!forward) {
digitalWrite(PIN, 0);
digitalWrite(7, 1); // LED verde
digitalWrite(8, 0); //LED orange
digitalWrite(12, 0); //LED rosu
digitalWrite(DIN, 1);
}

else {
digitalWrite(PIN, 0);
digitalWrite(7, 0); // LED verde
digitalWrite(8, 0); //LED orange
digitalWrite(12, 1); //LED rosu
digitalWrite(DIN, 0);
}
}

Cum as putea la adaugarea unei noi functii driveForward (time, velocity) sa setez la apasarea urmatorului buton Vw=analogValue>800&analogValue<900, viteza si timpul de rotire a motorului?

As vrea ca aceasta functie sa fie valabila si in cazul daca voi comuta un alt motor la Pin 6 inainte, iar la pinul 9 inapoi.

Voi seta motoarele dupa urmatorul ciclu:

void SetMotorAB() {

analogValue = analogRead(0);
button=analogValue>400&analogValue<500;

if (button != lastButton) {

if (button == analogValue>400&analogValue<500) {
buttonCounter++;

  if (buttonCounter==4){buttonCounter=1;}
  }
  lastButton = button;

switch (buttonCounter)
{

case 1:
/*Motorul A e pornit si se roteste cu viteza setata
in functia driveForward */
break;

case 2:
/*Motorul B pornit si se roteste cu viteza setata
in functia driveForward */
break;

case 3:
/*Motoarele A si B sunt pornite si se rotesc cu viteza setata
in functia driveForward */

break;

case 4:
/*Motoarele A si B sunt oprite */

break;
}
}