• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Jak zmienić tablicę na liczbę całkowita??
#13
To jest cały kod testowy

Kod:
#include "Nextion.h"
#include "DHTesp.h"
#include <Wire.h>
#include <WiFi.h>
#include <WiFiUdp.h>

#define LED 2                    
#define ANALOG_PIN_0 36  // pomiar napiecia kanał ADC1_CH0

DHTesp dht;


const byte numChars = 32;       //
char receivedChars[numChars];   // zmienne odczytu Serial2 do UDP
boolean newData = false;        //

const char *ssid = "Audi";        //
const char *pwd = "puchatek1978"; // ustawienie sieci Wifi

const char * udpAddress = "192.168.4.1"; // adres serwera
const int udpPort = 2000;                // port UDP

int strona_AC = 0;
boolean AC_data_send = false;


WiFiUDP udp;

// Declare your Nextion objects - Example (page id = 0, component id = 1, component name = "b0")

NexPage page9 = NexPage(9, 0, "page9");
NexPage page11 = NexPage(11, 0, "page11");
NexWaveform s0 = NexWaveform(9, 3, "s0");
NexText t20 = NexText(9, 4, "t20");
NexText tTempC = NexText(11, 3, "tTempC");
NexText tHumidity = NexText(11, 4, "tHumidity");


NexTouch *nex_listen_list[] = {

 &page9,
 &page11,
 
   NULL
};
void page11PopCallback(void *ptr){

 float h = dht.getHumidity();
 float t = dht.getTemperature();
 
 
 if (isnan(h) || isnan(t)) {
   return;
 }  
 
 static char temperatureCTemp[6];
 dtostrf(t, 4, 1, temperatureCTemp);
 tTempC.setText(temperatureCTemp);

 static char hTemp[6];
 dtostrf(h, 4, 0, hTemp);
 tHumidity.setText(hTemp);

}
void page9PopCallback(void *ptr){

  uint8_t adc1 = 0;
  float adcV = analogRead(ANALOG_PIN_0);
 
  adc1 = adcV/15.5;       // 15.5 zeby 1V falował 0-80 jednostek
  s0.addValue(0, 40+adc1); // osfet 40 falowanie 500mV srodek

  static char adc2[7];
  dtostrf(adcV*0.8058, 5, 0, adc2);  // jedna jednostka to 0.8058V
  t20.setText(adc2);
 
}

void setup(void) {    
 dht.setup(14, DHTesp::DHT11);           // Connect DHT sensor to GPIO 14
 Serial.begin(512000);
 Serial2.begin(512000);
 pinMode(LED,OUTPUT);

 WiFi.begin(ssid, pwd);
 udp.begin(udpPort);
 
 while (WiFi.status() != WL_CONNECTED) {
  delay(500);
   digitalWrite(LED,HIGH);
  delay(500);
   digitalWrite(LED,LOW);
 }
 digitalWrite(LED,HIGH);
 
   
 page9.attachPop(page9PopCallback);
 page11.attachPop(page11PopCallback);

}
void loop (){
   nexLoop(nex_listen_list);    // loop wyswietlacza Nextion
   recvWithEndMarker();         // loop odczytu z Serial2
   showNewData();               // loop zapisu serial2 do UDP
   showUdpData();               // loop odczytu udp i zapisu do Serial2
   AC_data();
}

void recvWithEndMarker() {

   static byte ndx = 0;         //
   char endMarker = '\xFF';     // zmienne do odczytu Serial2
   char rc;                     // endMarker to znak konca danych
   
   while (Serial2.available() > 0 && newData == false) // sprawdzenie czy sa dane do odczytu
     {                                                 // i statusu bufora wolny czy zajety
       rc = Serial2.read();           //  odczytanie danych z Serial2 do bufora
       
       if (rc != endMarker) {        // sprawdzenie czy dane maja zakonczenie FF
           receivedChars[ndx] = rc;  
           ndx++;
           if (ndx >= numChars) {
               ndx = numChars - 1;
           }
       }
       else {
           if (ndx > 3)
           {
           receivedChars[ndx] = '\xFF';     // zapisanie  konca danych FF
           ndx = 0;
           newData = true;
            }
            else {
             memset(receivedChars, 0, sizeof(receivedChars)); // czyczenie dwóch FF FF
            }                                                 // Nextion wysyła FF FF FF
        }                                                     // Pierwszy uzyty dwa pozostale
     }                                                        // generuja puste UDP ze znakiem FF
}

void showNewData() {
   if (newData == true) {                       // stats odczytu z Serial2
       udp.beginPacket(udpAddress, udpPort);    // przygotowanie do wysylki UDP
       udp.print(receivedChars);  // zapisanie przychodzace dane Serial2 do UDP
       udp.endPacket();                                 // zakonczeneie danych UDP i wyslaniu
       memset(receivedChars, 0, sizeof(receivedChars)); // czyszczenie bufora odczytu UDP
       newData = false;                                 // zmiana statusu odczutu
   }
}

void showUdpData() {
     char uBuffer[7];     //
     char data_AC_uBuffer[7];
     char data_AC_Buffer[4];
     int i_;                     // zmienne odczytu UDP
     int rc_;                      //
     char startMarker_Nextion = 0x65;
     char startMarker_AC = 0x41;
     char endMarker_AC = '\n';
     
     if (udp.parsePacket()>0)            // sprawdzanie czy pszyszły pakiety UDP
       {
         rc_ = udp.peek();                 // podejrzanie pierwszego bajtu
         if (startMarker_Nextion == rc_){ // sprawdzenie czy pierwszy bajt to 0x65 dla Nextion
             rc_ = udp.read();
             if (udp.available() >= 6)     // sprawdzenie długosci ciagu znakow w UDP
             {                            // dla komendy dotyku Nextion callback
               uBuffer[0] = rc_;  
               for (i_ = 1; i_ < 7; i_ ++){   // rozbijanie ciagu znaków na bufory
                  uBuffer[i_] = udp.read();
               }
               if (0xFF == uBuffer[4] && 0xFF == uBuffer[5] && 0xFF == uBuffer[6])
               {
                 Serial2.write(uBuffer[0]); //
                 Serial2.write(uBuffer[1]); //
                 Serial2.write(uBuffer[2]); //
                 Serial2.write(uBuffer[3]); // zapis buforow odczytu UDP do Serial2
                 Serial2.write(uBuffer[4]); //
                 Serial2.write(uBuffer[5]); //
                 Serial2.write(uBuffer[6]); //
               }else{
                 uBuffer[i_] = 0x00;     // czyszczenie bufora jak nieprawidlowe dane
               }
           }
      }else {
         if (startMarker_AC == rc_){      // sprawdzanie czy pierwszy bajt to 0x41 dla AC
             rc_ = udp.read();
             if (udp.available() >= 6){
               data_AC_uBuffer[0] = rc_;
               for (i_ = 1; i_ < 7; i_ ++){   // rozbijanie ciagu znaków na bufory
                  data_AC_uBuffer[i_] = udp.read();
               }
               if (endMarker_AC == data_AC_uBuffer[6]){
                  data_AC_Buffer[0]= data_AC_uBuffer[2];
                  data_AC_Buffer[1]= data_AC_uBuffer[3];
                  data_AC_Buffer[2]= data_AC_uBuffer[4];
                  data_AC_Buffer[3]= data_AC_uBuffer[5];
                  String dane_UDP_data_AC = String (data_AC_Buffer);
                  strona_AC = dane_UDP_data_AC.toInt();
                  AC_data_send = true;
                 
               }else{
                 data_AC_uBuffer[i_] = 0x00;
               }
             
             }
         }
      }
  }
}  

void AC_data() {

    char startMarker_AC = 0x41;
    char drugiMarker_AC = 0x43;
    char endMarker_AC = '\n';
    int send_AC = -234;
//  if (AC_data_send == true){
 
 if (strona_AC == 5) {
//       if(AC_data_send == true){
       
       udp.beginPacket(udpAddress, udpPort);    // przygotowanie do wysylki UDP
       udp.write(startMarker_AC);
       udp.write(drugiMarker_AC);
       udp.print(send_AC);  
       udp.write(endMarker_AC);
       udp.endPacket();
       AC_data_send = false;          
 }
// }
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Jak zmienić tablicę na liczbę całkowita?? - przez Jarewa0606 - 09-03-2019, 00:09

Skocz do:


Przeglądający: 2 gości