• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Komunikacja i2c pomiędzy NodeMCU a ProMini
#1
Witajcie!
Do mojego projektu muszę skomunikować NodeMCU v3 oraz ProMini za pomocą szyny i2c. Teoria jest całkiem jasna i zrozumiała, ale... nie działa tak jak należy, w zasadzie, nie działa wcale.
Kiedy robię zwykłą komunikację i2c typu master -> slave, wszystko jest super. Jednak kiedy master requestuje slave  już tak fajnie nie jest. Zastanawiam się, czy to ja popełniam błąd w kodzie, czy to jednak jakaś inna przyczyna. Robiłem testy z rezystorami podciągającymi oraz bez i nie przynosi to rezultatów. Dystans między urządzeniami to ok. 15 cm, docelowo będzie ok. 6-8m.
Czy możecie spojrzeć w mój kod i stwierdzić, czy są tam jakieś rażące błędy?

Master
Kod:
#include <Wire.h>
#include <RBD_Timer.h>

RBD::Timer timer_1(2500);
int x;

void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("Connected to serial port.");
  pinMode(LED_BUILTIN, OUTPUT);
}

void blysk() {
  digitalWrite(LED_BUILTIN, LOW); 
  delay(20);                     
  digitalWrite(LED_BUILTIN, HIGH);   
  delay(10);
}

void loop() {
  if (timer_1.isExpired()) { 
  Wire.requestFrom(8, 1);
  Serial.println("Wysłano request i2c.");
  x = Wire.read();
  if (x > -1) {
  Serial.print("Odebrano wartość: ");
  Serial.println(x);   
  }
  blysk();
  timer_1.restart();
  }


Slave
Kod:
#include <Wire.h>

int pom, percent;
const int AirValue = 670;   //663 -> w powietrzu
const int WaterValue = 140;  //310 -> w wodzie 

void setup() {
  Wire.begin(8);               
  Serial.begin(115200);          
  Serial.println("Connected to serial port.");
  Wire.onRequest(requestEvent);
  pinMode(LED_BUILTIN, OUTPUT);
}

void blysk() {
  digitalWrite(LED_BUILTIN, LOW);  
  delay(200);                      
  digitalWrite(LED_BUILTIN, HIGH);   
  delay(10);
}

void requestEvent() {
       pom = analogRead(A0);
       percent = map(pom,AirValue,WaterValue,0,100);;
       Wire.write(percent);
           Serial.print("Wysłano odpowiedź i2c: ");
           Serial.println(percent);
        blysk();  
}


void loop() {
 
   }


Z góry dzięki za pomoc!
K.
 
Odpowiedź
  


Wiadomości w tym wątku
Komunikacja i2c pomiędzy NodeMCU a ProMini - przez itepe - 05-04-2020, 11:54

Skocz do:


Przeglądający: 1 gości