2015-01-09 62 views
0
#include <Adafruit_CC3000.h> 
#include <ccspi.h> 
#include <SPI.h> 
#include <string.h> 
#include "utility/debug.h" 
//#include "utility/socket.h" 


// These are the interrupt and control pins 
#define ADAFRUIT_CC3000_IRQ 3 // MUST be an interrupt pin! 
// These can be any two pins 
#define ADAFRUIT_CC3000_VBAT 5 
#define ADAFRUIT_CC3000_CS 10 
// Use hardware SPI for the remaining pins 
// On an UNO, SCK = 13, MISO = 12, and MOSI = 11 
Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT, 
             SPI_CLOCK_DIV2); // you can change this clock speed but DI 



#define WLAN_SSID  "ssid"  // cannot be longer than 32 characters! 
#define WLAN_PASS  "pass" 

// Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2 
#define WLAN_SECURITY WLAN_SEC_WPA2 

//Web transactions on port 80 
Adafruit_CC3000_Server server(80); 
Adafruit_CC3000_Client client; 


void setup() 
{ 
    Serial.begin(115200); 
    Serial.println(F("Hello, CC3000!\n")); 

    displayDriverMode(); 
    Serial.print("Free RAM: "); Serial.println(getFreeRam(), DEC); 

    /* Initialise the module */ 
    Serial.println(F("\nInitialising the CC3000 ...")); 
    if (!cc3000.begin()) 
    { 
    Serial.println(F("Unable to initialise the CC3000! Check your wiring?")); 
    while(1); 
    } 

    /* Optional: Update the Mac Address to a known value */ 

    uint8_t macAddress[6] = { 0x08, 0x00, 0x28, 0x01, 0x79, 0xB7 }; 
    if (!cc3000.setMacAddress(macAddress)) 
    { 
    Serial.println(F("Failed trying to update the MAC address")); 
    while(1); 
    } 
    /* End Optional */ 

    uint16_t firmware = checkFirmwareVersion(); 
    if ((firmware != 0x113) && (firmware != 0x118)) { 
    Serial.println(F("Wrong firmware version!")); 
    for(;;); 
    } 

    displayMACAddress(); 

    /* Delete any old connection data on the module */ 
    Serial.println(F("\nDeleting old connection profiles")); 
    if (!cc3000.deleteProfiles()) { 
    Serial.println(F("Failed!")); 
    while(1); 
    } 

    /* Attempt to connect to an access point */ 
    char *ssid = WLAN_SSID;    /* Max 32 chars */ 
    Serial.print(F("\nAttempting to connect to ")); Serial.println(ssid); 

    /* NOTE: Secure connections are not available in 'Tiny' mode! */ 
    if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) { 
    Serial.println(F("Failed!")); 
    while(1); 
    } 

    Serial.println(F("Connected!")); 

    /* Wait for DHCP to complete */ 
    Serial.println(F("Request DHCP")); 
    while (!cc3000.checkDHCP()) 
    { 
    delay(100); // ToDo: Insert a DHCP timeout! 
    } 

    /* Display the IP address DNS, Gateway, etc. */ 
    while (! displayConnectionDetails()) { 
    delay(1000); 
    } 

    server.begin(); 

} 

void loop() 
{ 

    Adafruit_CC3000_ClientRef client = server.available(); 

    if (client) { 
    // an http request ends with a blank line 
    //Serial.print("client found"); 

    boolean currentLineIsBlank = true; 
    while (client.connected()) { 
     if (client.available()) { 
     char c = client.read(); 
     // if you've gotten to the end of the line (received a newline 
     // character) and the line is blank, the http request has ended, 
     // so you can send a reply 
     if (c == '\n' && currentLineIsBlank) { 
      // send a standard http response header 
      client.println("HTTP/1.1 200 OK"); 
      client.println("Content-Type: text/html"); 
      client.println(); 

      // output the value of each analog input pin 
      for (int analogChannel = 1; analogChannel < 2; analogChannel++) { 
      client.print("Sensor Reading "); 
      client.print(analogChannel); 
      client.print(" is "); 
      client.print(analogRead(analogChannel)); 
      client.println("<br />"); 
      } 
      break; 
     } 
     if (c == '\n') { 
      // you're starting a new line 
      currentLineIsBlank = true; 
     } 
     else if (c != '\r') { 
      // you've gotten a character on the current line 
      currentLineIsBlank = false; 
     } 
     } 
    } 
    // give the web browser time to receive the data 
    delay(1); 
    // close the connection: 
    client.close(); 
    } 
} 


/**************************************************************************/ 
/*! 
    @brief Displays the driver mode (tiny of normal), and the buffer 
      size if tiny mode is not being used 

    @note The buffer size and driver mode are defined in cc3000_common.h 
*/ 
/**************************************************************************/ 
void displayDriverMode(void) 
{ 
    #ifdef CC3000_TINY_DRIVER 
    Serial.println(F("CC3000 is configure in 'Tiny' mode")); 
    #else 
    Serial.print(F("RX Buffer : ")); 
    Serial.print(CC3000_RX_BUFFER_SIZE); 
    Serial.println(F(" bytes")); 
    Serial.print(F("TX Buffer : ")); 
    Serial.print(CC3000_TX_BUFFER_SIZE); 
    Serial.println(F(" bytes")); 
    #endif 
} 

/**************************************************************************/ 
/*! 
    @brief Tries to read the CC3000's internal firmware patch ID 
*/ 
/**************************************************************************/ 
uint16_t checkFirmwareVersion(void) 
{ 
    uint8_t major, minor; 
    uint16_t version; 

#ifndef CC3000_TINY_DRIVER 
    if(!cc3000.getFirmwareVersion(&major, &minor)) 
    { 
    Serial.println(F("Unable to retrieve the firmware version!\r\n")); 
    version = 0; 
    } 
    else 
    { 
    Serial.print(F("Firmware V. : ")); 
    Serial.print(major); Serial.print(F(".")); Serial.println(minor); 
    version = major; version <<= 8; version |= minor; 
    } 
#endif 
    return version; 
} 

/**************************************************************************/ 
/*! 
    @brief Tries to read the 6-byte MAC address of the CC3000 module 
*/ 
/**************************************************************************/ 
void displayMACAddress(void) 
{ 
    uint8_t macAddress[6]; 

    if(!cc3000.getMacAddress(macAddress)) 
    { 
    Serial.println(F("Unable to retrieve MAC Address!\r\n")); 
    } 
    else 
    { 
    Serial.print(F("MAC Address : ")); 
    cc3000.printHex((byte*)&macAddress, 6); 
    } 
} 


/**************************************************************************/ 
/*! 
    @brief Tries to read the IP address and other connection details 
*/ 
/**************************************************************************/ 
bool displayConnectionDetails(void) 
{ 
    uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv; 

    if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv)) 
    { 
    Serial.println(F("Unable to retrieve the IP Address!\r\n")); 
    return false; 
    } 
    else 
    { 
    Serial.print(F("\nIP Addr: ")); cc3000.printIPdotsRev(ipAddress); 
    Serial.print(F("\nNetmask: ")); cc3000.printIPdotsRev(netmask); 
    Serial.print(F("\nGateway: ")); cc3000.printIPdotsRev(gateway); 
    Serial.print(F("\nDHCPsrv: ")); cc3000.printIPdotsRev(dhcpserv); 
    Serial.print(F("\nDNSserv: ")); cc3000.printIPdotsRev(dnsserv); 
    Serial.println(); 
    return true; 
    } 
} 

[說明] 在該行CC3000 + Arduino的[說明]

 // output the value of each analog input pin 
     for (int analogChannel = 1; analogChannel < 2; analogChannel++) { 
     client.print("Sensor Reading "); 
     client.print(analogChannel); 
     client.print(" is "); 
     client.print(analogRead(analogChannel)); 
     client.println("<br />"); 

所示的值是整數。我怎樣才能改變它有十進制數字? 嘗試使用浮點數在

  client.print(float analogRead(analogChannel)); 

但它只是給了我錯誤。任何解決方法?在輸出端有小數點?

回答

1

analogRead返回一個int。這就是爲什麼你會看到0到1023之間的整數。你期望什麼?例如,如果您使用的是3v的參考電壓,則可以這樣做:

float v = 3.0*((float)analogRead(channel))/1024.0; 
client.print(v);