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:
sitz.cpp
sitz.h
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
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
Post a Comment