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 was aber keinen effekt hatte.
Main:
#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; // the 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 to connect to 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 to 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
#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 one = 23;
for(int i = 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 i =0; i < 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 i =0; i < 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 i =0; i < 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 i =0; i < 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 i =0; i < 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 i =0; i < 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 i =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 i =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 i =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, i kill my self ");
Serial.println();
delay(1000);
digitalWrite(17,LOW);
while(1);
}
sitz.h
#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