Jump to content
ELFORUM - Forumul electronistilor
GreenEyes2020

Nu imi merge programul

Recommended Posts

Buna !!! Sunt incepator in Arduino si am de facut proiectul acesta.Am facut in thinkercad cu intreruperi.Cand apas o data pe buton ar trebui sa arate temperatura de la senzor1 iar cand apas a doua oara sa arate temperatura de la senzor2.Imi spuneti va rog, ce am gresit de imi dau urmatoarele erori ?Aici se poate vedea :

https://www.tinkercad.com/things/5wfJvqSCOBx-sensor-de-temp/

Link to post
Share on other sites

Acum 8 ore, GreenEyes2020 a spus:

Am facut in thinkercad cu intreruperi.Cand apas o data pe buton ar trebui sa arate temperatura de la senzor1 iar cand apas a doua oara sa arate temperatura de la senzor2.Imi spuneti va rog, ce am gresit de imi dau urmatoarele erori ?Aici se poate vedea :

https://www.tinkercad.com/things/5wfJvqSCOBx-sensor-de-temp/

Care erori? Cum arata sketch-ul generat (probabil) de aplicatia on-line?

OK, acum am vazut si codul. Despre asta discutam mai tarziu.

Modul de conectare al butonului este cel putin dubios! Vreau sa spun ca contactul nu este conectat la pinul digital 7 (asta este conectat permanent la +Vcc) astfel incat la apasare sa permita conectarea pinului digital 7 la +Vcc si Pin Change Interrupt sa fie activat.

Acum cu privire la sketh:

utilizarea acestei sintaxe pentru activarea intreruperii:

attachInterrupt(pin, ISR, mode)

nu este recomandata, dar se pare ca a fost folosita in sketch. Insa a fost folosita gresit pentru ca:

 attachInterrupt(0,temp,RISING);

Pinul 0 ar fi trebuit sa fie pinul care declanseaza intreruperea, insa in realizarea "practica" pinul folosit ar fi trebuit sa fie pinul digital 7. Vai, dar asta este conectat permanent la +Vcc si uC o va tine tot intr-o intrerupere (cred, nu am verificat). Pentru ca tot vorbim de pinul 7, asta nu are activata rezistenta de pull-up in program

pinMode(7, INPUT);

in loc de:

pinMode(7, INPUT_PULLUP);

Asa ca si de ar fi fot conectat corect butonul la pinul cu pricina, comportamentul uC ar fi fost bizar, ca sa nu spun haotic.

Un alt aspect ce tine tot de "folosirea" pinului 7: asta nu poate fi folosit decat cu intreruperea CHANGE (Pin Change Interrupt) pentru ca nu e asignat nici lui INT0, nici lui INT1.

Concluzia: Realizeaza fizic si electric corect montajul, inspira-te din sketch-ul propus de ciumpalac si scrie-ti propriul sketch in mod corect. Asta dupa ce te mai documentezi cum sta treaba cu intreruperile si cu structura unui program.

Incearca totusi si varianta asta (LiviuM a fost mai rapid):

int baselineTemp = 0;
int celsius = 0;
int button = 7;
int i = 0;
void setup()
{
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(A5, INPUT);
  pinMode(7, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(9, OUTPUT);
  attachInterrupt(0, temp, RISING);
}

void loop() {
  if (button)
  {
    if (!(i == 0))
    {
      int celsius = map(((analogRead(A5) - 20) * 3.04), 0, 1023, -40, 125);
      Serial.print(celsius);
      Serial.print( "C");

      if (celsius < 20) {
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, LOW);
        Serial.println("Temp de exterior  is cold ");
      }
      if (celsius > 20 && celsius < 30) {
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
        Serial.println(" Temp de exterior is fine ");

      }
      if (celsius > 30) {
        digitalWrite(2, LOW);
        digitalWrite(3, LOW);
        digitalWrite(9, HIGH);
        Serial.println(" Temp de exterior is hot");

        delay(1000);
      }
    }
  }
}
  void temp ()
  {
    if (button)
    {
      button = true;

      {
        int celsius = map(((analogRead(A5) - 20) * 3.04), 0, 1023, 0, 125);

        Serial.print(celsius);
        Serial.print( "C");

        if (celsius < 20) {
          digitalWrite(2, LOW);
          digitalWrite(3, HIGH);
          digitalWrite(4, LOW);
          Serial.println("Temp de ex is cold ");
        }
        if (celsius > 20 && celsius < 30) {
          digitalWrite(2, HIGH);
          digitalWrite(3, LOW);
          digitalWrite(4, LOW);
          Serial.println(" Temp de exterior  is fine ");

        }
        if (celsius > 30) {
          digitalWrite(2, LOW);
          digitalWrite(3, LOW);
          digitalWrite(9, HIGH);
          Serial.println(" Temp de exterior is hot ");
        }
        delay(1000);
      }
    }
  }

Poate functioneaza, nu stiu.

Edited by nico_2010
corectie
Link to post
Share on other sites

Dacă e pe RISING întreruperea nu contează cât stă butonul în HIGH, doar momentul trecerii este luat în calcul.

Din câte ştiu eu Uno aceeptă 2 doar întreruperi hardware 0 şi 1 şi numai pe pinii 2 şi 3, după specificaţii. Pe pinul 7 nu cred că merge cu întreruperi.

Link to post
Share on other sites

Dupa foaia de catalog merge si pe pinul 7 (PCINT23), dar trebuie sa stii cum tratezi intreruperea.

Acum 27 minute, mihaicozac a spus:

Dacă e pe RISING întreruperea nu contează cât stă butonul în HIGH, doar momentul trecerii este luat în calcul.

Am spus ca nu stiu cum se va comporta cand gaseste 1 logic pe pin. Dupa ce am citit DS pot spune ca nu va reactiona in niciun fel, cat timp nu are loc o schimbare de nivel logic pe pinul cu pricina (poate doar o singura data, la aplicarea tensiunii de alimentare, dar nu sunt convins de asta).

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines