rakocid
Vytvořené odpovědi
-
AutorPříspěvky
-
rakocidÚčastník
Problem vyrieseny. Dakujem za rady.
Hodnoty ktore som posielal boli prijate pomocou bezdrotoveho priimaca nrf24. Ked boli na väcsiu vzdialenost niektore hodnoty boli na tolko skreslene ze ich nedokazalo poslat dalej.Bohužial som sem ani tu cast programu nenapisal. Wire zbernica funguje skvele.rakocidÚčastníkArduino nano som vymenil, nepomohlo.
Program zamrzne v casti ked komunikuje cez zbernicu wire.
Zacne pracovat az po restartovani arduino nano (slave). Restartovanie len mastra nepomaha.
Co by znamenalo keby bol zahlceny buffer?rakocidÚčastníkvyskúšal som posielať 3 bajty, vzdialenosť minimálna, zdroj som zvýšil na 2 ampere, nikdy to nevydrží dlhšie ako hodinu.
rakocidÚčastníkmusím použivať odpory?, keď mam na wire zbernicu pripojene ds3231? myslím že už ds3231 obsahuje odpory. Skúsil som to snimi aj bez nich ale správalo sa to rovnako. mohlo by pomocť vyradiť z ds3231 interne rezistory a pridať externe s nižsím odpor?
Alebo som rozmýšľal neposielať naraz 18 bytov ale rozdeliť to. Pýtať si napríklad po troch postupne. Nieje to veľa? Ale neviem ako sa to robí, či sa to dá. DS3231 knižnica funguje tak že si pýta stále len to čo potrebuje s funkciami (getSecond(); getMinute();…). Dalo by sa takéto slave zariadenie urobiť aj z arduino nano?
Ďakujem za radi
rakocidÚčastníkMASTER:
#include <DS3231.h>
#include <Wire.h>DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte year, month, date, DoW, hour, minute, second;
int c[18] ;
float humid, templ = 20, humid_2, temp2 = 20,humid_3, temp3 = 20,humid_4, temp4 = 20,humid_5, temp5 = 20, humid_6, temp6 = 20;void setup()
{
Wire.begin();
}void loop()
{
Wire.requestFrom(44, 18);
int x = 0;while (Wire.available())
{
c[x] = Wire.read();
x++;
}if(c[0] < 35 && c[0] > 5){
humid_5 = c[2];
temp5 = (c[0]*10)+(c[1]/10);
temp5 = temp5/10;}if(c[3] < 35 && c[3] > 5){
humid_4 = c[5];
temp4 = (c[3]*10)+(c[4]/10);
temp4 = temp4/10;}if(c[6] < 35 && c[6] > 5){
humid = c[8];
templ = (c[6]*10)+(c[7]/10);
templ = templ/10;}if(c[9] < 35 && c[9] > 5){
humid_2 = c[11];
temp2 = (c[9]*10)+(c[10]/10);
temp2 = temp2/10;}if(c[12] < 35 && c[12] > 5){
humid_3 = c[14];
temp3 = (c[12]*10)+(c[13]/10);
temp3 = temp3/10;}if(c[15] < 35 && c[15] > 5){
humid_6 = c[17];
temp6 = (c[15]*10)+(c[16]/10);
temp6 = temp6/10;}Serial.println(templ);
Serial.println(temp2);
Serial.println(temp3);
Serial.println(temp4);
Serial.println(temp5);
Serial.println(temp6);Serial.print(Clock.getHour(h12, PM), DEC);
Serial.print(‚ ‚);
Serial.print(Clock.getMinute(), DEC);
Serial.print(‚ ‚);
Serial.print(Clock.getSecond(), DEC);delay(2000);
}SLAVE:
#include <Wire.h>
byte c[18] ;void setup() {
Wire.begin(44);
Wire.onRequest(requestEvent);
}void loop() {
//…
}void requestEvent()
{
Wire.write(c,18);
}Program je dosť dlhý prepísal som základ toho ako využívam wire, dufam že len vtom budem mať neaku chybu, mam to zapojene na testovanie takto… používam aj ethernet modul, pretože udaje posielam po sieti. Odpory používam 4,7 kOhm
Attachments:
-
AutorPříspěvky