Beiträge: 3.264
Themen: 115
Registriert seit: 05/2002
Hm, ich mag vom Weg her weiter sein, aber mein Weg hat sicher deutlich mehr (oder größere) Löcher als Deiner...
Ich meine damit: Wissen zusammenwüfeln bringt da sicher RICHTIG was.
Ich kann heute Abend mal den Arduino-Code für die Netzwerk-Ampel posten, damit man mal sieht, wie sowas aussieht. Ich denke nicht, daß es schwerer ist wie mit einem PC, auch den muß man programmieren.
Und wenn ich Dosen-Sprachen (Visual-Basic, Visual C++) mit Arduino-Code vergleiche, dann ist letzterer echt easy zu schreiben und zu verstehen. Und: Ein Arduino ist stoßfest, bootet in Millisekunden, läuft an einer Autobatterie wohl Jahrelang...
Die Teile sind simpel, sehr robust, und wenn man mal einen himmelt, dann ist's auch egal - 5$ kostet der Chip.
ja, zeig mal etwas von so einem Programm bitte...... eventuell bestelel ich eins.
Hab schon beim Watterott geguckt
Beiträge: 3.264
Themen: 115
Registriert seit: 05/2002
Wurd gestern leider nichts, dafür aber jetzt
Code: #include <Ethernet.h>
#include <EthernetDHCP.h>
#include <Flash.h>
#include <Fat16util.h> // for FreeRam()
#include <TinyWebServer.h>
#include "Wire.h"
#include "BlinkM_funcs.h"
boolean index_handler(TinyWebServer& web_server);
boolean rot_handler(TinyWebServer& web_server);
boolean gelb_handler(TinyWebServer& web_server);
boolean gruen_handler(TinyWebServer& web_server);
boolean blau_handler(TinyWebServer& web_server);
// I2C-Adresse der Blink-LED
int blinkm_addr = 9; // default address of a blinkm
// Mac Adresse setzen
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Definition der einzelnen Webseiten
TinyWebServer::PathHandler handlers[] = {
{"/", TinyWebServer::GET, &index_handler },
{"/rot.html", TinyWebServer::GET, &rot_handler },
{"/gelb.html", TinyWebServer::GET, &gelb_handler },
{"/gruen.html", TinyWebServer::GET, &gruen_handler },
{"/blau.html", TinyWebServer::GET, &blau_handler },
{NULL},
};
// Code der ersten Webseite, Plus LED ausschalten
boolean index_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Nagios-Ampel...</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0x00, 0x00, 0x00 );
return true;
}
// Code Seite ROT, und LED auf rot
boolean rot_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel rot</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0xFF, 0x00, 0x00 );
return true;
}
// Seite GELB
boolean gelb_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel gelb</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0xFF, 0xFF, 0x00 );
return true;
}
// Seite GRUEN
boolean gruen_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel gruen!</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0x00, 0x99, 0x00 );
return true;
}
// Seite BLAU
boolean blau_handler(TinyWebServer& web_server) {
web_server.send_error_code(200);
web_server.end_headers();
web_server << F("<html><body><h1>Ampel blau</h1></body></html>\n");
BlinkM_setRGB( blinkm_addr, 0x00, 0x00, 0xFF );
return true;
}
boolean has_ip_address = false;
TinyWebServer web = TinyWebServer(handlers, NULL);
const char* ip_to_str(const uint8_t* ipAddr)
{
static char buf[16];
sprintf(buf, "%d.%d.%d.%d\0", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
return buf;
}
void setup() {
Serial.begin(115200);
BlinkM_beginWithPower();
BlinkM_stopScript( blinkm_addr ); // stop startup light script
BlinkM_setRGB( blinkm_addr, 0x00, 0x00, 0x00 );
Serial << F("Free RAM: ") << FreeRam() << "\n";
// Initiate a DHCP session.
Serial << F("Getting an IP address...");
if (!EthernetDHCP.begin(mac)) {
Serial << F("\nCould not get an IP address");
return;
}
has_ip_address = true;
const byte* ip_addr = EthernetDHCP.ipAddress();
// DHCP-Adresse seriell ausgeben
Serial << F("\nMy IP address: ");
Serial.println(ip_to_str(ip_addr));
// Start the web server.
web.begin();
Serial << F("Ready to accept HTTP requests.\n\n");
}
void loop() {
if (has_ip_address) {
EthernetDHCP.maintain();
web.process();
}
}
Sieht schlimmer aus als es ist, immerhin ist das ein kompletter Webserver, der fünf simple Webseiten (rot.html, gruen.html, gelb.html, blau.html und index.html) ausliefern kann.
Einfach Dinge wie z.B. die serielle Schnittstelle abfragen, oder einen Port anschalten, sind deutlich einfacher...
Beiträge: 3.264
Themen: 115
Registriert seit: 05/2002
Eine LED läßt man z.B. so blinken:
Code: void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Oder einen Analog-Wert lesen, und über den seriellen Port ausgeben:
Code: void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue, DEC);
}
Einfacher gehts kaum, ist fast wie Basic
danke Michael!
Ich hatte mir schon einige Seiten im Netz angeschaut.
Ideal für mich als "C" Hasser
Sieht viel übersichtlicher aus.
Ich bin ja eigentlich totaler Assembler Freak.
Michael, welches Arduino Board würdest Du denn empfehlen?
Direkt was dickes, oder ein Uno?
Hier kaufen oder in Hongkong?
Beiträge: 3.264
Themen: 115
Registriert seit: 05/2002
Zitat:Original von Thomas V
Ideal für mich als "C" Hasser
Sieht viel übersichtlicher aus.
Jo, C mag ich auch nicht wirklich, Basic auf dem C64 war immer noch am schönsten
Das hier finde ich aber echt ok, übersichtlich und relativ leicht zu verstehen und vor allem auf eigene Projekte zu adaptieren.
Zitat:Ich bin ja eigentlich totaler Assembler Freak.
Öhm! Stehst Du auch auf Peitsche und sowas? Hihi
Zitat:Michael, welches Arduino Board würdest Du denn empfehlen?
Direkt was dickes, oder ein Uno?
Der normale Uno ist schon "was dickes", es gibt auch noch deutlich kleiner Varianten. Der Uno ist aber sehr universell, man kann Ihn schön neben ein Breadboard (das weiße mit den Löchern) bauen und dann die Erweiterungen einfach lötfrei anstecken, oder man steckt Direkt eine Huckepack-Platine drauf.
Vorteil Uno: Der Prozessor ist gesockelt, wenn man das Ding himmelt, kann man günstig einen neuen draufstecken. Bei Seeedstudio.com gibts Arduino-Nachbauten, die sind günstiger, aber SMD-Bestückt. Da ist es mit dem Austauschen natürlich schwer. Generell sind die Dinger aber sehr robust.
Hier ein Arduino-Nachbau von Seeedstudio (22$):
LINK
Die komplette Serie sieht man hier:
LINK
Sparkfun aus den USA ist auch sehr zuverlässig:
Arduinos bei Sparkfun
Bei Solarbotics habe ich auch schon bestellt, auch problemlos:
Arduinos bei Solarbotics (USA)
Die haben nebenbei auch den kleinsten Arduino überhaupt - die ganzen Bauteile werden AUF (!) den Microcontroller gelötet, das ganze Ding kann man dann in ein Breadboard oder einen Sockel stecken:
Sehr nette Sachen (neben den Arduinos) gibt es auch bei Adafruit.com, die haben schöne Bausätze - unter anderem eine Röhren-Uhr. Die steht auf meiner pers. Wunschliste
Adafruit
Zitat:Hier kaufen oder in Hongkong?
Mit Seeedstudio hatte ich bisher nur beste Erfahrungen. Versandkostenfrei ab 50$, gute Preise, Zahlung per Paypal, schnelle Lieferung. Das ist der Vorteil gegenüber Sparkfun oder Solarbotics, da kostet der Versand. Aber auch die haben immer prompt und problemlos geliefert.
Ich würde erst mal eine "Grundausstattung" (Arduino Uno, 1-x Breadboards, ein paar LEDs, Widerstände, vielleicht ein Relais-Shield) bei Seeedstudio bestellen, und dann mit Seeedduinos weitermachen. Den Arduino Uno sozusagen als Testgerät nehmen, und wenn etwas dann funktioniert, einfach was günstigeres genommen...
Breadboard und so ein Zeug habe ich ja alles.....
werde dann mal ein Uno bestellen...
obwohl, SMD ist auch nicht so tragisch, habe alles da um SMD ein- und auszulöten.
Mache ich ja alles beruflich
Assembler ist schön!
Man kann Rechenschaft über jede µsec. ablegen.
Letztens ein Projekt fertig gestellt mit 30.000 Zeilen Assembler Quelltext, waren dann
knappe 63kB Hex-Code und das alles im 8051 Derivat 89C51ED2....
AVRs bediene ich auch, meist in ultra low power Anwendungen mit Knopfzelle und für 5 Jahre
Dauerbetrieb.
In Basic programmiere ich auch noch hin und wieder, im 8051AH
Sind dann meist Programmänderungen an 15 Jahre alte Steuerungen.... die ich mal verbrochen habe.
Klasse, ich glaube es hat sich gelohnt den Thread hier zu starten!
Wird zwar wahrscheinlich recht lange dauern bis unsere Wünsche fertig werden, aber
ich bin zuversichtlich das wir was auf die Beine stellen wo andere auch was von haben werden
Frage Michael.
Hast Du schon rausgefunden welcher PID für die Fensterheber zuständig ist?
Beiträge: 1.648
Themen: 70
Registriert seit: 04/2009
Ort: Schweiz TG Rheinklingen
Baureihe: C5
Baujahr,Farbe: 2003, nachtschwarz
Corvette-Generationen:
Zitat:Original von Zaphod
Ich würde erst mal eine "Grundausstattung" (Arduino Uno, 1-x Breadboards, ein paar LEDs, Widerstände, vielleicht ein Relais-Shield) bei Seeedstudio bestellen, und dann mit Seeedduinos weitermachen. Den Arduino Uno sozusagen als Testgerät nehmen, und wenn etwas dann funktioniert, einfach was günstigeres genommen...
Und wenn man grad dabei ist gleich noch n paar Optokoppler 4N25/35. Dann kann man sich gleich mit dem Arduino an den J-Bus der Vette hängen.
Ohne zusätzlichen OBD2 Treiber.
ohje..... ich bin gerade bei Seeedstudio am gucken......
das wird ggf. eine teure Bestellung.
GPRS Shield..... dann kann man mit der C5 telefonieren
Beiträge: 3.264
Themen: 115
Registriert seit: 05/2002
Da gibts reichlich Zeug, auch bei den anderen Shops
Und: Ja, es wird teuer. Keine Ahnung, was ich da schon gelassen habe
WLAN-Shield, 2xEthernet-Shield, diverse Arduinos, LEDs, Treiber...
Das mit der Fensterheber-PID sollte kein Problem sein.
Die Busadressen:
Powertrain Control Module (PCM) 016
Electronic Brake Control Module (EBCM) 040
Electronic Suspension Control (ESC) 056
Body Control Module (BCM) 064
Inflatable Restraint Sensing and Diagnostic Module (SDM) 088
Instrument Panel Cluster (IPC) 096
Radio 128
HVAC 153
Driver Door Module (DDM) 160
Passenger Door Module (PDM) 161
Seat Control Module (SCM) 166
Remote Control Door Lock Receiver (RCDLR) 176
Die Adressen sind dezimal, für den ELM muß man's in Hex umrechnen.
Beim ELM die Header (Busadressen) einschalten:
> ATH1
und Monitoring einschalten:
> ATMA
und dann Adressen gucken, wärend man auf's Knöpfchen drückt.
Türöffner Fahrertür ergibt z.B.:
8A C5 A0 A1 22 5F
8A C5 A0 21 22 96
Zuschließen:
8A C5 A0 A0 22 13
8A C5 A0 20 22 DA
8A bezeichnet Modus und Priorität (?),
C5 ist die Busadresse des Empfängers (lt. Unterlagen: "Security", hier: Türverriegelung)
A0 ist die Busadresse des Senders (Dezimal 160 = Driver Door Module)
Lustig: Schickt man das "Tür entriegeln"-Kommando vom ELM, geht die Alarmanlage los. Das Teil merkt, daß da jemand schummeln will
|