Twitter client voor lichtsturing

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 3
Geregistreerd: 02 Mrt 2012, 13:11

Twitter client voor lichtsturing

Berichtdoor Joost » 09 Mei 2012, 12:10

Ik wil van een twitterclient naar een lichtsturing gaan. Een soort van morsecode, die bv bij een a drie pulsen rood licht geeft, bij b 2 pulsen rood en een blauwe.
Die laatste code heb ik al gemaakt via serialmonitor. Dit omdat ik eerst mijn ethernet schield niet online kreeg.
Code: Alles selecteren
int leD1 = 8;               
int leD2 = 7;
int leD3 = 6;
int leD4 = 5;
                                        // de led als een integer instellen, dan kan hij verschillende waarden aan nemen
void setup ()
{
Serial.begin(38400);                    //de arduino kan seriele waarden lezen, met een snelheid van 9600 baud/s
  pinMode(leD1, OUTPUT);
  pinMode(leD2, OUTPUT);
  pinMode(leD3, OUTPUT);
  pinMode(leD4, OUTPUT);
}

void loop()                              // dit is de volledige bassiscode via de serial monitor, hier uit kan zeker al de lichtcode gevormd worden,
                                         // als er dan moet worden aangepast is het waarschijnlijk enkel de "val"
{   while (Serial.available() == 0);     // pas reageren als er iets is in de serail monitor
   char val = Serial.read();             // het teken direct inlezen
                                         //De "val" is weergegeven als een ASCII-waarde; dit kan zo blijven, want dan is er een aparte en al juiste onder verdeling   
if (val ==97)                            //is de ingegeven waarde a dan...
      {digitalWrite (leD1, HIGH);        //led 1 aan
       delay (1000);                     // laatste actie aanhouden
       digitalWrite (leD1, LOW);         //led 1 uit en naar de volgende
       delay (100);
      digitalWrite (leD1, HIGH);        //led 1 aan
       delay (1000);                    // laatste actie aanhouden
       digitalWrite (leD1, LOW);        //led 1 uit en naar de volgende
       delay (100);
       digitalWrite (leD1, HIGH);       //led 1 aan
       delay (1000);                    // laatste actie aanhouden
       digitalWrite (leD1, LOW);        //led 1 uit en naar de volgende
       delay (100);
       digitalWrite (leD1, HIGH);       //led 1 aan
       delay (1000);                    // laatste actie aanhouden
       digitalWrite (leD1, LOW);        //led 1 uit en naar de volgende
       delay (100); }
Serial.println(val);                 
}

Dit werkt, al heb ik hier de kortere code weergegeven. (niet al mijn letters dus).
Ik hoopte dat ik dan gewoon die 'val' mocht gelijk zetten aan de 'client' dat het dan zou werken. Blijkbaar niet. Zelf snap ik echt niet meer waarom.
Bij de serialmonitor lees in principe toch ook een string die wordt doorgestuurd. Of zijn dit direct Char's ? Is er dan een simpel manier om de string 'client' naar Char's te brengen?
En nog een laatste vraagje is er een trukje om de refresh-rate (ik weet niet de officiele benamming) van twitter te omzeilen bij het testen? Want ik ben blijkbaar al meer dan 150 per uur mijn tweets aan het inlezen.
Mijn code nu:
Code: Alles selecteren
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {   0x90, 0xA2, 0xDA, 0x07, 0x00, 0x2B };
IPAddress ip(10,25,32,60);

// initialize the library instance:
EthernetClient client;
// de tijd waarmee ge hercheckt word, best hoger dan 1440, want je mag maar zo'n 150 keer de status van twitter aanvragen per uur.
const int requestInterval = 6000
;  // delay between requests

char serverName[] = "api.twitter.com";  // twitter URL

boolean requested;                   // whether you've made a request since connecting
long lastAttemptTime = 0;            // last time you connected to the server, in milliseconds

String currentLine = "";            // string to hold the text from server
String tweet = "";                  // string to hold the tweet
boolean readingTweet = false;       // if you're currently reading the tweet

// de mogelijke variabelen om te schakelen benoemen
int leD1 = 8;               
int leD2 = 7;
int leD3 = 6;
int leD4 = 5
;

void setup() {
  // de leds als output benoemen
  pinMode(leD1, OUTPUT);
  pinMode(leD2, OUTPUT);
  pinMode(leD3, OUTPUT);
  pinMode(leD4, OUTPUT);
 
  // reserve space for the strings:
  currentLine.reserve(256);
  tweet.reserve(150);

// initialize serial:
  Serial.begin(9600);
  // attempt a DHCP connection:
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Ethernet.begin(mac, ip);
  }
  // connect to Twitter:
  connectToServer();
}

void loop()
{
  if (client.connected()) {
    if (client.available()) {
      // read incoming bytes:
      char inChar = client.read();
      // add incoming byte to end of line:
      currentLine += inChar;
      // if you get a newline, clear the line:
      if (inChar == '\n') {
        currentLine = "";
      }
      // if the current line ends with <text>, it will
      // be followed by the tweet:
      if ( currentLine.endsWith("<text>")) {
        // tweet is beginning. Clear the tweet string:
        readingTweet = true;
        tweet = "";
      }
      // if you're currently reading the bytes of a tweet,
      // add them to the tweet String:
      if (readingTweet) {
        if (inChar != '<') {
          tweet += inChar;
        }
        else {
          // if you got a "<" character,
          // you've reached the end of the tweet:
          readingTweet = false;
          Serial.println(tweet);   
          // close the connection to the server:
          client.stop();
        }
      }
    }   
  }
  else if (millis() - lastAttemptTime > requestInterval) {
    // if you're not connected, and two minutes have passed since
    // your last connection, then attempt to connect again:
    connectToServer();
  }
}

void connectToServer() {
  // attempt to connect, and wait a millisecond:
  Serial.println("connecting to server...");
  if (client.connect(serverName, 80)) {
     Serial.println("making HTTP request...");
  // make HTTP GET request to twitter:
    client.println("GET /1/statuses/user_timeline.xml?screen_name=jaribeo&count=1 HTTP/1.1");
    client.println("HOST: api.twitter.com");
    client.println();

   if (client ==97)                   //werkt nog niet!
   //is de ingegeven waarde a dan...
      {digitalWrite (leD1, HIGH);        //led 1 aan
       delay (100);                     // laatste actie aanhouden
       digitalWrite (leD1, LOW);         //led 1 uit en naar de volgende
       delay (100);
      digitalWrite (leD1, HIGH);        //led 1 aan
       delay (100);                    // laatste actie aanhouden
       digitalWrite (leD1, LOW);        //led 1 uit en naar de volgende
       delay (100);
       digitalWrite (leD1, HIGH);       //led 1 aan
       delay (100);                    // laatste actie aanhouden
       digitalWrite (leD1, LOW);        //led 1 uit en naar de volgende
       delay (100);
  }
}
  // note the time of this connect attempt:
  lastAttemptTime = millis();
}   
 

Ik heb een Uno als basis. Jullie kunnen me echt massa's helpen, ik ben geen programeur en probeer me het zelf te leren. Maar dat gaat soms veel te langzaam :oops:

Advertisement

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 20 gasten