Pin status werden nicht aktuell gehalten


hallo

mein arduino mega 2560 fragt einige pins ab und versendet die dann über ein wifi shield.
verändere ich aber den status eines pins vergeht einige zeit bis es sich bemerkbar macht.
ich habe es schon mit  digitalreadfast versucht aber keinen effekt hatte.



main:
code: [select]
#include <sd.h>

#include"sitze.h"
#include "filemen.h"//holt  daten von der sd
#include <wifi.h>
#include <wificlient.h>
#include <wifiserver.h>
#include <wifiudp.h>
char filename[] = "test.txt";
int port = 1511;
int status = wl_idle_status;     // wifi radio's status
ipaddress server(192,168,43,1); //wird im setup mit der getawey ip bestückt
wificlient client;
int time = 0; //sende intervall vom datensatz
string maca = "";// macadresse


filemen sdmen;
sit as;

void ssetup(){
  serial.begin(9600); 
}


void lloop(){
  as.get_data_d("test","test");
  serial.println("data");
}


void setup()
{
  serial.begin(9600);
  pinmode(10, output);
  digitalwrite(17,high);  //reset
  sdmen.set_daten();
  as.mount();//set output/input



  serial.println("attempting connect wpa network..."); 
 
  byte mac[6];
  char pw[20];
  char ssid[20];
  sdmen.get_pw().tochararray(pw,20);
  sdmen.get_ssid().tochararray(ssid,20);
 
 
  wifi.macaddress(mac);   
  maca =  string(mac[5],hex);
  maca += string(":");
  maca += string(mac[4],hex);
  maca += string(":");
  maca += string(mac[3],hex);
  maca += string(":");
  maca += string(mac[2],hex);
  maca += string(":");
  maca += string(mac[1],hex);
  maca += string(":");
  maca += string(mac[0],hex);
 
 
  status = wifi.begin(ssid,pw);
 
  if ( status != wl_connected) {
    serial.println("wifi not connect");
    reboot();   
  } 
  else{   
    serial.println("connected network");
    //serial.println(wifi.gatewayip()[1]);
    server[0] = wifi.gatewayip()[0];
    server[1] = wifi.gatewayip()[1];
    server[2] = wifi.gatewayip()[2];
    server[3] = wifi.gatewayip()[3];
   
    if(client.connect(server,port)){     
      serial.println("port connect");
    }
  }
}


void loop()
{
  string teil = as.get_data_fast(sdmen.get_akey(),maca);//maca mac adresse,
  client.println(teil);//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  serial.println(teil);

 
 
  if(!client.connected() )
  {
    serial.println("verbindung verloren");
    client.stop();
    reboot();     
  }

}



sitz.cpp

code: [select]
#include <arduino.h>
#include "sitze.h"
#include "digitalwritefast.h"

#define deb 0

sit::sit()
{
   sit::pin = 10;
   //pins der sensoren
   sit::pinarr[0] = 2;
   sit::pinarr[1] = 3;
   sit::pinarr[2] = 22;//4
   sit::pinarr[3] = 5;
   sit::pinarr[4] = 6;
   sit::pinarr[5] = 8;
   sit::pinarr[6] = 9;
   sit::pinarr[7] = 14;
   sit::pinarr[8] = 15;
   sit::pinarr[9] = 16;

   int 1 = 23;
   for(int = 10;i < 36;i++)
   {
     sit::pinarr[i] = one;
     one++;
   }
   
   create(); 
   set_zustand();
}

int sit::get_gurt(int f) //liest den pin für den gurt des sitzes f aus
{
  int out = 0;
  for(int =0; < arrlen;i++)
  {
    if(f == i)
    {
      out = digitalread(sit::reihe[i][1]);
    } 
  }
  return out;
}


int sit::get_sitz(int f)//liest den pin für die sitzfläche des sitzes f aus
{
  int out = 0;
  for(int =0; < arrlen;i++)
  {
    if(f == i)
    {
      out = digitalread(sit::reihe[i][2]);
    } 
  }
  return out;
}


int sit::get_zustand(int f)//liest den wert für den zutand(i/o) des sitzes f aus
{
  int out = 0;
  for(int =0; < arrlen;i++)
  {
    if(f == i)
    {
      out = digitalread(sit::reihe[i][0]);
    }
  }
  return out;
}



string sit::get_data_d(string key_sd,string mac ){

  string tmp  = "#," + key_sd + ","+mac +",";
  for(int =0; < arrlen;i++){
    tmp.concat(digitalread(sit::reihe[i][0]));
    tmp.concat(digitalread(sit::reihe[i][1]));
    tmp.concat(digitalread(sit::reihe[i][2]));
    tmp.concat(",");
  }
  tmp.concat("#");
  //serial.println(tmp);
  return tmp;

}


string sit::get_data_fast(string key_sd,string mac ){

  string tmp  = "#," + key_sd + ","+mac +",";
  for(int =0; < arrlen;i++){
    tmp.concat(digitalreadfast(sit::reihe[i][0]));
    tmp.concat(digitalreadfast(sit::reihe[i][1]));
    tmp.concat(digitalreadfast(sit::reihe[i][2]));
    tmp.concat(",");
  }
 
  tmp.concat("#");
  //serial.println(tmp);
  return tmp;

}



string sit::get_data(string key_sd,string mac){//modeliert einen string der die werte der sitzgruppe zusammenfast{
 
  string mess = "#," + key_sd + ","+mac;
  mess.concat(","); 
  for(int =0; < arrlen;i++)
  {
      // zustand_gurt_sitz
      mess.concat(sit::get_zustand(i));
      mess.concat(sit::get_gurt(i)); 
      mess.concat(sit::get_sitz(i));
      mess.concat(",");
     // serial.print("lese aus");
  }
  mess.concat("#");
  return mess;

}

void sit::showsit()
{
  for(int i=0; i<arrlen;i++)
  {
    serial.println();
    serial.print("nr. : ");
    serial.println(i);
    serial.print("zustand : ");
    serial.println(sit::reihe[i][0]);

    serial.print("gurt pin : ");
    serial.print(sit::reihe[i][1]);
    serial.print("\t ");
    serial.println(digitalread(sit::reihe[i][1]));
   
    serial.print("sitz pin : ");
    serial.print(sit::reihe[i][2]);
    serial.print("\t ");
    serial.println(digitalread(sit::reihe[i][2]));
  }
}

void  sit::create()//pins werden sitze zugeteilt
{
  int op = 0;
  for(int =0;i<arrlen;i++)
  {
     sit::reihe[i][0] = 0;
     sit::reihe[i][1] = sit::pinarr[op];
     sit::reihe[i][2] = sit::pinarr[op+1];     
     op = op +2;
  }
}

void sit::set_zustand()//fragt einen schalter x ab, ob sitz x aktiv ist
{
  digitalwrite(19,high);
  for(int =0;i<arrlen;i++)
  {
    sit::reihe[i][0] = digitalread(sit::reihe[i][1]); 
    #if deb
    serial.println();
    serial.print("pin: ");
    serial.print(sit::reihe[i][1]);
    serial.print("  |  wert : ");
    serial.print(digitalread(sit::reihe[i][1]));
    serial.println();
    #endif
  }
  digitalwrite(19,low);
}

void sit::mount()//mountet pins , die fuer das programm benutzt werden
{
  for(int =0; i< (arrlen*2);i++ ){
    pinmode(pinarr[i],input);
    //digitalwrite(pinarr[i],low);
   
  }
  pinmode(17,output);//analog 5 (uno)// für den reset
}



void reboot()
{
  serial.println("reboot,  kill self ");
  serial.println();
  delay(1000);
  digitalwrite(17,low);
  while(1);
}



sitz.h

code: [select]
#include <arduino.h>
#include <wifi.h>
#include <wificlient.h>
#include <wifiserver.h>
#include <wifiudp.h>

#ifndef sit_h
#define sit_h
#define arrlen 18


class sit
{
  private:
    int reihe[arrlen][3];
    int cs;
    int  pin;
    int pinarr[arrlen];
   
   
  public:
   
    sit();
    void set_zustand();
    void create();
    void showsit();// ausgabe über die seriellen
    int get_gurt(int);//sensor abfrage
    int get_sitz(int);//sensor abfrage
    int get_zustand(int);//abfrage sitz i/o
    string get_data();// modeliert einen string #,key,data,data,data,data,data,#
    string get_data(string key); //key für die daten
    string get_data(string key,string macad); //key für die daten
    string get_data_d(string key,string macad); //key für die daten //direkter zugrif auf member
    string get_data_fast(string key,string macad);
    void mount();
};

void mount();//mount der wichtigen
void reboot();// reset funktion // programm startet neu

#endif

du solltest das f() makro benutzen um ram zu sparen.
statt serial.print("text"); oder client.print("text");
serial.print(f("text")); oder  client.print(f("text"));
das macht es aber nicht schneller.
grüße uwe


Arduino Forum > International > Deutsch (Moderator: uwefed) > Pin status werden nicht aktuell gehalten


arduino

Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support