Go Down

Topic: Einfache Anfänger Frage, benötige Unterstützung (Read 712 times) previous topic - next topic

meisterkraft

Hallo
ich habe Eine Frage zum Unterem Sketch "BLINK SKETCH"

Es geht darum wenn der Pin 13 HIGH ist soll Pin 12 auch HIGH sein
umgegehrt soll wenn Pin 13 auf Low schaltet  Pin 12  mit Delay 2000 auch LOW werden.

Wie müß ich den Sketch verändern?
if abfrage???

bitte um hilfe  !!!



 Blink
 Turns on an LED on for one second, then off for one second, repeatedly.

 This example code is in the public domain.
*/

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
 // initialize the digital pin as an output.
 pinMode(led, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop() {
 digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(1000);               // wait for a second
 digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
 delay(1000);               // wait for a second
}


michael_x

Quote
umgegehrt soll wenn Pin 13 auf Low schaltet  Pin 12 mit Delay 2000 auch LOW werden.

Für mich ist das Problem nicht die Programmierung, sondern die Funktionsbeschreibung.


Wenn Pin 13 auf HIGH geht, soll auch Pin12 auf HIGH: >> Das kriegst du auch allein hin.
Wenn Pin 13 auf Low schaltet, soll bin 12 erstmal HIGH bleiben für weitere 2 sec.  >> OK

Soll Pin 13 wie bisher nach 1 Sekunde wieder HIGH werden ?
Wenn Pin 13 also das zweite Mal LOW wird, soll Pin 12 auch LOW werden ?
Und soll danach ( nach einer weiteren Sekunde ) alles wieder von vorne los gehen ?
Oder soll Pin 12 insgesamt halb so schnell binken wie Pin 13 ?

Wie lang ist also der gesamte Zyklus ? Und wann passiert was ? >> Das kriegst du auch allein hin.



meisterkraft

#2
Nov 15, 2012, 03:53 pm Last Edit: Nov 15, 2012, 03:56 pm by meisterkraft Reason: 1
eigentlich geht es nur den Code
wie sich der Wert Digitalen Ausgangs (PIN 13), in Abhängigkeit,
zum ansteuern eines zweiten digitalen Pin (PIN12) verwenden läst

die zeiten sind eigendlich momentan noch uninteressant,

ich möchte damit üben Sketche zu schreiben

der "Blink" war unr zur Anschauung


Gruß
Thomas

michael_x

Quote
ich möchte damit üben Sketche zu schreiben


Sehr gut!


Code: [Select]
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;


Wenn du rauskriegst, warum die ersten 2 Zeilen mit  //  anfangen,
was in der 3. Zeile die 4 Worte " int  led  =  13  " und das Semikolon bedeuten,

dann bist du soweit, das ganze um eine zweite LED zu erweitern. 

Das beste C - Einsteiger Tutorial kenne ich leider nicht.

meisterkraft

//  bedeutet das es sich um eine Erklärung handelt, um anderen Programieren des lesen erleichtern soll.


------
das erweitern um weitere Pins sind ist Problem

es geht wirklich nur darum wie ich einen Pin schalten kann
in Abängigkeit eines anderen Pins
Beispiel:



int ledPin = 13;       
int testPin= 12;


  // initialize the  pin as an output:
  pinMode(ledPin, OUTPUT);
  pinMode( testPin, OUTPUT);

 
}

void loop() {

 

  // if the Pin13 is high, turn on Pin12:

  if  ??????????

michael_x

Und was ist hier so kompliziert:

Code: [Select]
void loop() {
  digitalWrite(ledPin, HIGH);    // sek 0
  digitalWrite(testPin, HIGH);   // beide an
  delay(1000);                         //
  digitalWrite(ledPin, LOW);    // sek 1: Eine aus, die andere bleibt an ( 2 sek länger, also insgesamt 3 sek )
  delay (1000);               
  digitalWrite(ledPin, HIGH);   //  sek 2: Led 1 blinkt im Sekundentakt
  delay(1000);               
  digitalWrite(ledPin, LOW);    // sek 3:
  digitalWrite(testPin, LOW);   //beide aus
  delay(1000);                         // für 1 sek
}


Wenn das zu einfach war, schau dir andere Beispiele und die Referenz an, es gibt noch viel zu lernen.
z.B. Dass zeitgesteuerte Programme mit delay() zu realisieren eigentlich nur was für ganz blutige Anfänger ist ... ;)

meisterkraft

#6
Nov 15, 2012, 07:25 pm Last Edit: Nov 16, 2012, 12:08 am by uwefed Reason: 1
Hi,
erstmal vielen Dank für deine Arbeit.
ja das mit den Beispielen mache ich,  meine ist  Frage noch nicht ganz beantwortet, ich habe es wohl nicht gut erklärt, entschuldige bitte. Ich hoffe jetzt ist es besser zu verstehen.

Denn Pin 12 soll automatisch (in Abhängigkeit ) mit geschaltet werden, wenn Pin 13 HIGH ist.
es soll in diesen Seketch eingebunden werden.

Soll eine Themperatur Steuerung werden, mit zwei zu schaltenden Bauteilen (Pin 13(led) und Pin 12(led))

!!!!!!!!    doch die LED an Pin 12 testpin  leuchtet nicht mit.....     !!!! wo ist der Fehler?????

Code: [Select]
#include <math.h>

int SensorPin = 0; // Für den Senoreingang wird Analog 0 gewählt
float sensorWert = 0; // Variable, die den Sensor Wert annimmt
float u1 =0; // Spannung u1 am Spannungsteiler
float u2 = 0; // Spannung u2 am Spannungsteiler
float i = 0; // Strom in A
float Rntc = 0; // Widerstand des Thermistors zum Zeitpunkt der Messung
float T = 0; // Variable für gemessene Temperatur
float B = 4540; // Wert aus Datenblatt des Thermistors
float Tn = 298.16; // Nenntemperatur in K
float R25 = 12.83; // Nennwiderstand in Ohm bei Nenntemperatur (aus Datenblatt)

const int analogPin = A0;    // pin that the sensor is attached to
const int ledPin = 13;       // pin that the LED is attached to
const int threshold = 9;   // an arbitrary threshold level that's in the range of the analog input
const int testPin = 12;

void setup() {
pinMode(ledPin, OUTPUT);

pinMode(testPin, OUTPUT);

Serial.begin (9600); // Temperatur kann im "Serial Monitor" abgelesen werden
}

void loop()
{
sensorWert = analogRead(SensorPin); // Wert am Sensor wird gelesen
u2 = (sensorWert * 5)/1024; // Spannung am Sensor wird berechnet
u1 = 5-u2; // Spannung am Vorwiderstand wird berechnet
i = u1/1000; // Strom wird berechnet
Rntc = u2/i; // Widerstand des Thermistors zum Zeitpunkt der Messung

T = (B*Tn)/(B-(log(Rntc/R25)*Tn)); // Berechnung der Temperatur
T = T-273.15; // Umrechnung von K in °C

Serial.print ("Temperatur am PWT = ");
Serial.print (T);
Serial.println (" C");
delay (800); // Temperatur wird alle 2 sec. gemessen


int analogValue = analogRead(analogPin);

  // if the analog value is high enough, turn on the LED:
  if (analogValue > threshold) {
    digitalWrite(ledPin, HIGH);
    digitalWrite(testPin, HIGH);
  }
  else
    digitalWrite(ledPin,LOW);
   
    digitalWrite(testPin,LOW);
   
    Serial.println(analogValue);
  delay(800);        // delay in between reads for stability
 
}

michael_x

Quote
else
    digitalWrite(ledPin,LOW);
   
    digitalWrite(testPin,LOW);
   
    Serial.println(analogValue);
  delay(800);        // delay in between reads for stability


He, he, von Hand einrücken hilft nicht ;)
{ geschweifte Klammer vergessen }
digitalWrite(testPin,LOW); wird immer ausgeführt, da siehst du nicht, dass testPin zwei Zeilen vorher mal kurz eingeschaltet war.

Strg-T macht automatische Einrückungen, und hier im Forum sieht Code in den # Code tags auch besser aus.


Go Up