Aktywne Wpisy

szyderczy_szczur +28
pilencjusz +81
Wykop jest nie do przeglądania. Nawrocki, to, Nawrocki tamto.
Wystarczy o czymś raz przeczytać. A tutaj 15 wpisów o tym samym.
Tuskoboty w natarciu, by przypadkiem nie przegrać wybory.
Największy hit to Mentzen jest spoko gość. Gdzie 2 tygodnie temu każdy wpis to negatywny o Mentzenie.
Sterowalność Was użytkowników jest wielka.
Wystarczy o czymś raz przeczytać. A tutaj 15 wpisów o tym samym.
Tuskoboty w natarciu, by przypadkiem nie przegrać wybory.
Największy hit to Mentzen jest spoko gość. Gdzie 2 tygodnie temu każdy wpis to negatywny o Mentzenie.
Sterowalność Was użytkowników jest wielka.





Hej Mirasy!
Szukam od kilku dni rozwiązania problemu. Wygląda on następująco:
Mam spięte magistralą i2c UNO r3 jako master i n klonów (dswyrobot - działają)
Dane przesyłane przez i2c:
Master:
- wysyła do slave'a 2 bajty danych (w tym momencie są to stany z przycisków, później będą to wyliczone kąty serw)
kod:
#include
const int buttonPin2 = 2;
const int buttonPin3 = 3;
byte buttonState2 = 0;
byte buttonState3 = 0;
byte test[] = {buttonState2, buttonState3};
void setup()
{
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
Wire.begin();
Serial.begin(9600);
}
void loop()
{
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
Wire.beginTransmission(4);
Wire.write(test[0]);
Wire.write(test[1]);
Wire.endTransmission();
delay(1000);
}
Slave:
-odbiera dane i zapala poszczególne diody
kod:
#include
#define SLAVEADDRESS 4
#define Regmapsize 2
#define MAXSENDBYTES
const int ledPin2 = 2;
const int ledPin3 = 3;
int ledState2 = 0;
int ledState3 = 0;
byte test[] = {ledState2, ledState3};
void setup()
{
Wire.begin(SLAVE_ADDRESS);
Wire.onRequest(requestEvent);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
}
void loop()
{
// delay(100); // czy jest to w ogóle potrzebne w tym wypadku?
}
void requestEvent(){
}
void receiveEvent(int bytesReceived)
{
while(1 < Wire.available())
{
test[0] = Wire.read();
test[1] = Wire.read();
if (test[0]>0)
{
digitalWrite(ledPin2, HIGH);
}
else
{
digitalWrite(ledPin2, LOW);
}
if (test[1]>0)
{
digitalWrite(ledPin3, HIGH);
}
else
{
digitalWrite(ledPin3, LOW);
}
}
delay(1000);
}
Co robię nie tak? Kluczową rolę w projekcie odgrywa komunikacja, a czas goni, nerwów brak..
Tak, d--a ze mnie nie programista. Nie miałem wcześniej zbyt owocnej pracy przy mikrokontrolerach...
Też polecam RS-485 a najlepiej dorzucić do tego MODBUS'a RTU żeby ustandaryzować komunikację(w necie widziałem gotowe przykłady na arduino).
Nie wiem dlaczego, ale wydawało mi się, że to i2c jest szybsze...
W takim razie podejście nr milion jeden do kolejnej próby rozwiązania problemu...
Dziękuję panowie, moderatora proszę o zamknięcie tematu.
PS. I2C działa napewno na 15m po skrętce sieciowej, i to biegnąc koło przewodu z 230v AC :P to jako ciekawostka bo I2C jest raczej magistralą na odlegości PCB ;)
Nic to, będę walczył dalej. Jeśli i przy RS485 będę miał jakiś problem, zawołam :)
I jeszcze raz dzięki!