iny baut rate ako nastaveny

Odpovědět
minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

iny baut rate ako nastaveny

Příspěvek od minicico1 » 07 črc 2020, 23:53

ahojte.staviam meteostanicu s arduino mini ktora cita data zo senzorov BMP180 a SHT 21 cez I2c + meria napetie baterie z analogoveho vstupu a dalsimi dvomi analogovymi vstupmi meria silu a smer vetra.zobudza sa po nejakej dobe a namerane hodnoty posle cez NRF24L01 pripojeneho cez SPI.problem je ze namerane hodnoty su uplne mimo skutocnej hodnoty a ked si dam vypisat premenne na serial zobrazia sa mi len nezmyselne znaky.serial mam nastaveny v programe na 9600.ked ale v serial monitori nastavim 19200 baud tak sa mi hodnoty zobrazia.divne na tom je ze pred tym mi vsetko fungovalo.potom som urobil nejake upravy a zacalo to robit taketo podivnosti aj ked som naspet nahral zalohu povodneho programu s ktorym to fungovalo.bije sa mi nejako I2c a SPI komunikacia alebo nieco podobne?

Kód: Vybrat vše

#include <Arduino.h>
#include <SPI.h>
#include "RF24.h"
#include <nRF24L01.h>
#include <Adafruit_BMP085.h>
#include <Wire.h>
#include <SHT21.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
RF24 radio(8, 10);
Adafruit_BMP085 bmp;
SHT21 sht;
const uint64_t pipe = 0xE8E8F0F0E1LL;
float data[6];
// zde se bude ukládat zda přišel impuls z watchdog timeru
// hodnota 1 simuluje impuls po zapnutí, aby jsme nečekali
volatile int impuls_z_wdt = 1;
// zde se ukládají impulsy
volatile int citac_impulsu = 2;
// zde nastavíme potřebný počet impulsů
// podle nastavení WDT viz níže je jeden impuls 8 sekund
volatile int impulsu_ke_spusteni = 10;

// impuls z WATCHDOG TIMERU /////////////////
ISR(WDT_vect)
{
  //když je proměnná impuls_z_wdt na 0
  if (impuls_z_wdt == 0)
  {
    // zapiš do proměnné 1
    impuls_z_wdt = 1;
  }
}


void enterSleep(void)
{
  //nastavení nejúspornějšího módu
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  // spánkový režim je povolený
  sleep_enable();
  // spuštění režimu spánku
  sleep_mode();

  // tady bude program pokračovat když se probudí

  // spánek zakázán
  sleep_disable();
  //znovu zapojení všech funkcí
  power_all_enable();
}


void setup()
{
  
  Serial.begin(9600);
  
  
  bmp.begin();

  radio.begin();
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);

  radio.openWritingPipe(pipe);

  // nastavení WATCHDOG TIMERU
  MCUSR &= ~(1 << WDRF); 
  WDTCSR |= (1 << WDCE) | (1 << WDE); 

  // nastavení času impulsu
  WDTCSR = 1 << WDP0 | 1 << WDP3; // 8 sekund, WDTCSR = B0110 --> 1 sekunda

  WDTCSR |= _BV(WDIE); 


}

void loop()

{
  //když je impuls z WATCHDOG TIMERU a zároveň i potřebný jejich počet
  if ((impuls_z_wdt == 1) & (impulsu_ke_spusteni == citac_impulsu))
  {

    //radio.powerUp();
    
    float rychlostvetra = map(analogRead(A2), 0.0f, 1024.0f, 0, 100);
    int vietor = analogRead(A1);
    int vstupnenapetie = analogRead(A0);
    float napetie = vstupnenapetie * (4.3 / 1023);
    float teplota = bmp.readTemperature();
    float tlak = (bmp.readPressure() / 100);
    float vlhkost = sht.getHumidity();
    float smervetra;
    if ( vietor < 720 && vietor > 660) {
    smervetra = 0;
  }


  if  ( vietor < 250 && vietor > 200) {
    smervetra = 180;
  }


  if  ( vietor < 500 && vietor > 430) {
    smervetra = 270;
  }


  if  ( vietor < 429 && vietor > 395) {
    smervetra = 90;
  }


  if  ( vietor < 580 && vietor > 540) {
    smervetra = 315;
  }


  if  ( vietor < 800 && vietor > 730) {
    smervetra = 45;
  }


  if  ( vietor < 390 && vietor > 350) {
    smervetra = 225;
  }


  if  ( vietor < 199 && vietor > 150) {
    smervetra = 135;
  }

    
    
    
    
    
    
    Serial.print("teplota  ");
    Serial.println(teplota);
    Serial.print("tlak  ");
    Serial.println(tlak);
    Serial.print("vlhkost  ");
    Serial.println(vlhkost);
    Serial.print("napetie  ");
    Serial.println(napetie);
    Serial.print("vietor  ");
    Serial.println(vietor);
    Serial.print("rychlostvetra  ");
    Serial.println(rychlostvetra);
    Serial.print("smervetra  ");
    Serial.println(smervetra);
    data[0] = teplota;
    data[1] = tlak;
    data[2] = vlhkost;
    data[3] = napetie;
    data[4] = smervetra;
    data[5] = rychlostvetra;
    radio.write(data, sizeof(data));
    //delay(200);
    radio.powerDown();


    citac_impulsu = 0;// vynuluj čítač
    impuls_z_wdt = 0; // vynuluj impuls
    enterSleep();// znovu do spánku
  }
  else
  {
    enterSleep();//znovu do spánku
  }
  citac_impulsu++; // inpuls se přičte i když nic neproběhlo


}

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: iny baut rate ako nastaveny

Příspěvek od ondraN » 08 črc 2020, 22:06

Zkus jiné arduino, abys vyloučil možnost že je vadné. Pokud bude chyba trvat, je nějaký problém v softu. Zkusit vyřadit ovladače vždy jednoho zařízení a zkusit. U arduino IDE moc možností jak na to přijít není.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: iny baut rate ako nastaveny

Příspěvek od pavel1tu » 09 črc 2020, 09:41

Když to fungovalo, už byl zapnutý SLEEP mode ?
Asi se to probouzí nějak divně - nemám jak otestovat, jsem na dovolené.


Já na nRF24 zkoušel data posílat podobně jako ty, ale zdálo s emi to nepřehledné a složité,
pak jsem to začal posílat jako balík dat přes struct a zdá se mi to lepší.

https://www.arduino-forum.cz/viewtopic. ... uct#p10238
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

Re: iny baut rate ako nastaveny

Příspěvek od minicico1 » 15 črc 2020, 13:52

Ahojte, takze problem bol len v tom ze pri nahravani kodu som mal ako dosku nastavene arduino mini 3.3V a ja som mal verziu 5V.myslel som ze ked to nevyhodi ziadnu err. Hlasku pri nahravani tak je jedno co je tam nastavene..a ono nieje ;)

minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

Re: iny baut rate ako nastaveny

Příspěvek od minicico1 » 15 črc 2020, 13:53

pavel1tu píše:
09 črc 2020, 09:41
Když to fungovalo, už byl zapnutý SLEEP mode ?
Asi se to probouzí nějak divně - nemám jak otestovat, jsem na dovolené.


Já na nRF24 zkoušel data posílat podobně jako ty, ale zdálo s emi to nepřehledné a složité,
pak jsem to začal posílat jako balík dat přes struct a zdá se mi to lepší.

https://www.arduino-forum.cz/viewtopic. ... uct#p10238
Dakujem za tip, aj mne sa to celkom pozdava.rozhodne je to prehladnejsie.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů