Arduino schéma - arduino.sk

Včelárska váha Pomoc

Vaše nápady a pomoc s Vašimi projektami
Príspevky: 6
Registrovaný: Sob 11. Apr 2015 19:19:44

Včelárska váha Pomoc

Poslaťod mato2sk » Sob 11. Apr 2015 19:35:17

Zdravým potreboval by som pomôcť jedným programom pre včelársku ktorý som našiel na jednej nemeckej stránke pri kompilácii mi vyhadzuje dve chyby a neviem si akosi rady na moje amatérske vedomosti je to trochu zložité pomoc nezostane bez odmeny.
Potrebné veci nájdete na nasledujúcej stránke stačí kliknúť a stiahnuť "V1.0" a na "Wichtige Tools" tam sú nejaké knižnice
http://www.imker-stockwaage.de/software

Obrázok

Príspevky: 74
Registrovaný: Štv 04. Dec 2014 22:15:58
Bydlisko: Banská Bystrica

Re: Včelárska váha Pomoc

Poslaťod Robo Ulbricht » Sob 11. Apr 2015 20:01:34

V tom riadku 44 chýba jedna lomka. Všimni si tie riadky nad tým, kde sú to všetko poznámky. Ani autorovi to takto nemohlo fungovať. Predpokladám, že keď opravíš toto, aj druhá chyba zázračne pominie.

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Včelárska váha Pomoc

Poslaťod posjirka » Sob 11. Apr 2015 20:38:41

Pres tak. Misto 2 lomitek coby jednoradkova poznamka je tam 1 lomitko jako deleni. Diky tomu ze je pak poznamka brana jako novy radek a chyby na konci strednik vyhodi i tu druhou chybu jako neplatne zadani.

Príspevky: 6
Registrovaný: Sob 11. Apr 2015 19:19:44

Re: Včelárska váha Pomoc

Poslaťod mato2sk » Ned 12. Apr 2015 14:17:59

To som skúšal ako prvé a keď tam dám // potom mi vyhodí omnoho viac chýb
Obrázok

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Včelárska váha Pomoc

Poslaťod posjirka » Ned 12. Apr 2015 20:20:37

Nemas spravnou verzi knihovny lowpower nebo ji nemas vubec instalovanou. Casto se stava ze k projektu dosadi tvurce i pouzite knihovny a na nekterou zapomene. Zkusim to zitra stahnout a skomilovat. Kdyby se to povedlo bez chyb muzu ti nasdilet celou arduino ide i s knihovnama pres google disk. Snad se na to dostanu ...

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Včelárska váha Pomoc

Poslaťod posjirka » Pon 13. Apr 2015 8:37:52

Ahoj, tak mě to funguje (alespon se kompiluje).
Mam Arduino IDE 1.6.1.
Stahnul jsem i ten balíček z : http://www.imker-stockwaage.de/images/d ... kwaage.zip
Z něj jsem si vzal knihovny (Libraries) a přetáhnul je do : ...\arduino-1.6.1-windows\arduino-1.6.1\libraries\
Co mi hlásilo, že už existuje, to jsem nechal v původní verzi Arduina (tedy nenahrazovat, nepřepisovat)
Nahrál jsem si ten kod z : http://www.imker-stockwaage.de/images/d ... _V1_31.zip
opravil to 1 lomítko a dal zkontrolovat:

Volby pro sestavení se změnily; sestavuji vše znovu

Projekt zabírá 20 326 bytů (63%) úložného místa pro program. Maximum je 32 256 bytů.
Globální proměnné zabírají 1 194 bytů (58%) dynamické paměti, 854 bytů zůstává pro lokální proměnné. Maximum je 2 048 bytů.


Je pro jistotu takhle vypadá ten upravený SW:
Kód: Vybrať všetko
  /*
*  Imker Stockwaage mit Upload mit 3g itead

www.Imker-Stockwaage.de
Copyright Achim Pfaff

Circuit:
* Temperatur&Humidity sensor angeschlossen an digital in 2
* GPRS Shield seriell an digital in 6,7 angeschlossen
+ Waage an Pin Analog 2,3

*/

#include "DHT.h"
#include "LowPower.h"
#include <Wire.h>
#include <Adafruit_MPL115A2.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>


// Daten Imker-Stockwaage hier alles eintragen was benötigt wird

#define Sendeart       0    // 0 Sendeart per GSM   1  Sendeart SMS   3 Sendeart beides simultan (3 noch nicht nutzbar)
#define Sendeart1       0    // 0 Sendeart per MYSQL   1  Sendeart XIVELY
#define SLEEPMin  60  // Daten alle .... min. senden

// Daten für MYSQL Datenbank oder Xively
#define APIKEY         "Keyeingeben" //  XIVELY KEY wenn benutzt
#define FEEDID         12345678 //  feed ID rein Xively wenn benutzt
#define USERAGENT      "Nameeingeben" // Rein Xively wenn benutzt
char server[ ]=         "server.de";   // Bei Xively Imker-Stockwaage / Bei MYSQL servername eingeben
char port[ ]=           "80";   // Bei Xively 80 / Bei MYSQL 80
char url[]  = "/pfad/data2mysql.php";   // Pfad zur PHP-Datei eingeben
char key[]     = "Password"; // Passwort PHP Datei

// Daten für Netzbetreiber der Handykarte 
#define APN         "pinternet.interkom.de" //  APN des Netzwerkdienstes. (hier O2)
#define Username    ""      // Username  APN
#define Passwort    ""      // Passwort APN
#define PIN         ""      // Pin der Sim Karte
char phone_number[]="+49XXXXXX";  //anzurufende Nummer bei Schwarmalarm
char SMS_number[]="+49XXXXXX";    // SMS Nummer für Akkualarm und SMS Übertragung
char SMS_Kurzmitteilungsnummer[]="+49XXXXXX"; //Spezifische SMS Kurzmitteilungsnummer des Handykartenanbieters

float Akkualarmwert = 11.5;  //  Alarm bei Unterschreitung dieses Wertes.Bleiakku min. 10,8, besser 11,5

// Werte für analogen Gewichssensor für kalibration Sensor 1  (Analog 3)  Volk 1
#define kal1_Wert_1_1     1000    //Lesewert1 für
#define kal1_Gewicht_1_1  1700   //....kg
#define kal1_Wert_1_2     5000  //Lesewert2 für
#define kal1_Gewicht_1_2  7280 //kg

// Werte für analogen Gewichssensor für kalibration Sensor 2  (Analog 2)  Volk 2
#define kal2_Wert_1_1     1000    //Lesewert1 für
#define kal2_Gewicht_1_1  1700   //....kg
#define kal2_Wert_1_2     5000  //Lesewert2 für
#define kal2_Gewicht_1_2  7280 //kg


//Daten Imker-Stockwaage Ende



#define Schwarm 5  // alle ... min. Schwarmabfrage während schlafen, erste nach 1 min. (wenn Schlafzeit bei 1 Min. liegt.
#define DHTPIN 2            // Temperature&Humidity sensor port
#define SleepPIN13 13    // Sleep Pin für DMS Verstärker
#define SleepPIN12 12 // neuer Gewichtssensor
#define SleepPINGSM 3    // neuer sleep Modul GSM über Mofset
#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define onModulePin 8    // Pin 3G Modem einschalten
#define ResetModulePin 9 // Pin 3G Modem Reset


DHT dht(DHTPIN, DHTTYPE);    // DHT Sensor
Adafruit_MPL115A2 mpl115a2; // Drucksensor
//LiquidCrystal lcd(11, 10, 5, 4, 1, 0); // (RS, E, D4, D5, D6, D7) initialisieren der LCD Pins

float humidity,temperature;   // Werte Luftfeuchtigkeit und Temperatursensor
float analogValuekg3 = analogRead(3);  // analoger Wert an Pin3 für Wägezelle
float analogValuekg2 = analogRead(2);  // analoger Wert an Pin2 für Wägezelle
float analogAkku = analogRead(1);  // analoger Wert an Pin... für Spannungsmessung vom Akku
float gewicht2 = 0;
float gewicht3 = 0;
float Akku = 0;
int SLEEP = (SLEEPMin*7); // Umrechnung Schlafzeit von min. in interne Zahl
int SAb = (Schwarm*7);  // Umrechnung Schwarmabfrage von min. in interne Zahl
int maxdiff = 10; // 5 entspricht einem kg MAximale Gewichtsdifferenz für Schwarmalarm
int letztesGewicht3;  // letztes Gewicht für Schwarmabgang
int letztesGewicht2;  // letztes Gewicht für Schwarmabgang
int Akkusmsgesendet = 0;  // Akku leer SMS gesendet =1 bei 0 noch nicht gesendet

float pressureKPA1 = 0, temperatureC1 = 0; // Werte für P und T Sensor ausgelesen
float pressureKPA = 0, temperatureC = 0; // Werte für P und T Sensor umgerechnet
//int var2 = 6000/SLEEPMin; // ca. 3 Stunden um TCP nochmal zu starten (wegen 24 Stunden abbruch)

int CSQ_Wert =0; // CSQ Wert

int8_t answer;


int x = 0;


SoftwareSerial GPRS(6,7);


void setup(){
 
  Serial.begin(115200);
 
  //lcd.begin(16, 2);
  delay(1000);
  int z = 0;
  while(z < 10){
   // mach etwas wiederholendes 10 mal warten, um Programmierung aufzuspielen, nicht unbedingt nötig
   z++;
   //lcd.setCursor(0, 0);
   //lcd.print(z);
   delay(1000);
  }
  //lcd.setCursor(0, 0);
  //lcd.print("Starting...");
  pinMode(SleepPINGSM, OUTPUT);  // Sleppin oGSM
  digitalWrite(SleepPINGSM, HIGH);  // Schalte GSM ein
  delay(100);
  GPRS.begin(38400);                // GPRS baud rate
  delay(1000);
  pinMode(ResetModulePin, OUTPUT);
  pinMode(SleepPIN13, OUTPUT);  // Sleppin output für DMS Zelle
  digitalWrite(SleepPIN13, HIGH);  // Schalte DMS ein
  pinMode(SleepPIN12, OUTPUT);  // Sleppin Waage 2 (gleichzeitig Stromversorgung)
  digitalWrite(SleepPIN12, HIGH);  // Schalte Waage 2 ein
  //pinMode(SleepPIN5, OUTPUT);  // Sleppin output für SIM900
 
  delay(2000); 
 
 
  mpl115a2.begin(); //Drucksensor Start
  dht.begin();      // DHT Sensor Start
}


void loop()
{ leseDaten(); // lese Daten aus Sensoren
  startMODUL();
  delay(5000); // für Waldeinsatz und schlechten Empfang 0 standard
  if (Sendeart == 1){                      //SMS senden
  DatenSMSsenden();
  SLEEP = 10080;
  } 
  if (Sendeart == 0){                      //GSM senden
  startGSM();
  http_put();
  }
  //lcd.clear();
  Serial.print("loop");
  delay(4000); // neu damit daten sicher gesendet werden.
  sleep();  // führt Sleep aus immer 8s Mal Parameter SLEEP
}


void http_put() {
   char data[256];
  int data_size;

 
  GPRS.print("AT+CHTTPACT=\""); //Verbindung mit HTTP server
  GPRS.print(server);
  GPRS.print("\",");
  GPRS.println(port);       
  GPRS.flush();
  x=0;
  do{
    while(GPRS.available()==0);
    data[x]=GPRS.read(); 
    x++;
  }
  while(!(data[x-1]=='T'&&data[x-2]=='S' || data[x-1]=='R'&&data[x-2]=='O'));        //warten auf Response "REQUEST" oder Error


if (data[x-1]=='T') {   // Wenn error keine Daten senden
 
  char Data[256];
  char SendCmd[25];
  int i;
  i=0; memset(Data,'\0',256);
  int leer=0;
  static char dtostrfbuffer[15];
 
  //lcd.clear();
  //lcd.print("Sende Daten");
  // Request Syntax for TCP Socket Connection Type
if(Sendeart1 == 0) {
  i += sprintf(Data+i, "%s", "");
  i += sprintf(Data+i, "?A0=");
  dtostrf(gewicht2/10,1, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A1=");
  dtostrf(gewicht3/10,1, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A2=");
  dtostrf(pressureKPA+36,1, 1, dtostrfbuffer); //38
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A3=");
  dtostrf(temperatureC+2.6,1, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A4=");
  dtostrf(temperature,1, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A5=");
  dtostrf(humidity,1, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A6=");
  dtostrf(Akku/10,1, 2, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A7=");
  dtostrf(CSQ_Wert,1, 0, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A8=");
  dtostrf(leer,1, 0, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
 
  i += sprintf(Data+i, "&A9=");
  dtostrf(leer,1, 0, dtostrfbuffer);
  i += sprintf(Data+i, "%s", dtostrfbuffer);
  }
   
  if(Sendeart1 == 1) {
  i += sprintf(Data+i, "%s\n", "");
  i += sprintf(Data+i, "Gewicht_Volk_1,");
  dtostrf(gewicht2/10,5, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "Gewicht_Volk_2,");
  dtostrf(gewicht3/10,5, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "Luftdruck,");
  dtostrf(pressureKPA+36,4, 1, dtostrfbuffer); //38
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "Temp-P-Sensor,");
  dtostrf(temperatureC+2.6,5, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "Temperatur,");
  dtostrf(temperature,5, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "Luftfeuchtigkeit,");
  dtostrf(humidity,5, 1, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "Akku,");
  dtostrf(Akku/10,5, 2, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
 
  i += sprintf(Data+i, "CSQ,");
  dtostrf(CSQ_Wert,3, 0, dtostrfbuffer);
  i += sprintf(Data+i, "%s\n", dtostrfbuffer);
  }
 
   
  //lcd.println(i-7);
  Serial.println(Data);
 
  // Ende alternative Datensenden

  //lcd.print("Content-Length: ");
 
 

  if(Sendeart1 == 0) {
  GPRS.print("GET ");
  GPRS.print(url);
  GPRS.print(Data);
  GPRS.print("&key=" + String(key));
  GPRS.println(" HTTP/1.1");
  GPRS.print("Host: ");
  GPRS.println(server);
  GPRS.println();
  Serial.println("fertig!");
  }
  if(Sendeart1 == 1) {
  GPRS.print("PUT /v2/feeds/");
  GPRS.print(FEEDID);
  GPRS.println(".csv HTTP/1.1");
  GPRS.println("Host: api.xively.com");
  GPRS.print("X-ApiKey: ");
  GPRS.println(APIKEY);
  GPRS.print("User-Agent: ");
  GPRS.println(USERAGENT);
  GPRS.print("Content-Length: ");
  GPRS.println(i);
  GPRS.println("Content-Type: text/csv");
  GPRS.println("Connection: close");
  GPRS.println(Data);
  }
 
  GPRS.write(0x1A);       
  GPRS.write(0x0D);
  GPRS.write(0x0A);
Serial.println("gesentet");
}


Serial.print(data[x-6]);
Serial.print(data[x-5]);
Serial.print(data[x-4]);
Serial.print(data[x-3]);
Serial.print(data[x-2]);
Serial.print(data[x-1]);
}



void startMODUL(){
 
  digitalWrite(SleepPINGSM, HIGH);  // Schalte GSM ein
  delay(200);
 
  uint8_t answer=0;
  answer = sendATcommand("AT", "OK", 2000);
    if (answer == 0){
  pinMode(onModulePin, OUTPUT);
  digitalWrite(onModulePin,HIGH);
  delay(180);
  digitalWrite(onModulePin,LOW);
  delay(6000);
// waits for an answer from the module
        int i = 0;
        while(i<5 || answer == 0){     // Send AT every two seconds and wait for the answer
            answer = sendATcommand("AT", "OK", 2000) ;
         i++; 
       
        }

Serial.println(answer);
  Serial.print("Modul an");



    }
}
 

void startGSM(){

  readCSQ();
char aux_string[50];
   
   delay(1000);
   
   
    // sets the PIN code
    //sendATcommand("AT+CPIN=****", "OK", 2000);
    Serial.print("vor Pin");
    sprintf(aux_string, "AT+CPIN=%s", PIN);
    answer = sendATcommand(aux_string, "OK", 2000);
    Serial.println(aux_string);
    Serial.println(answer); //Versuch Pin mit Variablen
       
    int i = 0;   
    while( (i<20 || sendATcommand("AT+CREG?", "+CREG:0,1", 500) ||
            sendATcommand("AT+CREG?", "+CREG:0,5", 500)) == 0 ) { i++; };
           
    if (i >= 20){
    Serial.println("CMD fehlgeschlagen startGSM");;
    }         
   
    delay(1000);
    // sets APN, user name and password
//X   answer = sendATcommand("AT+CGSOCKCONT=1,\"IP\",\"pinternet.interkom.de\"", "OK", 2000);
    //sendATcommand("AT+CSOCKAUTH=1,1,\"username\",\"password\"", "OK", 2000);
//X  Serial.print(answer);
//X  Serial.print("APN");
   
   Serial.print("vor IP");
   sprintf(aux_string, "AT+CGSOCKCONT=1,\"IP\",\"%s\"", APN, ";" );
   answer = sendATcommand(aux_string, "OK", 2000);
   Serial.println(aux_string);
   Serial.println(answer);
   sprintf(aux_string, "AT+CSOCKAUTH=1,1,\"%s\",\"%s\"", Username ,Passwort );
   answer = sendATcommand(aux_string, "OK", 2000);
   Serial.println(aux_string);
   Serial.println(answer); //Versuch mit Variablen
 
    delay(5000);
}



int8_t sendATcommand(char* ATcommand, char* expected_answer1,
        unsigned int timeout)
{

    uint8_t x=0,  answer=0;
    char response[100];
    unsigned long previous;

    memset(response, '\0', 100);    // Initialize the string
   
    delay(100);
   
    while( GPRS.available() > 0) GPRS.read();    // Clean the input buffer
   
    GPRS.println(ATcommand);    // Send the AT command
   
    x = 0;
    previous = millis();

    // this loop waits for the answer
    do{

        if(GPRS.available() != 0){   
            response[x] = GPRS.read();
            //lcd.print(response[x]);    // Send the AT command
            x++;
            // check if the desired answer is in the response of the module
            if (strstr(response, expected_answer1) != NULL)   
            {
              answer = 1;
            }
        }
        // Waits for the asnwer with time out
    }while((answer == 0) && ((millis() - previous) < timeout));   

    return answer;
}


void leseDaten(){     // liest Daten von Sensoren aus
 
  humidity = 0;    // Mittelwert bilden
  temperature = 0;
  pressureKPA = 0;
  temperatureC = 0;
  for(byte i = 0; i < 5; i++)
  {
  humidity += dht.readHumidity();
  temperature += dht.readTemperature();
  mpl115a2.getPT(&pressureKPA1,&temperatureC1); // Drucksensor P und T auslesen
  pressureKPA += pressureKPA1;
  temperatureC += temperatureC1;
  delay(100);
  }
  humidity /= 5;
  temperature /= 5;
  pressureKPA /= 5;
  temperatureC /= 5; // Mittelwert bilden ende
 
  pressureKPA=pressureKPA*10,0;
  temperatureC=temperatureC*1,1;
 
  analogpin3(); // Waage an Analog 3 auslesen
  analogpin2(); // Waage an Analog 3 auslesen
  analogAkku1(); // Akku an Analog 1 auslesen
  }
 
  // Modul um kg am Pin0 analog auszulesen und in das Gewicht umzurechnen
void analogpin3() // Waage 1 auf Platine
{
  analogValuekg3 = 0;
  for(byte i = 0; i < 10; i++) // Schleife 10 Messwerte Mittelwert bilden
  {
  analogValuekg3 += analogRead(3);
  delay(100);
  }
  // lese Wert vom Analogpin in Variable
  //analogValuekg3 = analogRead(3);
  int wert = analogValuekg3; // nur für Anzeige
  gewicht2=map(analogValuekg3,kal1_Wert_1_1,kal1_Wert_1_2,kal1_Gewicht_1_1,kal1_Gewicht_1_2); // umrechnen 450,4600,1400,9280
  gewicht2 /= 10; // Mittelwert bilden ende durch 100  da 10 Werte und 10fache Angabe
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //lcd.clear();
  //lcd.setCursor(0, 0);
  //lcd.print("m1:");
  //lcd.print((gewicht2/10),1);
  //lcd.print(" S:");
  //lcd.print((wert/1.0),1);
  letztesGewicht3 = analogValuekg3/10; // Wert für Schwarmabfrage setzen
  }




void analogpin2()  // Waage 2 auf Platine
{
  analogValuekg2 = 0;
  for(byte i = 0; i < 10; i++) // Schleife 10 Messwerte Mittelwert bilden
  {
  analogValuekg2 += analogRead(2);
  delay(100);
  }
  //analogValuekg2 /= 5; // Mittelwert bilden ende
  // lese Wert vom Analogpin in Variable
  //analogValuekg2 = analogRead(2);
  int wert = analogValuekg2; // nur für Anzeige
  gewicht3=map(analogValuekg2,kal2_Wert_1_1,kal2_Wert_1_2,kal2_Gewicht_1_1,kal2_Gewicht_1_2); // umrechnen 940,4970,1400,9280
  gewicht3 /= 10; // Mittelwert bilden ende durch 100  da 10 Werte und 10fache Angabe
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //lcd.setCursor(0, 1);
  //lcd.print("m2:");
  //lcd.print((gewicht3/10));
  //lcd.print(" S:");
  //lcd.print((wert/1.0),1);
  letztesGewicht2 = analogValuekg2/10; // Wert für Schwarmabfrage setzen
}

void analogAkku1()
{
  // lese Wert vom Analogpin in Variable
   analogAkku = 0;
  for(byte i = 0; i < 10; i++) // Schleife 5 Messwerte Mittelwert bilden
  {
  analogAkku += analogRead(1);
  delay(100);
  }
  Akku=map(analogAkku,7730,8150,1198,1265); // umrechnen
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  Akku /= 10; // Mittelwert bilden ende durch 100  da 10 Werte und 10fache Angabe
  /*lcd.print("Wert: ");
  lcd.println((analogAkku));
  lcd.print("Akku V: ");
  lcd.println((Akku/10.0),2);
  */
}

void readCSQ()
{
// CSQ bestimmen 
    char CSQ[128]; // Qualität Signal
    GPRS.println("AT+CSQ");
  x=0;
    do{
        while(GPRS.available()==0);
        CSQ[x]=GPRS.read();
         
        x++;                       
    }
    while(!(CSQ[x-1]=='K'&&CSQ[x-2]=='O'));
   
  do{ x--;                       
    }
    while(!(CSQ[x]==':'&&CSQ[x-1]=='Q'&&CSQ[x-2]=='S') || (x == 1) );
    char a;
    a= (CSQ[x+2]);
    char b;
    b= (CSQ[x+3]);
    int c = (a-48);
  int d = (b-48);
if ((d > 9) || (d <0))
{
CSQ_Wert = c;
}
if ((d >= 0 ) && (d <= 9))
{
CSQ_Wert = c*10+d;
Serial.print(CSQ_Wert);
}   
  // Ende CSQ   
}

void sleep  () // Schlaafmodus + Gewichtsabfrage jede Minute wegen Schwarmabgang
{
  int SMS = 0;  // keine SMS senden
  int SMSAkku = 0;  // keine SMS senden
  delay(10);
  //lcd.clear();
  //lcd.setCursor(0, 0);
  Serial.print("gehe schlafen ");
  delay(1000);
  GPRS.println("AT+CPOF"); // 3G Modul ausschalten
  delay(1000);
  digitalWrite(SleepPINGSM, LOW);  // Schalte GSM aus über Mofset, damit kein Strom gebraucht wird. 
  digitalWrite(SleepPIN13, LOW);  // Schalte DMS Waage 1 aus
  digitalWrite(SleepPIN12, LOW);  // Schalte Waage2 aus
  delay(100);
  for (int i=0; i <= SLEEP; i++){
    LowPower.powerDown(SLEEP_8S, ADC_OFF,   BOD_OFF); // Arduino für 8 Sekunden schlafen lassen.
    //lcd.setCursor(0, 1);
   Serial.print(i);
    delay(10);
   
    // ab hier abfrage ob Schwarm abgegangen ist
    if ((i == 7) || (i == SAb*1) || (i == SAb*2) || (i == SAb*3) || (i == SAb*4) || (i == SAb*5) || (i == SAb*6) || (i == SAb*7) || (i == SAb*8) || (i == SAb*9) || (i == SAb*10) || (i == SAb*11) || (i == SAb*12))   // alle ... minuten Gewicht abfragen, am Anfang nach einer Minute
    //if((i % SAb == 0) || (i == 7)) //  wenn i das vielfache von SAb ist dann Schwarmabfrage oder auch nach 1 min. nach Start (i =7) (% ist Modulo Operator)
    {
      digitalWrite(SleepPIN13, HIGH);  // Schalte DMS ein für kurze Abfrage
      digitalWrite(SleepPIN12, HIGH);  // Schalte DMS ein für kurze Abfrage
      delay(10);
      analogValuekg3 = analogRead(3);  //Schwarmabgang ?
     
      analogValuekg2 = analogRead(2);  //Schwarmabgang ?
      digitalWrite(SleepPIN13, LOW);  // Schalte DMS aus
      digitalWrite(SleepPIN12, LOW);  // Schalte Waage2 aus
      if (((letztesGewicht3-analogValuekg3) >= (maxdiff)) || ((letztesGewicht2-analogValuekg2) >= (maxdiff)))
      {
        i = (SLEEP+1); // Bei Schwarmabgang Schlafen beenden
        SMS = 1;  // Bei Schwarmabgang SMS senden
      }
      //Serial.println(letztesGewicht2-analogValuekg2);
      //Serial.println(analogValuekg2);
      letztesGewicht3 = analogValuekg3;
      letztesGewicht2 = analogValuekg2;
      if ((Akku/10) < Akkualarmwert && Akkusmsgesendet == 0) {
      i = (SLEEP+1); // Bei Akkustand low Schlafen beenden, nur wenn es das erste mal vorgekommen ist.
      SMSAkku = 1;
    }
     
      delay(100);
    }// Ende Schwarmabfrage
    }
    //lcd.clear();
    //lcd.setCursor(0, 0);
    //lcd.print("wache auf ");
    digitalWrite(SleepPIN13, HIGH);  // Schalte DMS ein
    digitalWrite(SleepPIN12, HIGH);  // Schalte DMS ein
    delay(100);

    if (SMS == 1) // SMS wenn Schwarmabgang
    {
      Anruf();
    }
   
    if (SMSAkku == 1) // SMS wenn Schwarmabgang
    {
      SMSsendenAkku();
    }
   
   
} // Ende Sleep



void DatenSMSsenden() {
   char aux_string[30];
  Serial.println("Setting CREG");
    delay(2000);
    int i = 0;   
    while( (i<20 || sendATcommand("AT+CREG?", "+CREG:0,1", 500) ||
            sendATcommand("AT+CREG?", "+CREG:0,5", 500)) == 0 ) { i++; };
           
    if (i < 20){
   
     
    sendATcommand("AT+CMGF=1", "OK", 1000);    // sets the SMS mode to text
    sprintf(aux_string,"AT+CSCA=\"%s\"", SMS_Kurzmitteilungsnummer);
    answer = sendATcommand(aux_string, "OK", 2000);    // Kurzmitteilungsnummer senden
   
    sprintf(aux_string,"AT+CMGS=\"%s\"", SMS_number);
    answer = sendATcommand(aux_string, ">", 2000);    // send the SMS number
    if (answer == 1)
    {
 
  GPRS.print("Gewicht_Volk_1, ");
  GPRS.print(gewicht2/10,1);
  GPRS.println(" kg");
  GPRS.print("Gewicht_Volk_2, ");
  GPRS.print(gewicht3/10,1);
  GPRS.println(" kg");
  GPRS.print("Luftdruck, ");
  GPRS.print(pressureKPA+36,0);
  GPRS.println(" mbar");
  GPRS.print("Temperatur, ");
  GPRS.print(temperature,1);
  GPRS.println(" °C");

       
        GPRS.write(0x1A);
        answer = sendATcommand("", "OK", 20000);
        if (answer == 1)
        {
            Serial.print("Sent ");   
        }
        else
        {
            Serial.print("error ");
        }
    }
    }
    else
    {   Serial.println("CMD fehlgeschlagen SMS senden");
        Serial.print("error ");
        Serial.println(answer, DEC);
    }
}



void Anruf()  // Anruf wegen Schwarm
{  char aux_string[30];
  digitalWrite(SleepPINGSM, HIGH);  // Schalte GSM ein
  delay(200);
  startMODUL();
  delay(200);
  //lcd.clear();
  //lcd.print("warten vor Anruf");
  delay(10000);
  //lcd.clear();
  //lcd.print("Anruf");
  sprintf(aux_string, "ATD%s;", phone_number, ";" ); //Nummer wählen
  sendATcommand(aux_string, "OK", 10000);
  delay(30000);
  GPRS.print("AT+CVHU=0");
  GPRS.print("ATH");
  //lcd.clear();
  //lcd.print("Anruf beendet");
  GPRS.println("AT+CPOF"); // 3G Modul ausschalten
  delay(1000);
  digitalWrite(SleepPINGSM, LOW);  // Schalte GSM aus
  delay(1000);
}


void SMSsendenAkku() {

  char aux_string[30];
  startMODUL();
  delay(5000); // für Waldeinsatz und schlechten Empfang 0 standard
  Serial.println("SMS senden");
    delay(2000);
    int i = 0;   
    while( (i<20 || sendATcommand("AT+CREG?", "+CREG:0,1", 500) ||
            sendATcommand("AT+CREG?", "+CREG:0,5", 500)) == 0 ) { i++; };
           
    if (i < 20){
   
     
    sendATcommand("AT+CMGF=1", "OK", 1000);    // sets the SMS mode to text
    sprintf(aux_string,"AT+CSCA=\"%s\"", SMS_Kurzmitteilungsnummer);
    answer = sendATcommand(aux_string, "OK", 2000);    // Kurzmitteilungsnummer senden
   
    sprintf(aux_string,"AT+CMGS=\"%s\"", SMS_number);
    answer = sendATcommand(aux_string, ">", 2000);    // send the SMS number
    if (answer == 1)
    {
 

  GPRS.print("Akku fast leer, ");
  GPRS.print(Akku/10);
  GPRS.println(" V");

       
        GPRS.write(0x1A);
        answer = sendATcommand("", "OK", 20000);
        if (answer == 1)
        {
            Serial.print("Sent ");
        Akkusmsgesendet = 1;
        }
        else
        {
            Serial.print("error ");
        }
    }
    }
    else
    {   Serial.println("CMD fehlgeschlagen SMS senden");
        Serial.print("error ");
        Serial.println(answer, DEC);
    }
    Serial.println("SMS Ende");
}

   


Kdbys měl s tím problém tak ti mužu to arduino s knihovnama vložit na muj google disk (i když jsem teď zjistil, že má přes 200 MB a přes 8000 souborů :-) )
Dej vědět jak jsi pochodil ...

Príspevky: 6
Registrovaný: Sob 11. Apr 2015 19:19:44

Re: Včelárska váha Pomoc

Poslaťod mato2sk » Pon 13. Apr 2015 18:21:36

Tak skúšal som to a robí mi to isté prvý krát keď som to kopíroval tak som to dal prepísať tak som odinštaloval arduino a stiahol som si aj novšiu verziu 1.6.2 nakopíroval do C:\Program Files (x86)\Arduino\libraries a nedal prepísať a zase rovnaká chyba skúšal som nahrať tú knižnicu aj cez arduino - projekt - add zip. librali a to isté neviem či som postupoval správne ak áno tak mi prosí pošli tie tvoje knižnice

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Včelárska váha Pomoc

Poslaťod posjirka » Pon 13. Apr 2015 19:18:13

Jasne zkusim to zitra zabalit. Je pro presnejsi pochopeni problemu : jake mas nastaveni? Myslim tim jaky mas board a programator. Zkusim nasimulovat presne tvoji situaci. Jinak ja ide neinstaluji pouze rozbalim zip na disk. Mam ted spatnou mb na pc tak ve ctvrtem prijde zdroj a zkusim to i na jinem pc.

Príspevky: 6
Registrovaný: Sob 11. Apr 2015 19:19:44

Re: Včelárska váha Pomoc

Poslaťod mato2sk » Pon 13. Apr 2015 19:46:44

ja mám nastavenú arduino pro mini procesor atmega 168-20 5V 16MHZ ale skúsil som teraz atmega 328 a tam to ide ale má to navrhnuté na 168 ale tá asi nemá dostatočnú pamäť toto je už verzia softveru 1.31 asi predtým to bolo navrhnuté pre 168 musím napísať tomu Nemcovi ako to stím vlastne je aby som nevyrábal niečo čo nepôjde. Rozdiel medzi atmega 168 a 328 je len vtom že má väčšiu pamäť ináč je to to isté aj rozloženie nožičiek a všetko ostatné.

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Včelárska váha Pomoc

Poslaťod posjirka » Pon 13. Apr 2015 20:36:17

Nove nejsem si jisty jak je to s uspornym modem. Samotrejme 168 ma 16 kb pameti a 328 ma 32 kb nozicky ma taky stejne ovsem ma jiny pojistky a muze byt ze ta knihovna se odkazuje na neplatnou adresu. Druha moznost je te je chyba v kompilatoru arduina. Moc lidi v okoli nemam co by si s atmegoz hralo ale vetsinou pouzivaji atmega 8 nebo 328. Jestli to neni problem tak pouzij 328. Ted koukam na muj vystup kompilatoru a ten ukazoval velikost pres 20kb. To se ti tedy ten program na 168 nevleze. Predpokladam te ten original nemec je tedy aktualne taky na 328...

Príspevky: 6
Registrovaný: Sob 11. Apr 2015 19:19:44

Re: Včelárska váha Pomoc

Poslaťod mato2sk » Pon 13. Apr 2015 20:57:55

predpokladám že pôvodne to vyvíjal na 168 lebo aj odkaz na stiahnutie softvaru je označený ako v1.0 a keď to stiahnem tak je tam v1.31 asi časom to zmenil niečo doplnil a už sa to nevošlo tak použil 328 a akosi to zabudol zmeniť napísal som mu či môžem použiť 328 lebo do 168 nevojde tak uvidím čo odpíše.

Príspevky: 6
Registrovaný: Sob 11. Apr 2015 19:19:44

Re: Včelárska váha Pomoc

Poslaťod mato2sk » Ned 10. Máj 2015 17:51:29

ešte by som potreboval pomoc neposiela mi to sms s údajmi o hmotnosti, teplote, tlaku a pod. odošle len sms keď poklesne napätie batérie, písal som si s autorom ten mi povedal keď chcem aby to posielalo častejšie tak mám zminiť SLEEP na 8 (ten udaj sa násobý 8s) to by malo poslať raz za minutu ono sa aj niečo začne diať modem naskočí ale nič nepošle na začiatku mám nastavené #define Sendeart 1 to je SMS mod tiež mi napísal že nazačiatku mu to fungovalo ale časom to prerábal aby mu to odosielalo dáta na web do mysql databázi a že sa tam mohla vyskitnúť chyba. Celí kód sa nachádza vyšie.
Kód: Vybrať všetko
void loop()
{ leseDaten(); // lese Daten aus Sensoren
  startMODUL();
  delay(5000); // für Waldeinsatz und schlechten Empfang 0 standard
  if (Sendeart == 1){                      //SMS senden
  DatenSMSsenden();
  SLEEP = 8;

Späť na Projekty vo fáze vývoja