Hallo Zusammen
Ich will einen Temperatursensor (DS18S20) die Temperatur über einen ATtiny84A-Pu auslesen lassen und dann die Temperatur über ein nRF24L01 Modul an ein anderes NRF24L01 Modul senden.
Dieses ist über den Arduino Uno und den USB Anschluss mit dem PC verbunden. Die Temperatur soll am Schluss auf dem Seriellen Monitor dargestellt werden.
Ich habe zwei Programme geschriben und weiss nicht ob zusammenarbeiten. Da ich momentan noch ein Problem mit dem flashen des ATtinys habe, frage ich hier ob es so funktionieren würden.
Das ist das Programm für den Arduino Uno, der nur erhalten soll:
/*
* Pins:
* Hardware SPI:
* MISO -> 12
* MOSI -> 11
* SCK -> 13
*
* Configurable:
* CE -> 8
* CSN -> 7
*
*/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
void setup(){
Serial.begin(9600);
/*
* Set the SPI Driver.
*/
Mirf.spi = &MirfHardwareSpi;
/*
* Setup pins / SPI.
*/
Mirf.init();
/*
* Configure reciving address.
*/
Mirf.setRADDR((byte *)"cliel");
/*
* Set the payload length to sizeof(unsigned long) the
* return type of millis().
*
* NB: payload on client and server must be the same.
*/
Mirf.payload = sizeof(unsigned long);
/*
* Write channel and payload config then power up reciver.
*/
Mirf.config();
Serial.println("Listening...");
}
void loop(){
/*
* A buffer to store the data.
*/
byte data[Mirf.payload];
/*
* If a packet has been recived.
*
* isSending also restores listening mode when it
* transitions from true to false.
*/
if(!Mirf.isSending() && Mirf.dataReady()){
Serial.println("Got packet");
/*
* Get load the packet into the buffer.
*/
Mirf.getData(tempout);
Serial.println (tempout);
}
}
Und das ist der Code für den ATtiny:
#include <SPI85.h>
#include <Mirf.h>
#include <MirfHardwareSpi85Driver.h>
#include <nRF24L01.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// This USI was defined in SPI85.cpp
// Not to be confused with SPI (MOSI/MISO) used by ICSP pins
// Refer to page 61 of attiny84 datahseet
// USI pins could be redefined here
//#define USI-DO 5
//#define USI-DI 4
//#define USCK 6
#define ONE_WIRE_BUS 9
#define CE 7
#define CSN 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors2(&oneWire);
void setup() {
// Start the temperaturesensor
sensors2.begin();
/* * Set the SPI Driver. */
Mirf.spi = &MirfHardwareSpi85;
/* * Setup pins / SPI. */
Mirf.cePin = CE;
Mirf.csnPin = CSN;
Mirf.init();
/* * Configure reciving address. */
Mirf.setRADDR((byte *)"serv1");
/* * Set the payload length to sizeof(unsigned long) the * return type of millis(). * * NB: payload on client and server must be the same. */
Mirf.payload = sizeof(unsigned long);
/* * Write channel and payload config then power up reciver. */
Mirf.config();
}
void loop() {
sensors2.requestTemperaturesByIndex(0);
sensors2.getTempCByIndex(0);
float tempout = sensors2.getTempCByIndex(0);
/* * Set the send address. */
Mirf.setTADDR((byte *)"clie1");
/* * Send the data back to the client. */
Mirf.send((byte *) &tempout);
/* * Wait untill sending has finished * * NB: isSending returns the chip to receving after returning true. */
delay (10000);
}
Vielen Dank für eure Hilfe
techniclover
Mein Vorschlag zu deinem Problem:
Da du bekennender Anfänger bist, teste diese Funktionen erst auf 2 Arduino. Wenn es dann funktioniert, kannst du einen ATiny84 verwenden.
Dann kannst du deinen kopierten bzw. geschriebenen Sketch auch selbst kompilieren und siehst, welche Fehler du eingebaut hast.
P.S.
Als Anfänger ist es schon sehr anspruchsvoll mif Funk und NRF24L01 anzufangen.
Ich habe leider nur einen Arduino zu Hause um die Dinge auszuprobieren.
Diese ganzen Fragen sind alle für meine Abschlussarbeit, welche am Schluss eine Uhr mit Temperaturanzeige von aussen und innen sein sollte.
Nun funktioniert alles bis auf die Anzeige der Aussentemperatur.
Dann besorge dir doch einen preiswerten Arduino Nano, damit kannst du das sehr einfach testen und wenn es läuft, überträgst du es auf en ATtiny, so mache ich es jedenfalls. Das ist sehr viel einfacher.
P.S.
Dir ist sicher mehr geholfen, wenn du es komplett mit einem Arduino löst, dann kommen die ganzen zusätzlichen Fragen nicht auf, die du selbst auch nicht lösen kannst.
Könnte anstelle eines Arduino Nanos ein Arduino Trinket funktionieren?
techniclover:
Könnte anstelle eines Arduino Nanos ein Arduino Trinket funktionieren?
Der Trinket hat doch auch einen ATtiny drauf.
Damit wirst du die selben Probleme haben.
Wenn ich nun einen Code für einen Arduino schreiben würde und der würde funktionieren. Ist es dann sicheer, dass dieser danach auch für den ATtiny funktioniert?
Respektive müsssten grosse Änderungen an diesem Code vorgenommen werden?
Der Code ist nicht das Problem, die Librarys sind das Problem.
Aber dein eigentliches Problem ist deine geringe Erfahrung.
Da wirst du mit beiden Sytemen einfach noch viel lernen müssen.
Und du solltest das Pferd nicht von hinten aufzäumen.
Evtl. auch darüber nachdenken, einfachere Module einsetzen, mit denen es keine Probleme mit den Libraries im ATtiny gibt.
Das meine Erfahrung für dieses Projekt im Grunde nicht ausreicht, habe ich auch gemerkt, da das ganze Projekt jedoch in 3 Wochen abgegeben werden muss und man es sich einmal aussucht und dann nicht mehr änderrn kann, muss ich es beenden.
Wenn das Problem die Library sind:
Welche Librarys verwendest du?
Es war auch nicht möglich das Beispielprogramm ping_server auf den Arduino Uno zu laden:
Fehlermeldung:
In file included from C:\Users\Alexia\Documents\Arduino\libraries\Mirf\MirfSpiDriver.cpp:1:0:
C:\Users\Alexia\Documents\Arduino\libraries\Mirf\MirfSpiDriver.h:6:11: error: 'uint8_t' does not name a type
virtual uint8_t transfer(uint8_t data);
^
C:\Users\Alexia\Documents\Arduino\libraries\Mirf\MirfSpiDriver.cpp:3:1: error: 'uint8_t' does not name a type
uint8_t MirfSpiDriver::transfer(uint8_t data){
^
exit status 1
Error compiling for board Arduino/Genuino Uno.
techniclover:
Das meine Erfahrung für dieses Projekt im Grunde nicht ausreicht, habe ich auch gemerkt, da das ganze Projekt jedoch in 3 Wochen abgegeben werden muss und man es sich einmal aussucht und dann nicht mehr änderrn kann, muss ich es beenden.
Wieso beenden ? Umdenken, oder sind die verwendeten Komponenten vorgeschrieben ?
Ach du meinst abschließen ? Dennoch solltest du umdenken.
Wenn das Problem die Library sind:
Welche Librarys verwendest du?
Was ist das für eine Frage.
Es kommt doch immer drauf an, was der Arduino bzw. ATtiny machen soll.
Es war auch nicht möglich das Beispielprogramm ping_server auf den Arduino Uno zu laden:
Die Library kenne ich nicht. Ist evtl. nicht für den Uno geeignet.
Was soll die den machen.
Oder was soll der Pingserver machen ?
Ja die Komponenten sind vorgeschrieben. Und ich habe das Gefühl, dass dieses Kommunikationsmodul nicht sehr kompliziert ist.
Was der Arduino/Tiny machen soll habe ich am Anfang beschrieben. Er soll die Daten des Temperatursensors mithilfe des nRF24L01 Moduls übertragen.
Dieses Beispiel ist in der Mirf Library enthalten, die ich über diesen Link gedownloadet habe:
techniclover:
Ja die Komponenten sind vorgeschrieben. Und ich habe das Gefühl, dass dieses Kommunikationsmodul nicht sehr kompliziert ist.
Naja, das Gefühl hilft dir hier offensichtlich nicht weiter und ich muss hier passen, da mir das zu unüberlegt scheint.
Eine Funkübertragung und dem ATtiny hätte ich mit einem 433 MHz Sender gelöst.
Das funktioniert sicher und einfach ohne viele Libraries und passt auch sicher in den Flash des ATtiny.
OK vielen Dank trotzdem für deine Hilfe.