mirror of
https://github.com/digistump/DigistumpArduino.git
synced 2025-09-17 17:32:25 -07:00
switch to setup for Arduino Boards Manager
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
version 2 as published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file printf.h
|
||||
*
|
||||
* Setup necessary to direct stdout to the Arduino Serial library, which
|
||||
* enables 'printf'
|
||||
*/
|
||||
|
||||
#ifndef __PRINTF_H__
|
||||
#define __PRINTF_H__
|
||||
|
||||
#ifdef ARDUINO
|
||||
|
||||
int serial_putc( char c, FILE * )
|
||||
{
|
||||
Serial.write( c );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
void printf_begin(void)
|
||||
{
|
||||
fdevopen( &serial_putc, 0 );
|
||||
}
|
||||
|
||||
#else
|
||||
#error This example is only for use on Arduino.
|
||||
#endif // ARDUINO
|
||||
|
||||
#endif // __PRINTF_H__
|
@@ -0,0 +1,222 @@
|
||||
/*
|
||||
This program sends readings from four or more sensor readings and appends
|
||||
addr data pipes to the beginning of the payloads.
|
||||
|
||||
The receiver is a RPi accepting 6 pipes and display received payload to the screen
|
||||
|
||||
RPi receiver will return the receive payload for sender to calculate the rtt
|
||||
if the string compared matched
|
||||
|
||||
Max payload size is 32 bytes
|
||||
|
||||
Forked RF24 at github :-
|
||||
https://github.com/stanleyseow/RF24
|
||||
|
||||
Date : 5/03/2013
|
||||
|
||||
Written by Stanley Seow
|
||||
stanleyseow@gmai.com
|
||||
*/
|
||||
|
||||
#include <LiquidCrystal.h>
|
||||
#include <SPI.h>
|
||||
#include "nRF24L01.h"
|
||||
#include "RF24.h"
|
||||
#include "printf.h"
|
||||
|
||||
#define RF_SETUP 0x17
|
||||
|
||||
LiquidCrystal lcd(10, 7, 3, 4, 5, 6);
|
||||
// Make way for the SPI pins
|
||||
// 10 -> LCD 4
|
||||
// 7 -> LCD 6
|
||||
// 3 -> LCD 11
|
||||
// 4 -> LCD 12
|
||||
// 5 -> LCD 13
|
||||
// 6 -> LCD 14
|
||||
|
||||
// Set up nRF24L01 radio on SPI pin for CE, CSN
|
||||
RF24 radio(8,9);
|
||||
|
||||
// Radio pipe addresses for the 2 nodes to communicate.
|
||||
// const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
|
||||
// const uint64_t pipes[2] = { 0xF0F0F0F0E2LL, 0xF0F0F0F0D2LL };
|
||||
// const uint64_t pipes[2] = { 0xF0F0F0F0E3LL, 0xF0F0F0F0D2LL };
|
||||
const uint64_t pipes[2] = { 0xF0F0F0F0F1LL, 0xF0F0F0F0D2LL };
|
||||
// const uint64_t pipes[2] = { 0xF0F0F0F0F2LL, 0xF0F0F0F0D2LL };
|
||||
// Pipe0 is F0F0F0F0D2 ( same as reading pipe )
|
||||
|
||||
char receivePayload[32];
|
||||
int counter=0;
|
||||
int timeoutTimer = 500;
|
||||
int loops = 0;
|
||||
|
||||
void setup(void)
|
||||
{
|
||||
|
||||
// Setup LCD
|
||||
lcd.begin(16,2);
|
||||
lcd.clear();
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("Ard Remote Node 2");
|
||||
|
||||
Serial.begin(57600);
|
||||
|
||||
printf_begin();
|
||||
printf("Sending nodeID & 4 sensor data\n\r");
|
||||
|
||||
radio.begin();
|
||||
|
||||
// Enable this seems to work better
|
||||
radio.enableDynamicPayloads();
|
||||
radio.setAutoAck(1);
|
||||
|
||||
// Setup default radio settings
|
||||
|
||||
radio.setDataRate(RF24_1MBPS);
|
||||
radio.setPALevel(RF24_PA_MAX);
|
||||
radio.setChannel(76);
|
||||
radio.setCRCLength(RF24_CRC_16);
|
||||
radio.setRetries(15,15);
|
||||
|
||||
radio.openWritingPipe(pipes[0]);
|
||||
radio.openReadingPipe(1,pipes[1]);
|
||||
|
||||
// Send only, ignore listening mode
|
||||
//radio.startListening();
|
||||
|
||||
// Dump the configuration of the rf unit for debugging
|
||||
radio.printDetails();
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
void loop(void)
|
||||
{
|
||||
int Data1,Data2,Data3,Data4 = 0;
|
||||
char temp[5];
|
||||
char nodeID[12];
|
||||
bool timeout=0;
|
||||
int timeout_timer = 500;
|
||||
|
||||
// Use the last 2 pipes address as nodeID
|
||||
sprintf(nodeID,"%X",pipes[0]);
|
||||
|
||||
char outBuffer[31]=""; // Clear the outBuffer before every loop
|
||||
unsigned long send_time, rtt = 0;
|
||||
|
||||
// Get readings from sensors
|
||||
Data1 = counter++;
|
||||
Data2 = analogRead(0);
|
||||
Data3 = analogRead(1);
|
||||
Data4 = random(0,1000);
|
||||
|
||||
if ( counter > 999 ) counter = 0;
|
||||
|
||||
// Append nodeID to the beginning of the payload
|
||||
strcat(outBuffer,nodeID);
|
||||
strcat(outBuffer,",");
|
||||
|
||||
// Convert int to strings and append with zeros if number smaller than 3 digits
|
||||
// 000 to 999
|
||||
|
||||
sprintf(temp,"%03d",Data1);
|
||||
strcat(outBuffer,temp);
|
||||
|
||||
strcat(outBuffer,",");
|
||||
|
||||
sprintf(temp,"%04d",Data2);
|
||||
strcat(outBuffer,temp);
|
||||
|
||||
strcat(outBuffer,",");
|
||||
|
||||
sprintf(temp,"%04d",Data3);
|
||||
strcat(outBuffer,temp);
|
||||
|
||||
strcat(outBuffer,",");
|
||||
|
||||
sprintf(temp,"%03d",Data4);
|
||||
strcat(outBuffer,temp);
|
||||
|
||||
// End string with 0
|
||||
// strcat(outBuffer,0);
|
||||
|
||||
printf("outBuffer: %s len: %d\n\r",outBuffer, strlen(outBuffer));
|
||||
|
||||
//lcd.clear();
|
||||
//lcd.setCursor(0,0);
|
||||
|
||||
lcd.setCursor(2,0);
|
||||
lcd.print(outBuffer);
|
||||
|
||||
send_time = millis();
|
||||
|
||||
// Stop listening and write to radio
|
||||
radio.stopListening();
|
||||
|
||||
// Send to hub
|
||||
if ( radio.write( outBuffer, strlen(outBuffer)) ) {
|
||||
printf("Send successful\n\r");
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("1:");
|
||||
}
|
||||
else {
|
||||
printf("Send failed\n\r");
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("0:");
|
||||
}
|
||||
|
||||
radio.startListening();
|
||||
delay(20);
|
||||
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("R: ");
|
||||
|
||||
while ( radio.available() && !timeout ) {
|
||||
|
||||
uint8_t len = radio.getDynamicPayloadSize();
|
||||
radio.read( receivePayload, len);
|
||||
// receive_payload[len] = 0;
|
||||
Serial.print("inBuffer: ");
|
||||
Serial.println(receivePayload);
|
||||
|
||||
lcd.setCursor(2,1);
|
||||
lcd.print(receivePayload);
|
||||
|
||||
// Compare receive payload with outBuffer
|
||||
if ( ! strcmp(outBuffer, receivePayload) ) {
|
||||
rtt = millis() - send_time;
|
||||
|
||||
// Send beep to Pin 2
|
||||
digitalWrite(2,HIGH);
|
||||
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("R: ");
|
||||
|
||||
lcd.setCursor(2,1);
|
||||
lcd.print(rtt);
|
||||
Serial.println(rtt);
|
||||
}
|
||||
|
||||
// Check for timeout and exit the while loop
|
||||
if ( millis() - send_time > timeout_timer ) {
|
||||
lcd.setCursor(2,1);
|
||||
lcd.print("Timeout");
|
||||
Serial.println("Timeout!!!");
|
||||
timeout = 1;
|
||||
loops = 0;
|
||||
}
|
||||
Serial.print(loops++);
|
||||
delay(10);
|
||||
} // End while
|
||||
|
||||
|
||||
Serial.flush();
|
||||
delay(250);
|
||||
digitalWrite(2,LOW);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user