b

 

 

Бложик потихоньку переезжает сюда

Проводное соединение Arduino при помощи RS485, часть 2


http://arrduinolab.blogspot.com/2015/02/arduino-rs485-2.html



Объединяем в сеть несколько ардуин. код из видео








// Проводное соединение Arduino при помощи RS485, часть 2
// первый пример, мастер.
//
#include <SoftwareSerial.h>

#define DIR 13 // переключатель прием\передача
 
SoftwareSerial RS485 (7, 6); // RX, TX

void setup(){
  Serial.begin(9600); 
  RS485.begin(4800); // SoftwareSerial   
   
  pinMode(DIR, OUTPUT);
  digitalWrite(DIR, HIGH); // включаем передачу
  
}

void loop(){  
   byte id = random(1, 3);
   RS485.write(id); // отправляем первый байт, в нем ID
   Serial.print(id);
     
  delay(500);
    
}
 


// Проводное соединение Arduino при помощи RS485, часть 2
// первый пример, слейв.
//

#include <SoftwareSerial.h>

#define DIR 8 // переключатель прием\передача
#define ID 1 // номер ардуины

SoftwareSerial RS485 (7, 6); // RX, TX

void setup(){
  Serial.begin(9600); 
  RS485.begin(4800); // SoftwareSerial   
   
  pinMode(DIR, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(DIR, LOW); // включаем прием
}

void loop(){
  
  if (RS485.available() > 0) {
    byte id = RS485.read(); // читаем байт, в нем для кого этот пакет    
    if (id == ID){ // и если пакет пришел нам        
        digitalWrite(13, HIGH); // мигнем диодом
        delay(100);
        digitalWrite(13, LOW);     
     }
    else RS485.flush(); // если не нам, очищаем буфер
    
  }
   
}


// Проводное соединение Arduino при помощи RS485, часть 2
// второй пример, мастер.
//
#include <SoftwareSerial.h>

#define DIR 13 // переключатель прием\передача
 
SoftwareSerial RS485 (7, 6); // RX, TX

void setup(){
  Serial.begin(9600); 
  RS485.begin(9600); // SoftwareSerial   
   
  pinMode(DIR, OUTPUT);
}

void loop(){
  
   if (RS485.available() >= 2) { // если пришел ответ 
     Serial.print(RS485.read()); // читаем первый байт, в нем от кого этот пакет
     if (RS485.read()) Serial.println(" - ON");     
     else Serial.println(" - OFF"); 
     
   }
    
 digitalWrite(DIR, HIGH); // включаем передачу
    RS485.write(random(1, 3)); // отправляем первый байт, в нем ID
    RS485.write(random(1, 3)); // отправляем второй байт,      
 digitalWrite(DIR, LOW); // включаем прием  
  
    delay(250); 
}
 


// Проводное соединение Arduino при помощи RS485, часть 2
// второй пример, слейв.
//
#include <SoftwareSerial.h>

#define DIR 8 // переключатель прием\передача

const byte ID = 2; // номер ардуины
 
SoftwareSerial RS485 (7, 6); // RX, TX
 
void setup(){
  Serial.begin(9600); 
  RS485.begin(9600); // SoftwareSerial   
 
  pinMode(DIR, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(DIR, LOW); // включаем прием
}

void loop(){
  
 if (RS485.available() >= 2) { // если пришло 2 байта
   byte id = RS485.read(); // читаем первый байт, в нем для кого этот пакет    
    if (id == ID){ // и если пакет пришел нам 
      byte val = RS485.read(); // читаем что хочет мастер
        if (val == 1) digitalWrite(13, HIGH);  // если там 1, включаем светодиод
        else digitalWrite(13, LOW);
        
      delay(10); // делаем задержку перед отправкой
      digitalWrite(DIR, HIGH); // включаем передачу
        RS485.write(ID); // отправляем свой id
        RS485.write(digitalRead(13)); // отправляем состояние светодиода
      digitalWrite(DIR, LOW);     
    }     
    else RS485.flush(); // если пакет не нам, очищаем буфер
    
  }
   
}