INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Inhalt einer Variable mit per Virtual Wire versenden
21.03.2016, 21:42
Beitrag #9
RE: Inhalt einer Variable mit per Virtual Wire versenden
Gibt es VirtualWire auch für den Raspberry PI? Ich habe Mr. Google gefragt aber bekomme keine vernünftige Ergebnisse Ich habe bis jetzt nur wiringPI im Einsatz und da hat die Auswertung sehr gut funktioniert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2016, 22:18
Beitrag #10
RE: Inhalt einer Variable mit per Virtual Wire versenden
(21.03.2016 21:42)toto1975 schrieb:  Gibt es VirtualWire auch für den Raspberry PI? Ich habe Mr. Google gefragt aber bekomme keine vernünftige Ergebnisse Ich habe bis jetzt nur wiringPI im Einsatz und da hat die Auswertung sehr gut funktioniert.

Ein VirtualWire für RasPi ist mir nicht bekannt.
Da gibt es wohl nur wiringPI.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2016, 22:43
Beitrag #11
RE: Inhalt einer Variable mit per Virtual Wire versenden
(18.03.2016 22:56)hotsystems schrieb:  Das geht in mehreren Schritten.

In der Deklaration:
Code:
unsigned long vcc = 0;
char Msg[10];

In der Loop, vcc enthält deinen Wert:
Code:
float h = vcc;                               // Wert1 Long in Float wandeln
h_as_int = h;                                // In Int wandeln                
sprintf (Msg, "%d", h_as_int);               // In char formatieren

Msg kannst du dann versenden.

warum nicht so?
sprintf (Msg, "%uld", vcc);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2016, 22:49
Beitrag #12
RE: Inhalt einer Variable mit per Virtual Wire versenden
(21.03.2016 22:43)Pit schrieb:  warum nicht so?
sprintf (Msg, "%uld", vcc);

Wenn's so auch geht, ist doch gut. Je einfacher umso besser. Wink

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2016, 19:58
Beitrag #13
RE: Inhalt einer Variable mit per Virtual Wire versenden
da ich jetzt nach langen suchen leider nichts gefunden habe außer RC-Switch versuche ich da weiter mein Glück.

Es scheint auch fast alles zu funktionieren leider nur fast :-(

Die Daten werden von meinen Attiny85 an den Raspberry gesendet und dieser empfängt auch die Daten nur bei dem Script scheint es noch einen Fehler zu geben. Wenn ich Daten 4436 am Raspberry empfange dann soll das Script monitor_aus.sh aufgerufen werden. Bei 4433 das Script Monitor_an.sh und um die Spannung anzeigen zu lassen habe ich einfach beim Attiny85 die Variable vcc + 90000 genommen somit kann ich dann auch die Spannung anzeigen lassen.

Als erstes werden die Steckdosen geschaltet und danach wird der Wert der Spannung versendet. Hier der Code auf dem Attiny85
Code:
int bewegung = 2;     //Pin für den PIR Sensor
int bewegungsstatus = 0;
int status = 0;

int adc_low, adc_high;  //Zwischenspeicher für die Ergebnisse des ADC
long adc_result;  //Gesamtergebnis der Messung des ADC
long vcc;  //Versorgungsspannung

#include <avr/sleep.h>
#include <avr/power.h>
#include <RCSwitch.h>
#include <avr/interrupt.h>
RCSwitch mySwitch = RCSwitch();


ISR(PCINT0_vect){
  
}

void setup()
{
  mySwitch.enableTransmit(3);
  mySwitch.setPulseLength(320);
  pinMode(bewegung, INPUT);
  GIMSK  |= (1<<PCIE);  // enable Pin Change interrupts
  PCMSK |= (1<<PB2); // enable PB2 which PCINT2 is on

  ADMUX |= (1<<REFS1); //VCC als Referenzspannung für den AD-Wandler
  ADMUX |= (1<<MUX3) | (1<<MUX2) | (1<<MUX1);  //1.1V Referenzspannung als Eingang für ADC
  delay(10);  //warten bis sich die Referenzspannung eingestellt hat
  ADCSRA |= (1<<ADEN);   //ADC aktivieren
}

void loop()
{
  bewegungsstatus = digitalRead(bewegung);
  
  if (status != bewegungsstatus)
  {

    if (bewegungsstatus == HIGH)
    {
      for (int i = 0; i < 3; i++) {
        mySwitch.send(4433, 24);
        delay(1000);
      }
      status = bewegungsstatus;
    
          }

    else
    {
      for (int i = 0; i < 3; i++) {
        mySwitch.send(4436, 24);

        delay(1000);
      }
      status = bewegungsstatus;
    
    }
  }
ADCSRA |= (1<<ADSC);  //Messung starten

  while (bitRead(ADCSRA, ADSC));  //warten bis Messung beendet ist
  //Ergebnisse des ADC zwischenspeichern. Wichtig: zuerst ADCL auslesen, dann ADCH
  adc_low = ADCL;
  adc_high = ADCH;

  adc_result = (adc_high<<8) | adc_low; //Gesamtergebniss der ADC-Messung
  //adc_result = adc;
  vcc = 1125300 / adc_result;  //Versorgungsspannung in mV berechnen (1100mV * 1023 = 1125300)
  vcc = vcc + 90000;
  delay(8500);
  mySwitch.send (vcc, 24);
  
enterSleep();
}


void interrupt() {
  //leere Interruptfunktion
}  

void enterSleep(){
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  //festlegen des Schlafmoduses
  sleep_enable();  //ermoeglichen der angegebenen Schlaffunktion
  sleep_mode();  //starten der Schlaffunktion
  //hier geht es nach dem Interrupt weiter
  sleep_disable();  //deaktivieren der Schlaffunktion
  power_all_enable();  //reaktivieren aller Chips/Funktionen
}

Dies wird auch auf dem Raspberry empfangen allerdings wird nach dem Senden der Spannung wohl irgendwie noch mal monitor_aus.sh ausgeführt. ich denke ich habe einen Fehler im If-Block

Hier mal das Script was auf dem Raspberry läuft

Code:
/*
  RFSniffer

  Usage: ./RFSniffer [<pulseLength>]
  [] = optional

  Hacked from http://code.google.com/p/rc-switch/
  by @justy to provide a handy RF code sniffer
*/

#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>


RCSwitch mySwitch;



int main(int argc, char *argv[]) {

     // This pin is not the first pin on the RPi GPIO header!
     // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
     // for more information.
     int PIN = 2;

     if(wiringPiSetup() == -1) {
       printf("wiringPiSetup failed, exiting...");
       return 0;
     }

     int pulseLength = 0;
     if (argv[1] != NULL) pulseLength = atoi(argv[1]);

     mySwitch = RCSwitch();
         if (pulseLength != 0) mySwitch.setPulseLength(pulseLength);
     mySwitch.enableReceive(PIN);  // Receiver on interrupt 0 => that is pin #2


     while(1) {

     if (mySwitch.available()) {

        long value = mySwitch.getReceivedValue();

                if (value == 0) {
                printf("Unknown encoding\n");
                }
                        else {
                                printf("Received %i\n", mySwitch.getReceivedValue() );
                                if (value >= 90000) {
                                        system("spannung_mo.sh");
                                        printf("Spannung %i\n", value);
                                }
                                else if (value == 4433) {
                                        system("monitor_an.sh");
                                         printf("an %i\n", value);
                                }
                                else if (value == 4436) {
                                        system("monitor_aus.sh");
                                         printf("aus %i\n", value);
                                }
                        }

    mySwitch.resetAvailable();
    }
}
  exit(0);
}

Kann mir hier einer weiterhelfen.... Ich habe keine Ahnung was ich hier noch machen kann. :-(

Danke und Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2016, 20:11
Beitrag #14
RE: Inhalt einer Variable mit per Virtual Wire versenden
Hast du denn mal versucht, die gesendeten Daten mit einem Arduino zu empfangen?
Sollte das funktionieren, liegt es wohl am Sript für den Raspi.
Damit solltest du dich dann an ein Raspi-Forum wenden.
Es sei denn, einer der hier mitlesenden User kann doch helfen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.03.2016, 17:58 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2016 17:59 von toto1975.)
Beitrag #15
RE: Inhalt einer Variable mit per Virtual Wire versenden
(20.03.2016 21:41)hotsystems schrieb:  Auch das Schalten lässt sich mit VirtualWire realisieren. Du kannst auf der Empfängerseite auf Zahlen oder Text auswerten.

Hallo,

leider passen rc-switch und Virtual Wire nicht auf den Attiny85. Ich habe jetzt mal versucht mit Virtual Wire den Code 4433 für die Steckdose zu senden
Code:
const char *msg = "4433";       // this is your message to send

   vw_send((uint8_t *)msg, strlen(msg));
   vw_wait_tx();

der Code wird auch von dem zweiten Arduino empfangen, allerdings wird die Steckdose nicht geschaltet. Ich denke es liegt daran das 4433 einzeln also
4
4
3
3
versendet wird.

wie versende ich die "4433" am "Stück"?

Viele Grüße
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.03.2016, 18:26 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2016 18:29 von hotsystems.)
Beitrag #16
RE: Inhalt einer Variable mit per Virtual Wire versenden
Ich kann mir nicht vorstellen, dass du mit VirtualWire das zum Laufen bekommen wirst.
VirtualWire sendet einen String, der aber nicht von RCSwitch decodiert werden kann. Auch die Steckdosen verstehen den gesendeten String nicht und können somit nichts verwertbares daraus machen.
Du kannst diesen String wieder nur mit VirtualWire empfangen und dekodieren

Warum muss es unbedingt ein ATtiny sein?
Du kannst evtl. Auch einen Atmega-StandAllone einsetzen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ausschaltverzögerung bei einer PV Heizung Hans_Maulwurf 27 723 29.11.2016 23:38
Letzter Beitrag: georg01
  Innenwiderstand einer Batterie (Rundzelle 1,5V) Einsteiger94 2 206 24.07.2016 11:42
Letzter Beitrag: SkobyMobil
  Mega: Hardware i2c bus speed (Wire.) verändern? HaWe 10 2.926 14.07.2016 20:09
Letzter Beitrag: Mathias
  Gewichteten Durchschnitt berechnen, 20 Werte in fortlaufender Variable speichern TimeMen 10 468 03.07.2016 09:00
Letzter Beitrag: Binatone
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 531 23.04.2016 10:26
Letzter Beitrag: rkuehle
  I2C Ansteuerung einer MSM3 (elv mp3 Box) Voreifel 2 315 09.04.2016 17:56
Letzter Beitrag: Voreifel
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 488 01.04.2016 05:49
Letzter Beitrag: MartinK
  char* inhalt in eine Datei auf SD-Karte schreiben MartinK 0 341 30.03.2016 16:42
Letzter Beitrag: MartinK
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 512 29.03.2016 16:45
Letzter Beitrag: MartinK
  Pin anhand Variable schalten ! b3ta 13 826 12.01.2016 08:30
Letzter Beitrag: b3ta

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste