RS485 Kommunikation

Hier kommt noch der Salve 1 (Arduino Nano V3) Ist einfach mit 2 LED bestückt

/*In Arduino 1.0.1*/

#include "Arduino.h"
#include "RS485_protocol.h"
#include <SoftwareSerial.h>

#define ENABLE_PIN  4
#define LED 13


SoftwareSerial rs485 (2, 3);  // receive pin, transmit pin

// callback routines

void fWrite (const byte what)
{
  rs485.write (what);  
}

int fAvailable ()
{
  return rs485.available ();  
}

int fRead ()
{
  return rs485.read ();  
}

void setup()
{
  rs485.begin (9600);
  pinMode (ENABLE_PIN, OUTPUT);  // driver output enable
  pinMode (LED, OUTPUT);  // built-in LED
  pinMode(2,INPUT);
  pinMode(3,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
}  // end of setup


void loop()
{
  byte buf [10];                              // Buffer für Daten max 20 Byte
  byte received = recvMsg (fAvailable, fRead, buf, sizeof (buf) - 1,50);
  if (received){
    if (buf [0] != 1)
     return;  // not my device
   
    digitalWrite(buf[2],buf[3]);
  }
}  // end of loop

Hier ist der Attiny84 mit dem SlaveProgramm
Der Cores sind von hier
~~http://hlt.media.mit.edu/?p=1695~~
Aktualisiert

/*
Achtung Sektch für den ATTINY84A als RS485 Node In 1.0.1
 */

#include <SoftwareSerial.h>
#include "Arduino.h"
#include "RS485_protocol.h"

#define ENABLE_PIN  8
#define LED1 0
#define LED2 1

boolean Anfrage=true;
int Wert=2612;          // Sendewert
byte HB1,LB1=0;
byte msg[4];
byte MasterAdr=0;

SoftwareSerial rs485 (10, 9);  // receive pin, transmit pin

// callback routines

void fWrite (const byte what)
{
  rs485.write (what);  
}

int fAvailable ()
{
  return rs485.available ();  
}

int fRead ()
{
  return rs485.read ();  
}

void setup()
{
  rs485.begin (9600);
  pinMode (ENABLE_PIN, OUTPUT);  // driver output enable
  pinMode (LED1,OUTPUT);  // built-in LED
  pinMode (LED2,OUTPUT);
}  // end of setup


void loop()
{
  byte buf [10];                              // Buffer für Daten max 20 Byte
  byte received = recvMsg (fAvailable, fRead, buf, sizeof (buf) - 1,50);
  if (received){
    if (buf [0] != 2)
      return;  // not my device
    if (buf[1]==0x00){
      digitalWrite(buf[2],buf[3]);
    }
    if (buf[1]==0xAA){
      Anfrage=true;
    }
  }
  if (Anfrage==true){
    HB1=highByte(Wert);
    LB1=lowByte(Wert);
    msg[0]=MasterAdr;
    msg[1]=HB1;
    msg[2]=LB1;
    digitalWrite(ENABLE_PIN,HIGH);            // Treiber Aktivieren
    sendMsg (fWrite, msg, sizeof msg);        // Daten Senden
    digitalWrite(ENABLE_PIN,LOW);             // Treiber deaktiviern Empfänger akvivieren
  }
}  // end of loop