Compare commits

..

24 Commits
nano-5 ... main

Author SHA1 Message Date
Stephan Richter 4915c7bf51 Merge branch 'nano-revision-2.0' into nano-revision-2.1 4 weeks ago
Stephan Richter 948cb7de7b bugfix 4 weeks ago
Stephan Richter a681d189dc Merge branch 'nano-revision-2.0' into nano-revision-2.1 4 weeks ago
Stephan Richter 2af1db36ec Merge branch 'nano-revision-2.0' into nano-revision-2.1 1 month ago
Stephan Richter e9afd6fcce Merge branch 'nano-revision-2.0' into nano-revision-2.1 1 month ago
Stephan Richter 8bdcfb6032 Merge branch 'nano-revision-2.0' into nano-revision-2.1 1 month ago
Stephan Richter 6a2184f33d Merge branch 'nano-revision-2.0' into nano-revision-2.1 2 months ago
Stephan Richter b6723b92fc Merge branch 'nano-revision-2.0' into nano-revision-2.1 2 months ago
Stephan Richter 769786e63a fixed revision 4 months ago
Stephan Richter 44fd0050e3 Merge branch 'nano-revision-2.0' into nano-revision-2.1 4 months ago
Stephan Richter 6e8016e718 Merge branch 'nano-revision-2.0' into nano-revision-2.1 5 months ago
Stephan Richter d65586ba0b Merge branch 'nano-revision-2.0' into nano-revision-2.1 5 months ago
Stephan Richter ef2488363d Merge branch 'nano-revision-2.0' into nano-revision-2.1 6 months ago
Stephan Richter a54897a4b5 Merge branch 'nano-revision-2.0' into nano-revision-2.1 6 months ago
Stephan Richter fcbde966e3 Merge branch 'nano-revision-2.0' into nano-revision-2.1 10 months ago
Stephan Richter 70425f8d22 Merge branch 'nano-revision-2.0' into nano-revision-2.1 10 months ago
Stephan Richter d0528773ec Merge branch 'nano-revision-2.0' into nano-revision-2.1 10 months ago
Stephan Richter 8e02709b32 fixed LCDReceiver for communication with RS485 rev 2.x boards 10 months ago
Stephan Richter 65501447fd pin change 10 months ago
Stephan Richter 247f061c2f Merge branch 'nano-revision-2.0' 10 months ago
Stephan Richter 3661309081 Merge branch 'nano-revision-2.0' 11 months ago
Stephan Richter 0ce4f0cd4d Projekt aufgeräumt 11 months ago
Stephan Richter ca66b1c380 Board nochmals überarbeitet 11 months ago
Stephan Richter 594e8ea06c Bugfix: RO des Max485 nun mit einem Interrupt-Pin verbunden 11 months ago
  1. BIN
      Hardware/Nano845.fzz
  2. 1
      README.md
  3. 95
      Software/BiDi/BiDi.ino
  4. 27
      Software/LCDReceiver/LCDReceiver.ino
  5. 61
      Software/Receiver/Receiver.ino
  6. 12
      Software/Sender/Sender.ino
  7. 11
      Software/SerialTransceiver/SerialTransceiver.ino
  8. 16
      Software/TempSender/TempSender.ino
  9. 12
      Software/TempSenderPlusIR/TempSenderPlusIR.ino

BIN
Hardware/Nano845.fzz

Binary file not shown.

1
README.md

@ -2,3 +2,4 @@ @@ -2,3 +2,4 @@
|-------|------------------|-----------------|---------|---------|
| 1.0 | D2 | D3 | U7 | U8 |
| 2.0 | D2 | (D10)| U8 | U7 |
| 2.1 | D3 | D2 | U8 | U7 |

95
Software/BiDi/BiDi.ino

@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
/* RS 485-Implementierung, die sowohl Schreiben als auch Lesen kann */
/* Basis für andere Projekte */
#define BUTTON 2
#define RECEIVE 3
#define RECEIVE_ENABLE 4
#define SEND 5
#define SEND_ENABLE 6
#define MAX_LEN 128
void setup() {
// Buttons connected to analog input lines
pinMode(A0,INPUT_PULLUP);
pinMode(A1,INPUT_PULLUP);
pinMode(A2,INPUT_PULLUP);
pinMode(A3,INPUT_PULLUP);
pinMode(A4,INPUT_PULLUP);
pinMode(A5,INPUT_PULLUP);
pinMode(A6,INPUT_PULLUP);
pinMode(A7,INPUT_PULLUP);
// Currently, all buttons are also connected via a diode to an interruptable pin, to notify on input changes.
// This interruptable pin should be assgined to BUTTON
pinMode(BUTTON,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON),button,FALLING); // interrupt for button change
// Set up pins for RS485 connection
pinMode(RECEIVE, INPUT);
pinMode(RECEIVE_ENABLE, OUTPUT);
pinMode(SEND, OUTPUT);
pinMode(SEND_ENABLE, OUTPUT);
attachInterrupt(digitalPinToInterrupt(RECEIVE),receive,CHANGE); // interrupt for incoming RS485 traffic
reset485();
buttons = 0x0;
}
void button() {
buttons = 0xFF ^ (digitalRead(A7)<<7 | digitalRead(A6)<<6 | digitalRead(A5)<<5 | digitalRead(A4)<<4 | digitalRead(A3)<<3 | (!digitalRead(A2))<<2 | digitalRead(A1)<<1 | digitalRead(A0));
}
void receive(){
bool received_bit = digitalRead(RECEIVE);
curr = micros();
duration = curr - last;
Serial.print("Input switched to ");
Serial.print(received_bit?"H":"L");
Serial.print(" after ");
Serial.print(duration);
Serial.println(" ticks");
last = curr;
if (duration > MAX_TICKS) reset485();
received_bit = !received_bit; // received_bit is the current value, the duration of the previous value (=inverted) has been measured
duration /= BASE;
while (duration > 0){
byte_idx--;
recv |= received_bit<<byte_idx;
if (byte_idx == 0) {
msg[msg_idx] = recv;
msg_idx++;
byte_idx = 8;
if (recv == 0x00) message_received();
}
duration--;
}
}
void reset485(){
byte_idx = 8;
msg_idx = 0;
recv=0x0;
}
void message_received(){
for (int i=0; i<MAX_LEN; i++) message[i]=msg[i];
reset485();
}
void button_pressed(int i){
Serial.println("not implemented");
}
void loop(){
if (buttons>0){
for (int i=0; i<7; i++){
if (buttons & (1<<i)) button_pressed(i);
}
}
if (message[0] != 0x0){
Serial.print("Received '");
Serial.print(message);
Serial.println("'");
message[0] = 0x0;
}
}

27
Software/LCDReceiver/LCDReceiver.ino

@ -9,19 +9,19 @@ @@ -9,19 +9,19 @@
#include <LiquidCrystal.h>
#include <SoftRS485.h>
#define PROGRAM "RS485-Nano Rev 2.0 / LCDReceive 1.2"
#define Max485_RO 2 // read-output of Max485
#define Max485_RE 8 // not-read-enable of Max485
#define Max485_DE 8 // data enable of Max485
#define Max485_DI 9 // data input of Max485
#define Max485_RO 3 // read-output of Max485
#define Max485_RE 5 // not-read-enable of Max485
#define Max485_DE 9 // data enable of Max485
#define Max485_DI 8 // data input of Max485
#define LCD_RS 10
#define LCD_EN 11
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7
#define LCD_RS 4
#define LCD_EN 6
#define LCD_D4 7
#define LCD_D5 11
#define LCD_D6 12
#define LCD_D7 13
#define PROGRAM "RS485-Nano 2.1 / LCDReceive 1.2"
// initialize the library by associating any needed LCD interface pin with the arduino pin number it is connected to
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
@ -29,10 +29,12 @@ LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7); @@ -29,10 +29,12 @@ LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
void setup() {
Serial.begin(115200);
init485(Max485_RO,Max485_RE,Max485_DE,Max485_DI); // library initialization:
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
lcd.begin(16, 4);
// Print a message to the LCD.
printMessage(PROGRAM);
}
void printMessage(String s){
@ -43,6 +45,7 @@ void printMessage(String s){ @@ -43,6 +45,7 @@ void printMessage(String s){
auto cstr = s.c_str();
for (int i=0;i<s.length();i++){
if (col == 0 && cstr[i] == ' ') continue;
if (cstr[i] == '{' || cstr[i] == '}') continue;
lcd.print(cstr[i]);
col++;
if (cstr[i]==',' || col==16){

61
Software/Receiver/Receiver.ino

@ -1,61 +0,0 @@ @@ -1,61 +0,0 @@
// Für Controllino könnte man benutzen: sRx = 20, sTx = 21, enable = 53
int sTx = 2;
int sRx = 3;
long base = 100;
long rst = base*10; // reset
boolean bt = false;
long dif = 0;
long lt = 0;
long now = 0;
char rcv = 0;
int idx = 0;
String message;
void setup(){
pinMode(sRx,INPUT);
pinMode(sTx,OUTPUT);
attachInterrupt(digitalPinToInterrupt(sRx),change485,CHANGE);
Serial.begin(115200);
Serial.println("Receiver ready");
}
void reset485(long dif){
rcv = 0;
idx = -1;
message.reserve(32);
}
void change485(){
bool bt = digitalRead(sRx);
now = micros();
dif = now - lt;
lt = now;
if (dif > rst){
reset485(dif);
} else {
handle485(!bt,dif);
}
}
void handle485(boolean bt, long dif){
long count = dif/base;
for (int i=0; i<count; i++) push485(bt);
}
void push485(boolean bt){
if (idx>=0) rcv |= bt<<idx;
idx++;
if (idx == 8){
if (rcv == 13) {
Serial.println(message);
message = "";
} else {
message+=rcv;
}
idx =0;
rcv =0;
}
}
void loop(){}

12
Software/Sender/Sender.ino

@ -20,13 +20,13 @@ @@ -20,13 +20,13 @@
#define ID 0
#define PROGRAM "Sender"
#define SW_VERSION "1.3"
#define HW_VERSION "2.0"
#define HW_VERSION "2.1"
#define BTN_INT 2 // button interrupt pin
#define Max485_RO 3 // read-output of Max485
#define Max485_RE 5 // not-read-enable of Max485
#define Max485_DE 9 // data enable of Max485
#define Max485_DI 8 // data input of Max485
#define BTN_INT 3 // button interrupt pin
#define Max485_RO 2 // read-output of Max485
#define Max485_RE 3 // not-read-enable of Max485
#define Max485_DE 8 // data enable of Max485
#define Max485_DI 9 // data input of Max485
#define TRESHOLD 1024
#define TRIGGER_LEVEL 200

11
Software/SerialTransceiver/SerialTransceiver.ino

@ -8,12 +8,13 @@ @@ -8,12 +8,13 @@
// include the library code:
#include <SoftRS485.h>
#define Max485_RO 3 // read-output of Max485
#define Max485_RE 5 // not-read-enable of Max485
#define Max485_DE 9 // data enable of Max485
#define Max485_DI 8 // data input of Max485
#define PROGRAM "{hw:RS485-Nano rev 2.0,firmware:Transceiver,version:1.0}"
#define Max485_RO 2 // read-output of Max485
#define Max485_RE 3 // not-read-enable of Max485
#define Max485_DE 8 // data enable of Max485
#define Max485_DI 9 // data input of Max485
#define PROGRAM "{hw:RS485-Nano rev 2.1,firmware:Transceiver,version:1.0}"
String message = "";
char c;

16
Software/TempSender/TempSender.ino

@ -20,16 +20,16 @@ @@ -20,16 +20,16 @@
// 5=Arbeitszimmer
// 6=Bad OG
#define ID 5
#define ID 0
#define HW_VERSION "2.1"
#define PROGRAM "TempSender"
#define SW_VERSION "1.5"
#define HW_VERSION "2.0"
#define BTN_INT 2 // button interrupt pin
#define Max485_RO 3 // read-output of Max485
#define Max485_RE 5 // not-read-enable of Max485
#define Max485_DE 9 // data enable of Max485
#define Max485_DI 8 // data input of Max485
#define BTN_INT 3 // button interrupt pin
#define Max485_RO 2 // read-output of Max485
#define Max485_RE 3 // not-read-enable of Max485
#define Max485_DE 8 // data enable of Max485
#define Max485_DI 9 // data input of Max485
#define TRESHOLD 1024
#define TRIGGER_LEVEL 200
@ -47,6 +47,7 @@ unsigned long capacitor[8]; @@ -47,6 +47,7 @@ unsigned long capacitor[8];
unsigned long times[8];
unsigned long sensor_time = 0;
// these values are used for temperature processing
SimpleDHT22 sensor(DHT_PIN);
float temperature = 0;
float humidity = 0;
@ -136,7 +137,6 @@ void loop(){ @@ -136,7 +137,6 @@ void loop(){
sensor_time = now;
if ((err = sensor.read2(&temperature, &humidity, NULL)) == SimpleDHTErrSuccess) {
String s = "{nano:"+String(ID)+",temp:"+String(temperature,1)+",humi:"+String(humidity,1)+"}";
Serial.println(s);
send485(s.c_str());
}
}

12
Software/TempSenderPlusIR/TempSenderPlusIR.ino

@ -24,13 +24,13 @@ @@ -24,13 +24,13 @@
#define ID 0
#define PROGRAM "Temp+IR"
#define SW_VERSION "0.1"
#define HW_VERSION "2.0"
#define HW_VERSION "2.1"
#define BTN_INT 2 // button interrupt pin
#define Max485_RO 3 // read-output of Max485
#define Max485_RE 5 // not-read-enable of Max485
#define Max485_DE 9 // data enable of Max485
#define Max485_DI 8 // data input of Max485
#define BTN_INT 3 // button interrupt pin
#define Max485_RO 2 // read-output of Max485
#define Max485_RE 3 // not-read-enable of Max485
#define Max485_DE 8 // data enable of Max485
#define Max485_DI 9 // data input of Max485
#define TRESHOLD 1024
#define TRIGGER_LEVEL 200

Loading…
Cancel
Save